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 Я нетуда прописал. Надо было в функцию, которая отвечет за провреку полей форм. Я вот так и неврубился почему именно в ней работает, а если в другой части кода объявишь глобальными, то неработает. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти