Fliand
Well-Known Member
- Регистрация
- 16.09.2007
- Сообщения
- 81
Вот возникла проблема. У меня был код, который добавлял сообшения в файл. В нем сразу же проверялись поля формы.
вот код файла add_message.php
Но потом возникла потребность в разделение кода.
И я решил добавить проверку форм в спомогательный файл functions.php
При этом код add_message.php стал таким
Вот в чем проблема, в самом начале, когда был ток один файл все работало, но когда код разделил, при заполнение форм, мне всегда показывает сообщение, что все поля заполнены неверно, даже когда они верны.
вот код файла add_message.php
Код:
<!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>
И я решил добавить проверку форм в спомогательный файл functions.php
Код:
<?php
// Файлу с сообщениями
$file = 'message/messages.txt';
// Временный файл с сообщениями
$file_tmp = 'message/message_tmp.txt';
//Сообщений на странице.
$posts = 5;
// Проверка полей форм
function check_form() {
global $text_er;
$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[] = 'Неверно введен текст сообщения';
}
return $status;
}
// Замена bb-code на теги
function bb_code($text_bb) {
$text = str_replace('[b]','<b>',$text_bb);
$text = str_replace('[/b]','</b>',$text);
$text = str_replace('[i]','<i>',$text);
$text = str_replace('[/i]','</i>',$text);
$text = str_replace('[u]','<u>',$text);
$text = str_replace('[/u]','</u>',$text);
$text = str_replace('[s]','<s>',$text);
$text = str_replace('[/s]','</s>',$text);
$text = preg_replace('/(\[url=)(.+)(\])(.+)(\[\/url\])/', "<a href=\"$2\">$4</a>", $text);
$text = preg_replace('/(\[img\])(.+)(\[\/img\])/', "<img src=\"$2\">", $text);
$text = str_replace("\r\n", "<br>", $text);
$text = str_replace("\r", "<br>", $text);
$text = str_replace("\n", "<br>", $text);
return $text;
}
?>
Код:
<?php
require_once 'functions.php';
?>
<!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 = 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 = "Вы не заполнили поля";
$title = "Вы не заполнили поля";
}
?>
<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>";
}
?>
</ul>
</div>
</div>
</body>
</html>