[Помогите]ЧТо делаю не так в скрипте отправки сообщений

Статус
В этой теме нельзя размещать новые ответы.

ewolwer

Гуру форума
Регистрация
15 Окт 2008
Сообщения
246
Реакции
60
Вообщем столкнулся с такой ситуёвиной, сбалабенил тут одну страичку, и нужно сделать форму обратной связи, помоему так это называется, открывается страничка в которой нужно заполнить разные данные, потом отправить и мне на почту приходит то что было заполнено. вообщем нашел вот такой вот скриптец:
zakaz.php
HTML:
<form action="zakaz_obrab.php" method="post" name="form_com">
<p class='dob_comm'><label>ФИО:<BR></label>
<input name="author" type="text" size="30" maxlength="140"></p>
<p class='dob_comm'><label>Ваш телефон:<BR></label>
<input name="telefon" type="text" size="30" maxlength="40"></p>
<p class='dob_comm'><label>Удобное время звонка:<BR></label>
<input name="time" type="text" size="30" maxlength="40"></p>
<p class='dob_comm'><label>Комментариии:<BR>
<textarea name="text" cols="50" rows="4"></textarea></label></p>
<p><input name="sub_com" type="submit" value="Отправить" class="button" title="Нажмите, чтобы отправить"></p>
</form>
zakaz_obrab.php
PHP:
<?php
if (isset($_POST['author'])) {$author = $_POST['author'];}
if (isset($_POST['telefon'])) {$telefon = $_POST['telefon'];}
if (isset($_POST['time'])) {$time = $_POST['time'];}
if (isset($_POST['text'])) {$text = $_POST['text'];}
if (isset($_POST['sub_com'])) {$sub_com = $_POST['sub_com'];}

if (isset($sub_com))
{
if (isset($author)) {trim($author);}
else {$author = "";}
if (isset($telefon)) {trim($telefon);}
else {$telefon = "";}
if (isset($time)) {trim($time);}
else {$time = "";}
if (isset($text)) {trim($text);}
else {$text = "";}
if (empty($author) or empty($telefon) or empty($time) or empty($text))
{exit("<center><h2><BR><BR><BR><BR><BR>Заполните все поля!</h2></center>");}

/* Обрабатываем переменные спец. функциями, чтобы предотвратить атаки злоумышленников */
$author = stripslashes($author);
$text = stripslashes($text);
$author = htmlspecialchars($author);
$text = htmlspecialchars($text);
$telefon = stripslashes($telefon);
$time = stripslashes($time);
$telefon = htmlspecialchars($telefon);
$time = htmlspecialchars($time);
/* Отправляем информацию */

$subject = "Заявка";
$header="Content-type: text/html; charset=\"windows-1251\"";
$header.="From: From <from@mail.ru>";
$header.="Subject: ".$subject;
$header.="Content-type: text/html; charset=\"windows-1251\"";
$address = "ewolwer.seo@gmail.com";
$message = "<body>
<u>Имя:</u><em><b> - ".$author."</b></em><br />
<u>E-mail:</u><em><b> - ".$telefon."</b></em><br />
<u>Удобное время звонка:</u><em><b> - ".$time."</b></em><br />
<u>Сообщение:</u><em><b> - ".$text."</b></em>
</body>";
mail ($address,$subject,$message,$header);
echo "<html><head>
<meta http-equiv='Refresh' content='3; URL=page.html'>
</head></html>
<center><h2><BR><BR><BR><BR><BR>Ваша заявка была успешно отправлена!</h2><BR>Через несколько секунд Вы будете автоматически перемещены на главную страницу сайта.</center>";
}
?>

