Форма обратной связи- недостатки в коде

vputi
На сайте с 31.03.2006
Offline
167
928

нашел просто замечательную форму обратной связи, из минусов - при введении кода подтверждения с ошибкой все поля очищаются....

Как это исправить?

архив с формой тут http://slil.ru/26434045

Быстро едешь, тихо понесут... www.unitytrans.ru (www.unitytrans.ru)
Loko
На сайте с 28.01.2007
Offline
101
#1
vputi:
Как это исправить?

а че тут думать... записывайте переменные в сессию и вставляйте данные в поля... все просто...

vputi
На сайте с 31.03.2006
Offline
167
#2
Loko:
а че тут думать... записывайте переменные в сессию вставляйте данные в поля... все просто...

если не трудно ткни носом в код, в пхп как свинья в апельсинах 🚬

Loko
На сайте с 28.01.2007
Offline
101
#3

не знаю... не проверял, но должно по идее работать...

index.php


<?php
error_reporting (0);
include('kcaptcha/kcaptcha.php');
session_start();
require_once("config.php");

if(isset($_POST['selfCC'])){
$_SESSION['posName']=$_POST['posName'];
$_SESSION['posEmail']=$_POST['posEmail'];
$_SESSION['posRegard']=$_POST['posRegard'];
$_SESSION['posText']=$_POST['posText'];
}

if ($_POST['act']== "y")
{
if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['keystring'])
{

if (isset($_POST['posName']) && $_POST['posName'] == "")
{
$statusError = "$errors_name";
}
elseif (isset($_POST['posEmail']) && $_POST['posEmail'] == "")
{
$statusError = "$errors_mailfrom";
}
elseif(isset($_POST['posEmail']) && !preg_match("/^([a-z,._,0-9])+@([a-z,._,0-9])+(.([a-z])+)+$/", $_POST['posEmail']))
{
$statusError = "$errors_incorrect";

unset($_POST['posEmail']);
}
elseif (isset($_POST['posRegard']) && $_POST['posRegard'] == "")
{
$statusError = "$errors_subject";
}
elseif (isset($_POST['posText']) && $_POST['posText'] == "")
{
$statusError = "$errors_message";
}

elseif (!empty($_POST))
{
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: $content charset=$charset\r\n";
$headers .= "Date: ".date("Y-m-d (H:i:s)",time())."\r\n";
$headers .= "From: \"".$_POST['posName']."\" <".$_POST['posEmail'].">\r\n";
$headers .= "X-Mailer: My Send E-mail\r\n";

mail("$mailto","$subject","$message","$headers");

unset($name, $posText, $mailto, $subject, $posRegard, $message);

$statusSuccess = "$send";
}

}else{
$statusError = "$captcha_error";
unset($_SESSION['captcha_keystring']);
}
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Обратная связь</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<link href="style/main.css" rel="stylesheet" type="text/css" media='screen,projection' />

</head>
<body>
<h2>Обратная связь</h2>
<p id="emailSuccess">
<strong style="color:green;"><?php echo "$statusSuccess" ?></strong>
</p>
<p id="emailError">
<strong style="color:red;"><?php echo "$statusError" ?></strong>
</p>
<div id="contactFormArea">
<form action="./" method="post" id="cForm">
<input type="hidden" name="act" value="y" />
<fieldset>
<label for="posName"><b>Ваше имя:</b></label><font size="2">Введите реальное имя, чтобы мы знали как<br> к вам обращяться<br>
<input class="text" type="text" size="25" name="posName" id="posName" value="<?php echo $_SESSION['posName'] ?>"/>
<label for="posEmail"><b>Ваш E-mail адрес:</b></label><font size="2">Введите реальный e-mail адрес, на него вы<br>получите ответ на ваше сообщение<br>
<input class="text" type="text" size="25" name="posEmail" id="posEmail" value="<?php echo $_SESSION['posEmail'] ?>"/>
<label for="posRegard"><b>Тема сообщения:</b></label><font size="2">Правильно введенная тема облегчит поиск<br>вашего письма, среди остальных писем<br></font>
<input class="text" type="text" size="25" name="posRegard" id="posRegard" value="<?php echo $_SESSION['posRegard'] ?>" />
<label for="posText"><b>Сообщение:</b></label>
<textarea cols="50" rows="5" name="posText" id="posText"><?php echo $_SESSION['posText'] ?></textarea>
<label for="posCaptcha"><b>Текст на изображении</b>:</label><font size="2">Просто дайте нам понять, что вы не спамер<br>Если вам не понятен текст на изображении обновите страницу, нажав F5<br></font><img src="kcaptcha?<?php echo session_name()?>=<?php echo session_id()?>"><br><input class="text" type="text" size="25" name="keystring" id="keystring" />
<label>

<input class="submit" type="submit" name="selfCC" id="selfCC" value=" Отправить " />
</label>
</fieldset>
</form>

</div>


</body>
</html>
vputi
На сайте с 31.03.2006
Offline
167
#4

Loko, спасибо! проверю и отпишусь

Givandos
На сайте с 25.06.2007
Offline
33
#5

