Контактная форма на сайте

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

nikky

Постоялец
Регистрация
5 Июл 2007
Сообщения
128
Реакции
12
Народ помогите сделать контактную форму на сайте, врезаемую в html, самая простейшую: имя, мыло, текст сообщения, ну и что работала....
 
БОльшое спасибо, работает)))
а как графу сообщение увеличить... и там в коде ещё несколько ящиков, в чем их отличия?
 
а как графу сообщение увеличить...

Добавить атрибут size с указанием размера:
PHP:
<input type="text" size="50" name="text">
или заемнить эту строку на textarea
PHP:
<form action="mail.php" method="post" name="1">
Имя <input type="text" name="name"><br>
Ваш email <input type="text" name="from"><br>
Сообщение <textarea name="text" cols="100" rows="20"><br>
<input type="submit" value="Отправить">
Размерами рулят cols и rows

PHP:
$to      = 'nobody@example.com';
На этот ящик придет мыло из формы.

PHP:
$headers = 'From: webmaster@example.com' . "\r\n" .
Этот адрес будет виден в поле "От:" ("From:") твоего почтовика, открыв пришедшее из формы письмо.

PHP:
'Reply-To: webmaster@example.com' . "\r\n" .
Адрес для ответа по-умолчанию, если нажать в почтовике "Ответить" ("Reply") на пришедшее из формы письмо.
 
Мдя.. писал я тут для себя скриптик, и пришлось сделать вывод, что функция mail(); не очень то и хороша в наше время: на гмейле - в спам улетает, маил.ру - вообще прибиваеться антиспамом.

Юзайте сокеты, и шлите через смтп.
PHP:
$header - заголовки письма, $message - тело сообщения.

$server = "smtp.sever.com";
$login_auth = "login";
$pass = "password";
$mail_from = "mail@somehost.loc";

    $connect = fsockopen ($server, 25, $errno, $errstr, 30); 
if(!$connect) {print "соединение с серверов не прошло"; fclose($connect); exit;}
print get_smtp_data($connect);
	fputs($connect, "EHLO localhost\r\n"); 
$code = substr(get_smtp_data($connect),0,3);
if($code != 250) {print "ошибка приветсвия EHLO"; fclose($connect); exit;}
	fputs($connect, "AUTH LOGIN\r\n");
$code = substr(get_smtp_data($connect),0,3);
if($code != 334) {print "сервер не разрешил начать авторизацию"; fclose($connect); exit;}
	fputs($connect, base64_encode($login_auth)."\r\n");
$code = substr(get_smtp_data($connect),0,3);
if($code != 334) {print "ошибка доступа к такому юзеру"; fclose($connect); exit;}
	fputs($connect, base64_encode($pass)."\r\n");
$code = substr(get_smtp_data($connect),0,3);
if($code != 235) {print "не правильный пароль"; fclose($connect); exit;}
	fputs($connect, "MAIL FROM: $mail_from\n"); 
$code = substr(get_smtp_data($connect),0,3);
if($code != 250) {print "сервер отказал в команде MAIL FROM"; fclose($connect); exit;}
	fputs($connect, "RCPT TO: $to\n"); 
$code = substr(get_smtp_data($connect),0,3);
if($code != 250 AND $code != 251) {print "Сервер не принял команду RCPT TO"; fclose($connect); exit;}
	fputs($connect, "DATA\r\n"); 
$code = substr(get_smtp_data($connect),0,3);
if($code != 354) {print "сервер не принял DATA"; fclose($connect); exit;}
	fputs($connect, $header."\r\n".$message."\r\n.\r\n");
$code = substr(get_smtp_data($connect),0,3);
if($code != 250) {print "ошибка отправки письма"; fclose($connect); exit;}
	fputs($connect, "QUIT\r\n");
 
Странно но себе я уведомления на gmail, шлю через функцию мейл, и все пока нормально вроде. Насчет мейл.ру ничего не скажу, не пользовался. НУ смтп получше все ровно будет, но мейл проще)
 