Мне нужно было переделать его под свои свои поля, вот что получилось:
zakaz.php
HTML:
<form action="zakaz_obrab.php" method="post" name="form_com">
<p class='dob_comm'><label>ФИО:<BR></label>
<input name="author" type="text" size="30" maxlength="140"></p>
<p class='dob_comm'><label>Серия и номер паспорта:<BR></label>
<input name="passport" type="text" size="30" maxlength="140"></p>
<p class='dob_comm'><label>Дата рождения(дд.мм.гггг):<BR></label>
<input name="rozhden" type="text" size="30" maxlength="140"></p>
<p class='dob_comm'><label>Ваш E-mail:<BR></label>
<input name="mail" type="text" size="30" maxlength="140"></p>
<p class='dob_comm'><label>Фактический адрес:<BR></label>
<input name="fakadres" type="text" size="30" maxlength="240"></p>
<p class='dob_comm'><label>Город:<BR></label>
<input name="city" type="text" size="30" maxlength="140"></p>
<p class='dob_comm'><label>Индекс:<BR></label>
<input name="indeks" type="text" size="30" maxlength="140"></p>
<p class='dob_comm'><label>Страна:<BR></label>
<input name="strana" type="text" size="30" maxlength="140"></p>
<p class='dob_comm'><label>Мобильный телефон телефон:<BR></label>
<input name="telefon" type="text" size="30" maxlength="40"></p>
<p><input name="sub_com" type="submit" value="Отправить" class="button" title="Нажмите, чтобы отправить"></p>
</form>
zakaz_obrab.php
PHP:
<?php
if (isset($_POST['author'])) {$author = $_POST['author'];}
if (isset($_POST['telefon'])) {$telefon = $_POST['passport'];}
if (isset($_POST['telefon'])) {$telefon = $_POST['rozhden'];}
if (isset($_POST['telefon'])) {$telefon = $_POST['mail'];}
if (isset($_POST['telefon'])) {$telefon = $_POST['fakadres'];}
if (isset($_POST['telefon'])) {$telefon = $_POST['city'];}
if (isset($_POST['telefon'])) {$telefon = $_POST['indeks'];}
if (isset($_POST['telefon'])) {$telefon = $_POST['strana'];}
if (isset($_POST['telefon'])) {$telefon = $_POST['telefon'];}
if (isset($_POST['sub_com'])) {$sub_com = $_POST['sub_com'];}
if (isset($sub_com))
{
if (isset($author)) {trim($author);}
else {$author = "";}
if (isset($passport)) {trim($passport);}
else {$passport = "";}
if (isset($rozhden)) {trim($rozhden);}
else {$rozhden = "";}
if (isset($mail)) {trim($mail);}
else {$mail = "";}
if (isset($fakadres)) {trim($fakadres);}
else {$fakadres = "";}
if (isset($city)) {trim($city);}
else {$city = "";}
if (isset($indeks)) {trim($indeks);}
else {$indeks = "";}
if (isset($strana)) {trim($strana);}
else {$strana = "";}
if (isset($telefon)) {trim($telefon);}
else {$telefon = "";}


/* Обрабатываем переменные спец. функциями, чтобы предотвратить атаки злоумышленников */
$author = stripslashes($author);
$author = htmlspecialchars($author);
$passport = stripslashes($passport);
$passport = htmlspecialchars($passport);
$rozhden = stripslashes($rozhden);
$rozhden = htmlspecialchars($rozhden);
$mail = stripslashes($mail);
$mail = htmlspecialchars($mail);
$fakadres = stripslashes($fakadres);
$fakadres = htmlspecialchars($fakadres);
$city = stripslashes($city);
$city = htmlspecialchars($city);
$indeks = stripslashes($indeks);
$indeks = htmlspecialchars($indeks);
$strana = stripslashes($strana);
$strana = htmlspecialchars($strana);
$telefon = stripslashes($telefon);
$telefon = htmlspecialchars($telefon);
/* Отправляем информацию */

$subject = "Регистрация на сайте";
$header="Content-type: text/html; charset=\"windows-1251\"";
$header.="From: From <from@mail.ru>";
$header.="Subject: ".$subject;
$header.="Content-type: text/html; charset=\"windows-1251\"";
$address = "email@gmail.com";
$message = "<body>
<u>ФИО:</u><em><b> - ".$author."</b></em><br />
<u>Серия и номер паспорта:</u><em><b> - ".$passport."</b></em><br />
<u>Дата рождения:</u><em><b> - ".$rozhden."</b></em><br />
<u>Ваш E-mail:</u><em><b> - ".$mail."</b></em><br />
<u>Фактический адрес:</u><em><b> - ".$fakadres."</b></em><br />
<u>Город:</u><em><b> - ".$city."</b></em><br />
<u>Индекс:</u><em><b> - ".$indeks."</b></em><br />
<u>Страна:</u><em><b> - ".$strana."</b></em><br />
<u>Мобильный телефон:</u><em><b> - ".$telefon."</b></em><br />

</body>";
mail ($address,$subject,$message,$header);
echo "<html><head>
<meta http-equiv='Refresh' content='3; URL=page.html'>
</head></html>
<center><h2><BR><BR><BR><BR><BR>Ваша заявка была успешно отправлена!</h2><BR>Через несколько секунд Вы будете автоматически перемещены на главную страницу сайта.</center>";
}
?>
Скрипт изначальный рабочий, письма отправляет. После добавления своих полей, при нажатии кнопки отправить пишет заполните все поля. Хотя вроде бы все были заполнены. После этого убрал проверку на заполненность полей и письмо отправилось, Но все поля которые я ввёл были пустыми, а те что были изначально в скрипте - заполнены всё ок.
Вообщем даже не знаю где ошибся, может как то поля по другому добавлять нужно было т.к. в этих полях могут быть и цифры и буквы и знаки препиная...или же где то чего то не учел...помогите пжста :) думаю задача не сильно сложная для тех кто сталкивался с таким :) заранее спасибо!
пысы:
И если кто решит мою проблемку, подскажите сразу как еще в оправку включить к примеру вопрос с тремя овтетами, напротив ответов чекбоксы, только те, которых несколько выбрать можно а не только один :)

