Colix Posted June 3, 2008 Report Share Posted June 3, 2008 Итак был код, который добавлял сообщение в файл, вот такой: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><?php if(isset($_POST['submit'])) { $name = $_POST['nick_name']; $email = $_POST['e_mail']; $text = $_POST['text']; $status = false; if(preg_match('/\S/', $name) == false || (strlen($name)) > 20) { $status = true; $text_er[] = 'Неверно поле Nick'; } if(preg_match('/\w{2,}@\w{2,}\.\w{2,}/', $email) == false || (strlen($email)) > 30) { $status = true; $text_er[] = 'Неверно поле e-mail'; } if(preg_match('/\S/', $text) == false || (strlen($text)) > 500) { $status = true; $text_er[] = 'Неверно введен текст сообщения'; } if(!$status) { $name = htmlspecialchars(stripslashes($name)); $email = htmlspecialchars(stripslashes($email)); $text = htmlspecialchars(stripslashes($text)); $result_text = bb_code($text); $fr = fopen($file,'a'); if(fputs($fr, $name."<|>".$email."<|>".trim($result_text)."<|>".date("d.m.Y, H:i")."\r\n") != false) { echo "<meta http-equiv='Refresh' content='3; url=index.php'>"; $text_show = "Ваше сообщение успешно добавлено. <br> Если ваш браузер не поддерживает автоматическую переадресацию то перейдите по ссылке. <a href=\"index.php\">index.php</a>"; $title = 'Сообщение успешно добавленно'; fclose($fr); } else { $text_show = "Произошла ошибка при добовления сообщения. Поробуйте позже. <br> <a href=\"java script:window.history.back();\">Назад</a>"; $title = 'Произошла ошибка при добовление сообщения'; fclose($fr); } } } else { $text_show = "Вы не заполнили поля"; }?><meta http-equiv="Content-Type" content="text/html; charset=windows-1251"><title><?=$title;?></title><link rel="stylesheet" type="text/css" href="styles/style.css"></head><body><div id="all" style="vertical-align:middle;"><div id="main"><?=$text_show;?><p><ul><?php if($status) { foreach($text_er as $val) {?> <li><?=$val;?></li><?php } echo "<a href=\"java script:window.history.back();\">Назад</a>"; unset($text_er); }?></ul></div></div></body></html> Но приспичило PHP - код отвечающий за обработку корректности данных в форме засунуть в отдельный файл и соответсвенно в функцию, вот что получилось, главный файл add_message.php: <?phprequire_once 'functions.php';?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><?phpif(isset($_POST['submit'])) { $name = $_POST['nick_name']; $email = $_POST['e_mail']; $text = $_POST['text']; $status = check_form(); if(!$status) { $name = htmlspecialchars(stripslashes($name)); $email = htmlspecialchars(stripslashes($email)); $text = htmlspecialchars(stripslashes($text)); $result_text = bb_code($text); $fr = fopen($file,'a'); if(fputs($fr, $name."<|>".$email."<|>".trim($result_text)."<|>".date("d.m.Y, H:i")."\r\n") != false) { echo "<meta http-equiv='Refresh' content='3; url=index.php'>"; $text_show = "Ваше сообщение успешно добавлено. <br> Если ваш браузер не поддерживает автоматическую переадресацию то перейдите по ссылке. <a href=\"index.php\">index.php</a>"; $title = 'Сообщение успешно добавленно'; fclose($fr); } else { $text_show = "Произошла ошибка при добовления сообщения. Поробуйте позже. <br> <a href=\"java script:window.history.back();\">Назад</a>"; $title = 'Произошла ошибка при добовление сообщения'; fclose($fr); } }} else { $text_show = "Вы не заполнили поля";}?><meta http-equiv="Content-Type" content="text/html; charset=windows-1251"><title><?=$title;?></title><link rel="stylesheet" type="text/css" href="styles/style.css"></head><body><div id="all" style="vertical-align:middle;"><div id="main"><?=$text_show;?><p><ul><?phpif($status) { foreach($text_er as $val) {?> <li><?=$val;?></li><?php } echo "<a href=\"java script:window.history.back();\">Назад</a>";}?></ul></div></div></body></html> И вспомогательный, functions.php: <?php// Файлу с сообщениями$file = 'message/messages.txt';// Временный файл с сообщениями$file_tmp = 'message/message_tmp.txt';//Сообщений на странице.$posts = 5;// Проверка полей формfunction check_form() { $status = false; $text_er = array(); global $text_er; if(preg_match('/\S/', $name) == false || (strlen($name)) > 20) { $status = true; $text_er[] = 'Неверно поле Nick'; } if(preg_match('/\w{2,}@\w{2,}\.\w{2,}/', $email) == false || (strlen($email)) > 30) { $status = true; $text_er[] = 'Неверно поле e-mail'; } if(preg_match('/\S/', $text) == false || (strlen($text)) > 500) { $status = true; $text_er[] = 'Неверно введен текст сообщения'; } return $status;}?> Так вот, после этих преобразований проблема заключается в том, что: что бы ты ни ввёл в форму, он выдаёт все три сообщения об ошибке: "Неверно поле Nick", "Неверно поле e-mail", "Неверно введен текст сообщения". Помогите пожалуйста решить проблему, всем заранее спасибо. Link to comment Share on other sites More sharing options...
motorway Posted June 3, 2008 Report Share Posted June 3, 2008 Думаю, в проверке на preg_match надо сделать 3 знака равно :bleh: Link to comment Share on other sites More sharing options...
alex45 Posted June 4, 2008 Report Share Posted June 4, 2008 Сделал, но теперь всегда пишет, что поля заполненны верно, даже если они не верны. Link to comment Share on other sites More sharing options...
motorway Posted June 4, 2008 Report Share Posted June 4, 2008 (edited) Очевидно, что если что-то ВСЕГДА пишет, то просто в этой проверке это всегда выполняется. На всякий случай можно взять в скобки проверку strlen <> 20 Edited June 4, 2008 by motorway Link to comment Share on other sites More sharing options...
alex45 Posted June 4, 2008 Report Share Posted June 4, 2008 Непомогает. Link to comment Share on other sites More sharing options...
alex45 Posted June 4, 2008 Report Share Posted June 4, 2008 Все я решил проблему. Надо было объявить переменные $name, $email, $text, тоже глобальными. Link to comment Share on other sites More sharing options...
motorway Posted June 4, 2008 Report Share Posted June 4, 2008 я же говорил, дело в проверке :bye1: нигде в другом месте не могло быть, значит, надо было проверить значения переменных Link to comment Share on other sites More sharing options...
Colix Posted June 5, 2008 Author Report Share Posted June 5, 2008 Все я решил проблему. Надо было объявить переменные $name, $email, $text, тоже глобальными. Я же тебе это уже говорил! Ты сказал, что не помогло. 0_о Link to comment Share on other sites More sharing options...
alex45 Posted June 5, 2008 Report Share Posted June 5, 2008 Я нетуда прописал. Надо было в функцию, которая отвечет за провреку полей форм. Я вот так и неврубился почему именно в ней работает, а если в другой части кода объявишь глобальными, то неработает. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now