Вот листинги файлов скрипта для отправки письма на email с подменой адреса:
//это файл index.php
echo'Сегодня ';
echo date('d.m.Y');
echo'<br />Время ';
echo date('H:i:s');
echo'<form action="mail.php" method="post" name="text">
Кому:<br/><input name="to" value="@" /><br/>
От кого:<br/><input name="from" value="@" /><br/>
Тема:<br/><input name="subject"/><br/>
Сообщение:<br/><textarea name="txt" cols="25" rows="4"></textarea><br/>
<input type="submit" value="Отправить"/>
</form>';
//а это файл mail.php
if ($to=="@"||$to=="") {
echo '<h5><i><b>Введите адрес!</b></i></h5><br/>';
} elseif ($from=="@"||$from=="") {
echo '<h5><i><b>Введите обратный адрес!</b></i></h5><br/>';
} elseif ($subject=="") {
echo '<h5><i><b>Введите тему сообщения!</b></i></h5><br/>';
} elseif ($txt=="") {
echo '<h5><i><b>Введите текст сообщения!</b></i></h5><br/>';
} else {
$to = $_POST["to"];
$from = $_POST["from"];
$subject = $_POST["subject"];
$txt = $_POST["txt"];
mail($to,$subject,$txt,"From: <$from>\r\nContent-type:text/plain;charset=utf-8");
echo'<i><b><b><font color="red">Письмо отправлено</font></b></b></i><br/>';
echo"<b>Кому:</b><br/><i>$to</i><br/>
<b>От кого:</b><br/><i>$from</i><br/>
<b>Тема:</b><br/><i>$subject</i><br/><b>Текст:</b><br/><i>$txt</i><br/>";
echo'<a href="index.php"><i>Отправить ещё</i></a><br/>';
}
В последний файл mail.php я добавил условие if - else, но оно работает не по моему замыслу - если не заполнено какое то поле, то моё условие выводит сообщение лишь об одном незаполненном поле(а незаполненных полей может быть и два,и три...) Т.е., как выводить уведомление о конкретных пустых полях? И ещё такой вопрос - если в поле ТЕМА написать тему сообщения русскими буквами, то на почту приходит письмо <без темы>, но если тему писать латиницей, то письмо приходит с темой. Как это исправить? И ещё вопрос - если не все поля заполнены , то как с помощью сессии возвращать поля с уже введенными данными?(эт чтоб юзер не тратил время на повторный ввод).
$to = $_POST["to"];
$from = $_POST["from"];
$subject = $_POST["subject"];
$txt = $_POST["txt"];
объяви эти переменные перед началом условий в файле mail.php
Gnom (31.08.2010/03:22)
$to = $_POST["to"];$from = $_POST["from"];$subject = $_POST["subject"];$txt = $_POST["txt"];
объяви эти переменные перед началом условий в файле mail.php
объявил - ничего это не меняет. может вместо if else тут использовать switch() case ? только я не могу сообразить, какое значение прописать в скобках ?
ДоХтор (31.08.2010/03:10)
то моё условие выводит сообщение лишь об одном незаполненном поле
потому что ты используешь
elseif()
Krite (31.08.2010/06:22)
потому что ты используешь elseif()
А как нужно? Покажи пожалуйста пример?
//Если кнопка нажата
if($_POST){
//Проверяем переменные
$email = isset($_POST['email'])?htmlentites(trim($_POST['email']), ENT_QUOTES, 'UTF-8'):'';
//Массив с ошибками
$error = array();
//Проверяем соответствие условиям
if (!$email)
$error[] = 'не введен e-mail';
elseif (mb_strlen($email,'UTF-8')<4 || mb_strlen($email,'UTF-8')<100)
$error[] = 'Недопустимая длинна мыла';
if (!$text)
$error[] ='не введено сообщение';
//если ошибок небыло
if (!$error) {
//отправляем, слхраняем данные.
}
//если были ошибки показываем их
else {
echo implode('<br/>',$error);
}
}
echo '
<form action="?" metod="post">
email<br/>
<input type="text" name="email" value="'.$email.'" /><br/>
сообщение<br/>
<textarea></textarea><br/>
<input type="submit" value="отправить"/></form>
';
ДоХтор, Можно так:
if ()
$err .= 'Ошибка 1<br />';
if ()
$err .= 'Ошибка 2<br />';
if ($err)
echo $err;
else
//обрабатываем данные
Где я допустил ошибку?
index.php:
echo'<form action="mail.php" method="post">
Кому:<br/><input name="email" value="'.$email.'" /><br/>
Сообщение:<br/><textarea name="text" cols="25" rows="4"></textarea><br/>
<input type="submit" value="Отправить"/>
</form>';
mail.php:
//Если кнопка нажата
if($_POST) {
//Проверяем переменные
$email = isset($_POST['email'])?htmlentites(trim($_POST['email']), ENT_QUOTES, 'UTF-8'):'';
//Массив с ошибками
$error = array();
//Проверяем соответствие условиям
if (!$email) {
$error[] = 'Не введен e-mail';
} elseif (mb_strlen($email,'UTF-8')<4 || mb_strlen($email,'UTF-8')<100) {
$error[] = 'Недопустимая длинна мыла';
}
if (!$text) {
$error[] ='не введено сообщение';
}
//если ошибок небыло
if (!$error) {
//отправляем, сохраняем данные.
$email = $_POST["email"];
$text = $_POST["text"];
mail($email,$text);
echo'<i><b><b><font color="red">Письмо отправлено</font></b></b></i><br/>';
echo"<b>Кому:</b><br/><i>$email</i><br/>
<b>Текст:</b><br/><i>$text</i><br/>";
echo'<a href="index.php"><i>Отправить ещё</i></a><br/>';
}
//если были ошибки показываем их
else {
echo implode('<br/>',$error);
}
}
if($_POST) - здесь ошибка. Правильнее if($_POST['xxx'])