Добавлено через 21 минуту
увидел ошибку в zakaz_obrab.php
PHP:
if (isset($_POST['author'])) {$author = $_POST['author'];}
if (isset($_POST['telefon'])) {$telefon = $_POST['passport'];}
if (isset($_POST['telefon'])) {$telefon = $_POST['rozhden'];}
if (isset($_POST['telefon'])) {$telefon = $_POST['mail'];}
if (isset($_POST['telefon'])) {$telefon = $_POST['fakadres'];}
if (isset($_POST['telefon'])) {$telefon = $_POST['city'];}
if (isset($_POST['telefon'])) {$telefon = $_POST['indeks'];}
if (isset($_POST['telefon'])) {$telefon = $_POST['strana'];}
if (isset($_POST['telefon'])) {$telefon = $_POST['telefon'];}
if (isset($_POST['sub_com'])) {$sub_com = $_POST['sub_com'];}
исправил на
PHP:
if (isset($_POST['author'])) {$author = $_POST['author'];}
if (isset($_POST['author'])) {$author = $_POST['author'];}
if (isset($_POST['passport'])) {$passport = $_POST['passport'];}
if (isset($_POST['rozhden'])) {$rozhden = $_POST['rozhden'];}
if (isset($_POST['mail'])) {$mail = $_POST['mail'];}
if (isset($_POST['fakadres'])) {$fakadres = $_POST['fakadres'];}
if (isset($_POST['city'])) {$city = $_POST['city'];}
if (isset($_POST['indeks'])) {$indeks = $_POST['indeks'];}
if (isset($_POST['strana'])) {$strana = $_POST['strana'];}
if (isset($_POST['telefon'])) {$telefon = $_POST['telefon'];}
if (isset($_POST['sub_com'])) {$sub_com = $_POST['sub_com'];}
if (isset($sub_com))
в письме всё равно поля эти пустые приходят :(
После последних исправлений всё заработало :)
осталось только одно, подсказать как добавить вопрос с чекбоксами, и что бы соответственно в письме просто как один два или три варианта в конце прописано было :)
 
