Помогите решить проблемку пожалуйста. Есть простейшая html форма, нужно, чтобы после того как пользователь ее заполнит она отправлялась мне, желательно посредством почты. сама форма: <form method='post'> <span style="font-size: 30px;"><strong><span style="color:green";>Записаться в группу</span></span></span></p></strong> <div class='ctrlHolder style1'> <label><span style="color:black";><span style="font-size: 16px;">Введите имя:</label></span></span> <br /> <input name='' class='textInput' type='text' value=""> </div> <div class='ctrlHolder style1'> <label><span style="color:black";><span style="font-size: 16px;">Введите фамилию:</label></span></span> <br> <input name='' class='textInput' type='text' value=""> </div> <div class='ctrlHolder style1'> <label><span style="color:black";><span style="font-size: 16px;">Введите номер телефона:</label></span></span> <br> <input name='' class='textInput' type='text' value=""> </div><div class='ctrlHolder style1'> <div class="buttonHolder"> <button name="submit" type="submit" class="submitButton style1">Отправить</button> </div> </form> </div> ---------- Сообщение добавлено 19.12.2011 12:41 ---------- Заюзал вот такой скрипт <? $to = "***@***.ru"; mail($to,"$sub",$mes); echo "Ваше сообщение с темой $sub и текстом: $mes <br> отправлено<BR><center> <a href='http://www.*****.html'>Отправить ещё</a>"; ?> Письмо приходит, но пустое... как бы это исправить????
Просьба не судить строго, ибо это мой первый опыт в данном вопросе. А оборванные name никоим образом не влияют на отправку формы.
а вообще яшу-гугль не пробовали? там в разы больше спецов, чем здесь!!))) и HTML-код никогда вам ничего не будет передавать))) или подключать php-обработчик, или одним файлом - но тогда это будет php-файл
форма на html <form method=post action=sent.php id="frmFeedback" enctype="multipart/form-data"> <input name="name" type="text" value="Ваше имя" class="txt" /> <input name="email" type="text" value="Ваш email" class="txt" /> <input name="submit" type="submit" class="btn" value="ЗАКАЗ" /> <input type="hidden" name="posted" value="1"> </form> и файл sent.php (ложить в корень сайта!): <!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> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>Заказ</title> </head> <body> <?php if (isset($_POST['name'])) {$name = $_POST['name'];} if (isset($_POST['email'])) {$email = $_POST['email'];} if (empty($name)) { echo "<b>Не указано имя!<p>"; echo "<a href=zakaz.html>Вернуться к заполнению формы</a>"; exit; } else if (empty($email)) { echo "<b>Не указан e-mail!<p>"; echo "<a href=zakaz.html>Вернуться к заполнению формы</a>"; exit; } else $to = "000@mail.ru"; /*УКАЗАТЬ СВОЙ АДРЕС!*/ $charset = "utf-8"; $subject = "заказ"; $message = "NAME: $name \nE-MAIL: $email"; $send = mail ($to,$subject,$message); if ($send == 'true') { echo "<b>Спасибо за отправку вашего сообщения!<p>"; echo "<a href=index.html>Нажмите,</a> чтобы вернуться на главную страницу"; } else { echo "<p><b>Ошибка. Сообщение не отправлено!"; } ?> </body> </html> все сохранять в кодировке utf-8 без BOM ---------- Сообщение добавлено 19.12.2011 13:37 ---------- и еще в корень сайта такие файлы закинуть class.phpmailer.php и class.smtp.php стандартные, в гугле точно были)))))
а он согласен? блин, класс, если согласен!! только поболее-поболее пусть дает! и вы тоже, dj_dantist, уж будьте любезны!))) как раз надо огненной воды прикупить, без нее нынче никак в html - собственно, вышесказанное все под градусом псыкнул!!)))
1. Старайся не использовать функцию mail(). Кидай через smtp и сокеты. А письмо приходит пустое потому что ты в нем скорее всего не передаешь mеssage текст. То есть переременная $mess у тебя пустая. 2. Это точно работает, только под форму под свою отредактируй. И не забудь апачц включить в extensions сокеты. <?php function show_form(){ } function complete_mail() { // $_POST['title'] содержит данные из поля "Тема", trim() - убираем все лишние пробелы и переносы строк, htmlspecialchars() - преобразует специальные символы в HTML сущности, будем считать для того, чтобы простейшие попытки взломать наш сайт обломались, ну и substr($_POST['title'], 0, 1000) - урезаем текст до 1000 символов. Для переменных $_POST['mess'], $_POST['name'], $_POST['tel'], $_POST['email'] все аналогично $_POST['title'] = substr(htmlspecialchars(trim($_POST['title'])), 0, 1000); $_POST['mess'] = substr(htmlspecialchars(trim($_POST['mess'])), 0, 1000000); $_POST['name'] = substr(htmlspecialchars(trim($_POST['name'])), 0, 30); $_POST['tel'] = substr(htmlspecialchars(trim($_POST['tel'])), 0, 30); $_POST['email'] = substr(htmlspecialchars(trim($_POST['email'])), 0, 50); // если не заполнено поле "Имя" - показываем ошибку 0 if (empty($_POST['name'])) { output_err(0); } // если неправильно заполнено поле email - показываем ошибку 1 if(!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $_POST['email'])) { output_err(1); } // если не заполнено поле "Сообщение" - показываем ошибку 2 if(empty($_POST['mess'])) { output_err(2); } // создаем наше сообщение $mess = ' Имя отправителя:'.$_POST['name'].' Контактный телефон:'.$_POST['tel'].' Контактный email:'.$_POST['email'].' '.$_POST['mess']; header('Content-Type: text/plain;'); error_reporting(E_ALL ^ E_WARNING); ob_implicit_flush(); $address = 'smtp.examle.com'; // адрес smtp-сервера $port = 25; // порт (стандартный smtp - 25) $login = 'login'; // логин к ящику $pwd = 'password'; // пароль к ящику $from = 'login@examle.com'; // адрес отправителя $to = 'someuser@someserver.ru'; // адрес получателя $subject = $_POST['title']; // тема сообщения $message = $mess; // текст сообщения try { // Создаем сокет $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if ($socket < 0) { throw new Exception('socket_create() failed: '.socket_strerror(socket_last_error())."\n"); } // Соединяем сокет к серверу //echo 'Connect to \''.$address.':'.$port.'\' ... '; $result = socket_connect($socket, $address, $port); if ($result === false) { throw new Exception('socket_connect() failed: '.socket_strerror(socket_last_error())."\n"); } else { // echo "OK\n"; } // Читаем информацию о сервере read_smtp_answer($socket); // Приветствуем сервер write_smtp_response($socket, 'EHLO '.$login); read_smtp_answer($socket); // ответ сервера // echo 'Authentication ... '; // Делаем запрос авторизации write_smtp_response($socket, 'AUTH LOGIN'); read_smtp_answer($socket); // ответ сервера // Отравляем логин write_smtp_response($socket, base64_encode($login)); read_smtp_answer($socket); // ответ сервера // Отравляем пароль write_smtp_response($socket, base64_encode($pwd)); read_smtp_answer($socket); // ответ сервера // echo "OK\n"; // echo "Check sender address ... "; // Задаем адрес отправителя write_smtp_response($socket, 'MAIL FROM:<'.$from.'>'); read_smtp_answer($socket); // ответ сервера // echo "OK\n"; // echo "Check recipient address ... "; // Задаем адрес получателя write_smtp_response($socket, 'RCPT TO:<'.$to.'>'); read_smtp_answer($socket); // ответ сервера // echo "OK\n"; // echo "Send message text ... "; // Готовим сервер к приему данных write_smtp_response($socket, 'DATA'); read_smtp_answer($socket); // ответ сервера // Отправляем данные $message = "To: $to\r\n".$message; // добавляем заголовок сообщения "адрес получателя" $message = "Subject: $subject\r\n".$message; // заголовок "тема сообщения" write_smtp_response($socket, $message."\r\n."); read_smtp_answer($socket); // ответ сервера //echo "OK\n"; // echo 'Close connection ... '; // Отсоединяемся от сервера write_smtp_response($socket, 'QUIT'); read_smtp_answer($socket); // ответ сервера //echo "OK\n"; } catch (Exception $e) { echo "\nError: ".$e->getMessage(); } if (isset($socket)) { socket_close($socket); }// Функция для чтения ответа сервера. Выбрасывает исключение в случае ошибк //------------------------------------------------------// header("Content-Type: text/html; charset=Windows-1251"); echo "<p align=\"center\"><b>Спасибо! Ваша заявка отправлена. Вы будете переведены на главную страницу</b></p> "; } function read_smtp_answer($socket) { $read = socket_read($socket, 1024); if ($read{0} != '2' && $read{0} != '3') { if (!empty($read)) { throw new Exception('SMTP failed: '.$read."\n"); } else { throw new Exception('Unknown error'."\n"); } } } // Функция для отправки запроса серверу function write_smtp_response($socket, $msg) { $msg = $msg."\r\n"; socket_write($socket, $msg, strlen($msg)); } function output_err($num) { $err[0] = 'ОШИБКА! Не введено имя.'; $err[1] = 'ОШИБКА! Неверно введен e-mail.'; $err[2] = 'ОШИБКА! Не введено сообщение.'; echo '<p>'.$err[$num].'</p>'; show_form(); header( "Refresh: 2; url=index.php " ); exit(); } if(!empty($_POST['submit'])) complete_mail(); else show_form(); header( "Refresh: 3; url=index.php " ); ?>
UranUs, не я первый начал! ^__^ Но интересно же! Я про mail только знаю, что им не рекомендуется при множественной рассылке пользоваться. Вдруг ещё что есть, полезно же спросить на всякий случай!
E13, Сами ответили на свой вопрос. Именно этим и плоха mail(). И еще ее не все хостинги поддерживают (по крайней мере бесплатные). Так что в поисках универсальности лучше пользоваться все таки более низкоуровневыми моделями (ну как то так). UranUs, Блин) не смотрел на дату) Бываит))
icefrog, это который вот? Он с ашыпками. ---------- Сообщение добавлено 11.06.2012 13:46 ---------- Розмарин, Вы произнесли слова "бесплатный хостинг" так, будто в них есть что-то хорошее . Но вообще да, в каких-то рамках лучше низкоуровневый подход. Разве что mail() быстрее работать должен
E13 , данное регулярное выражение не обрабатывает начало и конец строки, в следствии этого после введенных по формату данных можно написать любой произвольный код вида Для примера цитирую код с явно представленным значением вместо значения из POST