Странно но себе я уведомления на gmail, шлю через функцию мейл, и все пока нормально вроде. Насчет мейл.ру ничего не скажу, не пользовался. НУ смтп получше все ровно будет, но мейл проще)
На майле режет если этой формой часто пользуються, а если менее 10 раз в день то все отлично отрабатывает.
 
Странно но себе я уведомления на gmail, шлю через функцию мейл, и все пока нормально вроде.

у меня нормально пошло после того, как переместил из спама в нормальные, больше проблем небыло, а вообще возможно от хостинга еще зависит, тк в спам попадают иногда и обычные письма
 
Я для себя написал такую форму на функциях с проверкой данных. Что примечательно, если юзер ввёл неправильное мыло (невалидное), то его сообщение остаётся, а не стирается как во всех других.

PHP:
if (isset($_POST['submit_check'])) { //форма была отправлена

	if ($form_errors = validate_form()) { // Если $form_errors присвоился не пустой массив
	                                      // то показываем ошибки.
		show_form($form_errors);
		}

	else {
		process_form();
		}
    }

else {
	show_form();
	}


function validate_form() {


	$errors = array();
    $_POST['name'] = trim($_POST['name']);
    $_POST['email'] = trim($_POST['email']);

	if (mb_strlen($_POST['name'],'utf8') == 0) {
		$errors[] = "Вы не заполнили имя";
		}
	if (!preg_match('/^[^@\s]+@([-a-z0-9]+\.)+[a-z]{2,}$/i',$_POST['email'])) {
		$errors[] = 'Введите правильный e-mail.';
		}
	if (mb_strlen($_POST['message']) < 10) {
		$errors[] = 'Введите текст сообщения.';
		}


	return $errors;
	}

function show_form($errors = '') {

if (!empty($errors)) {

    echo "<br><center><div class='warning'><font size='2'color='#FF0000'><b>Обнаружены ошибки:</b></font><br>";

	 foreach ($errors as $value) {
		print $value."<br>";
	}
	echo "</div></center>";








	show_form_content();
	}
else {


print <<<HERE

<table align='center' class='table_form' width='400px'>
<form method='post' action="$_SERVER[PHP_SELF]">
<tr><td colspan='2'>Введите вопрос и данные для связи :</td></tr>
<tr><td width='200'>Ваше имя</td>
<td width='*'><input type='text' name='name' value=''></td></tr>
<tr><td>E-Mail</td><td><input type='text' name='email' value=''></td></tr>
<tr><td>Ваш вопрос или комментарий</td><td><textarea rows='5' cols='30' name='message'></textarea></td></tr>
<input name='submit_check' type='hidden' value='1'>
<td><input type='submit' name='submit' class='formbutton' value='Отправить'></td></tr></form></table>

HERE;
}
}


function show_form_content() {

print <<<HERE
<table align='center' class='table_form' width='400px'>
<form method='post' action="$_SERVER[PHP_SELF]">
<tr><td colspan='2'>Введите вопрос и данные для связи :</td></tr>
<tr><td width='200'>Ваше имя</td>
<td width='*'><input type='text' name='name' value='$_POST[name]'></td></tr>
<tr><td>E-Mail</td><td><input type='text' name='email' value='$_POST[email]'></td></tr>
<tr><td>Ваш вопрос или комментарий</td><td><textarea rows='5' cols='30' name='message'>$_POST[message]</textarea></td></tr>
<input name='submit_check' type='hidden' value='1'>
<td><input type='submit' name='submit' class='formbutton' value='Отправить'></td></tr></form></table>


HERE;


}

function process_form() {

    $name = $_POST['name'];
    $email = $_POST['email'];
    $msg = $_POST['message'];

    $name=trim($name);
    $email=trim($email);
    $msg=trim($msg);


	if (mail("$email", "С веб сайта", "$msg"));

	print "<br><table align='center' class='table_form' width='350px'>
           <tr>
           <td>Cпасибо $_POST[name]. Сообщение успешно отправлено. <br>Мы ответим Вам максимально быстро.
           </td></tr></table>";
	}


//
//    preg_match('/^[^@\s]+@([-a-z0-9]+\.)+[a-z]{2,}$/i',



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