У тебя ошибка в проверке. Смотри что ты делаешь:
PHP:
if (isset($_POST['telefon'])) {$telefon = $_POST['passport'];} 
........
if (isset($_POST['telefon'])) {$telefon = $_POST['telefon'];}
Здесь у тебя поочередно переменной telefon присваиваются значения из $_POST, т.е. эта переменная просто так меняет свое значение 10 раз.
Дальще идет
PHP:
if (isset($author)) {trim($author);} 
else {$author = "";}
....
if (isset($telefon)) {trim($telefon);}
В этом блоке у тебя будет существовать только $telefon, которая менялась не понятно зачем 10 раз, и следовательно функция trim обрежет пробелы только у нее. Остальные переменные выражением типа else {$city = "";} станут просто пустыми строками.
Поэтому в 1-м блоке тебе нужно было сдклать так (покажу на 2-х переменных)
PHP:
if (isset($_POST['author'])) {$author = $_POST['author'];} 
if (isset($_POST['passport'])) {$passport = $_POST['passport'];} 
if (isset($_POST['rozhden'])) {$rozhden = $_POST['rozhden'];}
........
А вообще ты видишь, что потом ко всем этим переменным применяетмся дополнительное перобразование
PHP:
($author = stripslashes($author);  
$author = htmlspecialchars($author);
....
Поэтому лучше делать так:
PHP:
if (isset($_POST['telefon'])) {
   $telefon = htmlspecialchars(stripslashes(trim($_POST['telefon'])));
}
И еще. раз эти переменные участвуют только в формировании $message для функции mail() , то htmlspecialchars+stripslashes применять к ним вообще не стоит. Они нужны только если ты их захочешь показать в браузере. $address также не стоит ими преобразовывать.
 
код обработки post-запроса чрезмерно объемный, проще так сделать

PHP:
isset($_POST['sub_com']) OR exit;
function sm_2(&$val) { $val=htmlspecialchars(stripslashes(trim($val))); }
array_walk($_POST,'sm_2');
extract($_POST);

дополненная форма, вопросы с чекбоксами в аттаче
 

Вложения

  • mail.zip
    1,1 KB · Просмотры: 6
Конечно большой, конечно не оптимальный, конечно проверки слабые и много еще чего. Тут вопрос в том,чтобы человек не запутался, и хоть как-то узнал в приведенном скрипте первоисточник.
 
pitkina, Cпасибище громадное! Чутка подправил выдачу того что прийдёт в письме по чекбоксам было :
PHP:
<u>Ответы на вопросы(помечены 'OK'): 1 - {$question1}, 2 - {$question2}, 3 - {$question4}</u>
исправил на :
PHP:
<u>Ответы на вопросы:</u><em><b> - ".$question1."</b></em><br /><em><b> - ".$question2."</b></em><br /><em><b> - ".$question3."</b></em><br />

И всё приходит симпотичным списком. Так что еще раз спасибо!
 
А еще один вопрос. При нажатии на отправить, открывается та же страница с формами и написано вверху спасибо ваще сообщение отправлено, я так понимаю срабатывает эта функция
PHP:
<? $_POST['sub_com'] AND print "<meta http-equiv='Refresh' content='3; URL=page.html'><b>Спасибо, Ваше сообщение отправлено</b>" ?>
а что в ней поправить что при нажатии на отправить открывалась эта же страница но уже без форм для заполнения а просто было спасибо ваше сообщение отправлено?
 
добавить перед <form ... >
PHP:
<? if(!isset($_POST['sub_com'])): ?>

после </form>
PHP:
<? endif; ?>
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху