Помогите доработать форму обратной связи.

12 3
Varkolak
На сайте с 03.06.2005
Offline
174
1604

Очередной вопрос по формам, что бы хоть как то начать изучать php, решил почти сам сделать скрипт отправки писем с сайта.

Вот скрипт:


<?php

if (isset ($name))
{
$name = substr($name,0,20);
if (empty($_POST['name']))
{
echo "Сообщение об ошибке";
}

if (isset ($surname))
{
$name = substr($surname,0,20);
if (empty($_POST['surname']))
{
echo "Сообщение об ошибке";
}

$today = date("Y");
$to = "******@mail.ru";
$subject = "Тема сообщения";
$message = "
Фамилия: $surname\n
Имя: $name";


mail ($to,$subject,$message) or print "Не могу отправить письмо !!!";
echo "Спасибо за отправку вашего сообщения<br /><a href='/'>Вернуться на главную</a>";
exit;
?>

Соответственно из html формы передаются данные name и surname.

Помогите закончить ее

html/css/js верстка и разработка сайтов на hostcms (хостцмс) - skype: varkolak1, тел: 89675012935, e-mail: anton.yurzanov@gmail.com
HC
На сайте с 24.05.2006
Offline
46
#1
Varkolak:
if (isset ($name))

проверяйте $_GET или $_POST, смотря чем передаете. Можете проверять $_REQUEST

Вот здесь ошибка:

$name = substr($surname,0,20);

нужно

$surname = substr($surname,0,20);

Т.е. примерно будет так:

<?php 


if (isset($_POST['name']))
{
$name = substr($_POST['name'], 0, 20);
}
else
{
$name = '';
echo "Сообщение об ошибке";
}

if (isset($_POST['surname']))
{
$surname = substr($_POST['surname'], 0, 20);
}
else
{
$surname = '';
echo "Сообщение об ошибке";
}

$today = date("Y");
$to = "******@mail.ru";
$subject = "Тема сообщения";
$message = "
Фамилия: $surname\n
Имя: $name";

mail ($to,$subject,$message) or print "Не могу отправить письмо !!!";
echo "Спасибо за отправку вашего сообщения<br /><a href='/'>Вернуться на главную</a>";
exit;
?>

Кроме того в mail() укажите кодировку, в которой отправляете и content-type

Система управления сайтом HostCMS (http://www.HostCMS.ru) - многосайтовость, множество модулей, обмен с 1С, бесплатная версия. Скидка 40% на систему управления для дилеров (http://www.hostcms.ru/partners/partnership/) и 20% для партнеров-фрилансеров (http://www.hostcms.ru/partners/freelance/).
Varkolak
На сайте с 03.06.2005
Offline
174
#2

HostCMS, форма заработала, спасибо, но сообщения об ошибке (превышение кол-ва символов не выводится и пустое поле) не выводятся, письмо все равно отправляется.

Dreammaker
На сайте с 20.04.2006
Offline
569
#3


<?php

if (!isset($_POST['name']) || !$name = substr($_POST['name'], 0, 20))
{
echo "Сообщение об ошибке";
}
elseif (!isset($_POST['surname']) || !$surname = substr($_POST['surname'], 0, 20) )
{
echo "Сообщение об ошибке";
}
else
{
$today = date("Y");
$to = "******@mail.ru";
$subject = "Тема сообщения";
$message = "
Фамилия: $surname\n
Имя: $name";

mail ($to,$subject,$message) or die( "Не могу отправить письмо !!!" );
echo "Спасибо за отправку вашего сообщения<br /><a href='/'>Вернуться на главную</a>";
}
?>

update: или можете разнести в разные ветки условий проверку на пустоту и превышение количества символов(но проверять также полседовательно). Кроме того, тоже самое можно делать и с помощью switch - case .

Varkolak
На сайте с 03.06.2005
Offline
174
#4

Dreammaker, а с чем может быть связано что ограничение на количество символов не действует?

Пустота проверяется.

Shtogrin
На сайте с 02.11.2006
Offline
95
#5

Сделайте попроще проверку на длину

strlen($_POST['name'])<20

вместо

!$name = substr($_POST['name'], 0, 20) - неправильно

И поскольку у нас не будет переменных $name, $surname, то надо поменять

$message = "Фамилия: {$_POST['surname']}\nИмя: {$_POST['name']}";

www.shtogrin.com (http://www.shtogrin.com/). Канцтовары (http://www.invit.com.ua/). 1С Бухгалтерия (http://account.kiev.ua/).
Shtogrin
На сайте с 02.11.2006
Offline
95
#6

Измененный вариант Dreammaker


<?php

if (!isset($_POST['name']) || strlen($_POST['name'])<20)
{
echo "Сообщение об ошибке";
}
elseif (!isset($_POST['surname']) || strlen($_POST['surname'])<20)
{
echo "Сообщение об ошибке";
}
else
{
$to = "******@mail.ru";
$subject = "Тема сообщения";
$message = "Фамилия: {$_POST['surname']}\nИмя: {$_POST['name']}";
mail ($to,$subject,$message) or die( "Не могу отправить письмо !!!" );
echo "Спасибо за отправку вашего сообщения<br /><a href='/'>Вернуться на главную</a>";
}
?>
Dreammaker
На сайте с 20.04.2006
Offline
569
#7

Varkolak,

Shtogrin правильно написал о проверке. Я на автомате скопировал без изменений, вот оттуда и неправильная работа :)

Varkolak
На сайте с 03.06.2005
Offline
174
#8

Проверка символов вновь не работает (

HC
На сайте с 24.05.2006
Offline
46
#9
Shtogrin:
Сделайте попроще проверку на длину
strlen($_POST['name'])<20
вместо

неправильно! У Вас будет предупреждение, если в POST-е нет элемента с указанным именем.

HC
На сайте с 24.05.2006
Offline
46
#10
Shtogrin:
if (!isset($_POST['name']) || strlen($_POST['name'])<20)

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

12 3

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