Да не нужно никаких сессий для этого дела, ведь Вы же все равно уже передали все значения массивом ПОСТ. Вот с него и вставляйте, если переменная не пустая. То есть, по сути, то же что и для сессий, только без записи в сессии и вытаскивать не с них а с $_POST. Преимущество - меньше лишнего кода + незачем дублировать то, что уже есть, то есть незачем создавать лишний массив. Да и по трафику лишние байты юзверю качать/отдавать не нужно будет. Байты - это мелочь, но с них все начинается.

Loko
На сайте с 28.01.2007
Offline
101
#6

Правильно... торможу :)))

vputi
На сайте с 31.03.2006
Offline
167
#7

мужики, код что выше поставил, все работает...

Выложите пожалуйста вашу идею в коде на обозрение

Givandos
На сайте с 25.06.2007
Offline
33
#8

Вродь как ошибок синтаксиса негде не допустил, но проверки в работе не делал. И так должно работать.

<?php

error_reporting (0);
include('kcaptcha/kcaptcha.php');
session_start();
require_once("config.php");


if ($_POST['act']== "y")
{
if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['keystring'])
{

if (isset($_POST['posName']) && $_POST['posName'] == "")
{
$statusError = "$errors_name";
}
elseif (isset($_POST['posEmail']) && $_POST['posEmail'] == "")
{
$statusError = "$errors_mailfrom";
}
elseif(isset($_POST['posEmail']) && !preg_match("/^([a-z,._,0-9])+@([a-z,._,0-9])+(.([a-z])+)+$/", $_POST['posEmail']))
{
$statusError = "$errors_incorrect";

unset($_POST['posEmail']);
}
elseif (isset($_POST['posRegard']) && $_POST['posRegard'] == "")
{
$statusError = "$errors_subject";
}
elseif (isset($_POST['posText']) && $_POST['posText'] == "")
{
$statusError = "$errors_message";
}

elseif (!empty($_POST))
{
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: $content charset=$charset\r\n";
$headers .= "Date: ".date("Y-m-d (H:i:s)",time())."\r\n";
$headers .= "From: \"".$_POST['posName']."\" <".$_POST['posEmail'].">\r\n";
$headers .= "X-Mailer: My Send E-mail\r\n";

mail("$mailto","$subject","$message","$headers");

unset($name, $posText, $mailto, $subject, $posRegard, $message);

$statusSuccess = "$send";
}

}else{
$statusError = "$captcha_error";
unset($_SESSION['captcha_keystring']);
}
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Обратная связь</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<link href="style/main.css" rel="stylesheet" type="text/css" media='screen,projection' />

</head>
<body>
<h2>Обратная связь</h2>
<p id="emailSuccess">
<strong style="color:green;"><?php echo "$statusSuccess" ?></strong>
</p>
<p id="emailError">
<strong style="color:red;"><?php echo "$statusError" ?></strong>
</p>
<div id="contactFormArea">
<form action="./" method="post" id="cForm">
<input type="hidden" name="act" value="y" />
<fieldset>
<label for="posName"><b>Ваше имя:</b></label><font size="2">Введите реальное имя, чтобы мы знали как<br> к вам обращяться<br>
<input class="text" type="text" size="25" name="posName" id="posName" value="<?php echo $_POST['posName'] ?>"/>
<label for="posEmail"><b>Ваш E-mail адрес:</b></label><font size="2">Введите реальный e-mail адрес, на него вы<br>получите ответ на ваше сообщение<br>
<input class="text" type="text" size="25" name="posEmail" id="posEmail" value="<?php echo $_POST['posEmail'] ?>"/>
<label for="posRegard"><b>Тема сообщения:</b></label><font size="2">Правильно введенная тема облегчит поиск<br>вашего письма, среди остальных писем<br></font>
<input class="text" type="text" size="25" name="posRegard" id="posRegard" value="<?php echo $_POST['posRegard'] ?>" />
<label for="posText"><b>Сообщение:</b></label>
<textarea cols="50" rows="5" name="posText" id="posText"><?php echo $_POST['posText'] ?></textarea>
<label for="posCaptcha"><b>Текст на изображении</b>:</label><font size="2">Просто дайте нам понять, что вы не спамер<br>Если вам не понятен текст на изображении обновите страницу, нажав F5<br></font><img src="kcaptcha?<?php echo session_name()?>=<?php echo session_id()?>"><br><input class="text" type="text" size="25" name="keystring" id="keystring" />
<label>

<input class="submit" type="submit" name="selfCC" id="selfCC" value=" Отправить " />
</label>
</fieldset>
</form>

</div>


</body>
</html>

А вот насчет error_reporting (0); - тут лучше не баловаться - рабочий вариант скрипта и без данной фишки (отчет об ошибках - без отчета) не должен выдавать ошибок. Так что для отладки эту строку лучше убрать!

Seredniy
На сайте с 17.03.2008
Offline
251
#9

Отчет о ошибках пользователю может и не нужно видеть... но я советую оставить вывод ошибок на какой-то период. и в самом верху написать что-то типа "если нашли ошибку, моя аська такая-то...".

Таким образом вы сможете точно проверить на ошибки скрипт, сами вы никогда всех случаев не учтете.

Wordpress и другие CMS: правки, настройка, верстка и натяжка шаблонов, разработка сайтов "под ключ" (/ru/forum/1008050)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий