Вобщем есть почтовая форма.
Все работает прекрасно, кроме одной маленькой вещи.
Когда пользователь нажимает кнопочку отправить, форма отправляется в любом случае.
Надо как-то написать, чтобы если все поля заолнены - отправка, если нет - то нет.
вот мой код
<?php
$name = $_REQUEST['name'] ;
$fam = $_REQUEST['fam'] ;
$email = $_REQUEST['email'] ;
$country = $_REQUEST['country'] ;
$tel = $_REQUEST['tel'] ;
$city = $_REQUEST['city'] ;
$message = $_REQUEST['message'] ;
$message = "
имя: $name \n
фамилия: $fam \n
mail: $email \n
страна: $country \n
город: $city \n
телефон: $tel \n
сообщение: $message \n";
mail( "мой мейл", "Сообщение с сайта",
$message, "From: $email"
);
if ( ! empty($_POST['contact']))
{
$valid = array
(
'name' => array('/(.+){2,}/', 'Ваше имя введено неверно.'),
'fam' => array('/(.+){2,}/', 'Ваша фамилия введена неверно.'),
'tel' => array('/(.+){5,}/', 'Номер телефона введен неверно'),
'city' => array('/(.+){3,}/', 'Название города введено неверно'),
'email' => array('/^[-_a-z0-9\'+*$^&%=~!?{}]++(?:\.[-_a-z0-9\'+*$^&%=~!?{}]+)*+@(?:(?![-.])[-a-z0-9.]+(?<![-.])\.[a-z]{2,6}|\d{1,3}(?:\.\d{1,3}){3})(?::\d++)?$/iD', 'Введите правильный e-mail, пожалуйста.'),
'message' => array('/(.+){10,}/', 'Вы не можете отправить пустое сообщение.'),
);
$errors = array();
foreach ($valid as $field => $data)
{
$regex = $data[0];
$message = $data[1];
$input = trim($_POST[$field]);
if (empty($input) OR ! preg_match($regex, $input))
{
$errors += array($field => $message);
}
}
$result = empty($errors) ? 'success' : 'errors';
echo json_encode(array
(
'result' => $result,
'errors' => $errors,
));
exit;
}
?>
Полагаю проблема в этой строке,
mail( "мой мейл", "Сообщение с сайта",
$message, "From: $email"
);
надо дописать буквально полстрочки, а что написать не знаю. Уже все перепробовал, либо отправляется как етсь. Либо вобще не отправляется.
Скрипт от этой формы
Создатель формы любезно не дописал самую важную часть кода, я дописал, но как-то не очень она у меня работает правильно :( Хотя во фронтенде, все ок.
Понимаю что делать надо что-то с переменной $result, а что не знаю :(
Спустя 39 минут, 9 секунд (13.12.2011 - 18:06) Игорь_Vasinsky написал(а):
вот же у тебя проверка
от неё и пляши.
$result = empty($errors) ? 'success' : 'errors';
от неё и пляши.
Спустя 1 час, 27 минут, 8 секунд (13.12.2011 - 19:33) ninJo написал(а):
if ('success') {
mail( "мой мейл", "Сообщение с сайта",
$message, "From: $email"
);
}
пробовал такое, не работает
я просто очень-очень слаб в php. По шаблону хоть как-то могу работать, а полстроки написать не могу, пробовал литературу читать по mail, не помогает
mail( "мой мейл", "Сообщение с сайта",
$message, "From: $email"
);
}
пробовал такое, не работает
я просто очень-очень слаб в php. По шаблону хоть как-то могу работать, а полстроки написать не могу, пробовал литературу читать по mail, не помогает
Спустя 46 минут, 27 секунд (13.12.2011 - 20:20) Игорь_Vasinsky написал(а):
Цитата |
if ('success') { |
это скока надо выпить чтоб догадаться засунуть значение переменной в условие таким образом???
тебе нужно проверить - действительно ли переменная содержит это значение.
Спустя 3 минуты, 9 секунд (13.12.2011 - 20:23) ninJo написал(а):
Васински, я сегодня действительно много выпил! Но чая
if ( ! empty('success'))
вот так может?
хотя так тоже пробовал. я часа три сидел все возможные варианты перебирал
if ( ! empty('success'))
вот так может?
хотя так тоже пробовал. я часа три сидел все возможные варианты перебирал
Спустя 17 минут, 12 секунд (13.12.2011 - 20:40) VolDroN написал(а):
succes это текст а не переменная.
empty проверяет на пустоту переданного аргумента (в данном случае 'succes'), ! - отрицание. Т.е. для выполнения условия аргумент должен быть не пустой (он и так не пустой, и всегда будет не пустой, т.к. это статический текст 'success')
надо писать. И здесь проверка на пустоту не к месту.
как я понял, то нужно это:
if($result == 'success')
{
// отправляем
}
empty проверяет на пустоту переданного аргумента (в данном случае 'succes'), ! - отрицание. Т.е. для выполнения условия аргумент должен быть не пустой (он и так не пустой, и всегда будет не пустой, т.к. это статический текст 'success')
надо писать. И здесь проверка на пустоту не к месту.
как я понял, то нужно это:
if($result == 'success')
{
// отправляем
}
Спустя 47 минут, 23 секунды (13.12.2011 - 21:28) ninJo написал(а):
if($result == 'success')
{
mail( "мой мейл", "Сообщение с сайта",
$message, "From: $email");
}
Вот так писал, тогда скрипт просто перестает отправлять почту :( Форма работает, а почта не идет.
Событие по succes в js тоже происходит - переход на другую страницу.
В js такой код стоит, я пробовал в него php mail засунуть, но он его не кушает =(
if (data.result == 'success') {
window.location = "http://мой-сайт/спасибо"
}
Спустя 20 часов, 43 минуты, 7 секунд (14.12.2011 - 18:11) ninJo написал(а):
Придется другую форму искать
все заново делать.
p.s.
все таки нашел проблему, там два одинаковых значения message использовалось
все заново делать.
p.s.
все таки нашел проблему, там два одинаковых значения message использовалось
_____________