Colix Опубликовано 3 июня, 2008 Жалоба Поделиться Опубликовано 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", "Неверно введен текст сообщения". Помогите пожалуйста решить проблему, всем заранее спасибо. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
motorway Опубликовано 3 июня, 2008 Жалоба Поделиться Опубликовано 3 июня, 2008 Думаю, в проверке на preg_match надо сделать 3 знака равно :bleh: Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
alex45 Опубликовано 4 июня, 2008 Жалоба Поделиться Опубликовано 4 июня, 2008 Сделал, но теперь всегда пишет, что поля заполненны верно, даже если они не верны. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
motorway Опубликовано 4 июня, 2008 Жалоба Поделиться Опубликовано 4 июня, 2008 (изменено) Очевидно, что если что-то ВСЕГДА пишет, то просто в этой проверке это всегда выполняется. На всякий случай можно взять в скобки проверку strlen <> 20 Изменено 4 июня, 2008 пользователем motorway Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
alex45 Опубликовано 4 июня, 2008 Жалоба Поделиться Опубликовано 4 июня, 2008 Непомогает. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
alex45 Опубликовано 4 июня, 2008 Жалоба Поделиться Опубликовано 4 июня, 2008 Все я решил проблему. Надо было объявить переменные $name, $email, $text, тоже глобальными. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
motorway Опубликовано 4 июня, 2008 Жалоба Поделиться Опубликовано 4 июня, 2008 я же говорил, дело в проверке :bye1: нигде в другом месте не могло быть, значит, надо было проверить значения переменных Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Colix Опубликовано 5 июня, 2008 Автор Жалоба Поделиться Опубликовано 5 июня, 2008 Все я решил проблему. Надо было объявить переменные $name, $email, $text, тоже глобальными. Я же тебе это уже говорил! Ты сказал, что не помогло. 0_о Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
alex45 Опубликовано 5 июня, 2008 Жалоба Поделиться Опубликовано 5 июня, 2008 Я нетуда прописал. Надо было в функцию, которая отвечет за провреку полей форм. Я вот так и неврубился почему именно в ней работает, а если в другой части кода объявишь глобальными, то неработает. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.