Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: HTML Форма - заказ >click "submit" >отпавка на email
 
 автор: Dr.Sqaer   (12.02.2006 в 19:07)   письмо автору
 
 

Хочется что бы после нажатия кнопки Submit данные посылались по емайл (который ужё
жёстко прописан в обработчике). Как такое реализовать?

Копал simple_mail.php но так как я только начал копаться в php то ещё тяжеловато.


Я так понял первым делом надо добавить переменные (названия форм) в simple_mail.php

Мой HTML:
<!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=iso-8859-1" />
<title>..:: Book a Hotel ::..</title>
<style type="text/css">
<!--
body {
background-color: #FFFFFF;}
-->
</style></head>
<body>
<form action="mail.php" method="post" name="form1" id="formular">
<table border="0" align="center" cellpadding="5" cellspacing="5">
<tr>
<td><strong>Name of the hotel:</strong></td><td><?$hotels=file("hotels.txt");
$select="<select name='hotelm'><option></option>";
foreach ($hotels as $var)
{
$select.="<option>$var</option>";
}
$select.="</select>";
echo $select;?></td>
</tr>
<tr>
<td><strong>Alternative Hotel:</strong></td>
<td><?$hotels=file("hotels.txt");
$select="<select name='hotela'><option></option>";
foreach ($hotels as $var)
{
$select.="<option>$var</option>";
}
$select.="</select>";
echo $select;?></td>
</tr>
<tr>
<td><strong>Class of the Hotel:</strong></td><td>
<select name="stars" size="1" >
<option value="" selected="selected">Select</option>
<option value="1">*</option>
<option value="2">**</option>
<option value="3">***</option>
<option value="4">****</option>
<option value="5">*****</option>
</select>
</td>
</tr>
<tr>
<td>
<strong>Check in date:</strong></td>
<td><input type="text" value="" name="daychekin" size="2" maxlength="2" />
<select name="monthchekin" size="1">
<option value="1">January</option>
<option value="2">February</option>
<option value="3">March</option>
<option value="4">April</option>
<option value="5">May</option>
<option value="6">June</option>
<option value="7">July</option>
<option value="8">August</option>
<option value="9">September</option>
<option value="10">October</option>
<option value="11">November</option>
<option value="12">December</option>
</select>
<input type="text" value="" name="yearchekin" size="2" maxlength="4"/></td>
<td><strong>Check out date:</strong></td>
<td height="1"><input type="text" value="" name="daychekout" size="2" maxlength="2" />
<select name="monthchekout" size="1">
<option value="1">January</option>
<option value="2">February</option>
<option value="3">March</option>
<option value="4">April</option>
<option value="5">May</option>
<option value="6">June</option>
<option value="7">July</option>
<option value="8">August</option>
<option value="9">September</option>
<option value="10">October</option>
<option value="11">November</option>
<option value="12">December</option>
</select>
<input type="text" value="" name="yearchekout" size="2" maxlength="4" />
</td>
</tr>
<tr>
<td><strong>Type of room:</strong></td>
<td>
<select name="typeoftheroom" size="1" >
<option value="" selected="selected">Select</option>
<option value="Single">Single</option>
<option value="Double">Double</option>
<option value="Junior">Junior suite</option>
<option value="Other">Other</option>
</select></td>
</tr>
<tr>
<td><strong>Number of rooms:</strong></td><td><select name="kolvorooms" size="1" >
<option value="" selected="selected">Select</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="more">&gt;10</option>
</select></td>
</tr>
<tr>
<td><strong>Your name:</strong></td><td><input type="text" value="" name="name"/></td>
</tr>
<tr>
<td><strong>Your Email:</strong></td><td><input type="text" value="" name="mail_to"/></td>
</tr>
<tr>
<td><strong>Method of payment:</strong></td><td><select name="paymetmethod" size="1" >
<option value="" selected="selected">Select</option>
<option value="bankw">Bank wire</option>
<option value="creditc">Credit card</option>
<option value="otherm">Another</option>
</select></td>
</tr>
</table>
<hr width="640"/>
<center>INFORMATION NEEDED FOR VISA SUPPORT LETTER:</center>
<table width="585" border="0" align="center" cellpadding="5" cellspacing="5">
<tr>
<td width="33%">
<strong>Full name as in passport:</strong></td>
<td><input type="text" value="" name="passname"/></td>
</tr>
<tr>
<td width="33%"><strong>Citizenship:</strong></td>
<td><input type="text" value="" name="citizenship"/></td>
</tr>
<tr>
<td width="33%"><strong>Date of berth:</strong></td>
<td><input type="text" value="" name="dayberthvisa" size="2" maxlength="2" />
<select name="monthberthvisa" size="1">
<option value="1">January</option>
<option value="2">February</option>
<option value="3">March</option>
<option value="4">April</option>
<option value="5">May</option>
<option value="6">June</option>
<option value="7">July</option>
<option value="8">August</option>
<option value="9">September</option>
<option value="10">October</option>
<option value="11">November</option>
<option value="12">December</option>
</select>
<input type="text" value="" name="yearberthvisa" size="2" maxlength="4" /></td>
</tr>
<tr>
<td width="33%"><strong>Passport number:</strong></td>
<td><input type="text" value="" name="passnumber"/></td>
</tr>
</table>
<hr align="center" width="50"/>
<center>Please note this is not an on-line booking system, this form will be processed within 24 hrs (working days) and you will receive our detailed reply</center><br/>
<table width="10" align="center" border="0" cellpadding="3" cellspacing="3">
<tr>
<td>
<input name="Submit" type="submit" value="Submit" />
</td>
</tr>
</table>
</form>
</body>
</html>

   
 
 автор: cheops   (12.02.2006 в 19:23)   письмо автору
 
   для: Dr.Sqaer   (12.02.2006 в 19:07)
 

Такие здоровые листинги лучше прикреплять в виде отдельного файла.

   
 
 автор: Dr.Sqaer   (12.02.2006 в 19:43)   письмо автору
 
   для: cheops   (12.02.2006 в 19:23)
 

а нельзя как-нить отредактировать пост?

   
 
 автор: elenaki   (12.02.2006 в 19:48)   письмо автору
 
   для: cheops   (12.02.2006 в 19:23)
 

лучше использовать небольшие скрипты, вроде этого. в нем разобраться можно, а ваш даже читать страшно...


<?
$fMail 
"info@site.com";
$fSubject "message from site ...";
$fText="$fSubject\n\n"
$fOk $fData[3]."?sent"///////// ссылка на страницу с подтверждением посылки
$fBad $fData[3]."?notsent"///////////// ссылка на страницу с ошибкой пересылки
$fCount 2////// указать, сколько полей в форме
//add From: header
$headers "From: info@site.com\r\n";  ///////////// 
for ($i=0;$i<=$fCount;$i++) {$fText.=$fName[$i].": ".$fData[$i]."\n";}
$fText.="\n\n";
$fText.=date("l dS of F Y h:i:s A");
if (
mail($fMail,$fSubject,$fText$headers)) {
Header("Location: $fOk");}
else {
Header("Location: $fBad");}
exit;
?>

этот файл, что выше, назвать mini.php и прописать в action: <form name="form" method="post" action="mini.php">

а в форме к каждому полю приставить еще вот такое невидимое поле:


<input type="hidden" name="fName[0]" value="тьфу">
Name <input type="Text" name="fData[0]" size="50" value="">


тогда можно поля называть как угодно, на каком угодно языке. удачки!

   
 
 автор: Киналь   (12.02.2006 в 21:40)   письмо автору
 
   для: elenaki   (12.02.2006 в 19:48)
 

А не пойдет

<form action=mailto:destination@email.ru>

?

   
 
 автор: Dr.Sqaer   (12.02.2006 в 21:53)   письмо автору
 
   для: Киналь   (12.02.2006 в 21:40)
 

А если у пользователя не установлен mail client ?
И даже так не получилось, как переменные окажутся в теле письма? JavaScript ?
В идеале я хочу чтобы всё это отылалось php скрипту, далее отправлялось на уже заранее забитый в скрипт email, а по результатам выдавалось сообщение или всё OK или Error.
Копаюсь я в примере

<?php
if(empty($_POST['mail_to'])) exit("Введите адрес получателя");
// проверяем правильности заполнения с помощью регулярного выражения
if (!preg_match("/^[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}$/i"$_POST['mail_to'])) exit("Введите адрес в виде somebody@server.com");
$_POST['mail_to'] = htmlspecialchars(stripslashes($_POST['mail_to']));
$_POST['mail_subject'] = htmlspecialchars(stripslashes($_POST['mail_subject']));
$_POST['mail_msg'] = htmlspecialchars(stripslashes($_POST['mail_msg']));
$picture "";
// Если поле выбора вложения не пустое - закачиваем его на сервер
if (!empty($_FILES['mail_file']['tmp_name']))
{
// Закачиваем файл
$path $_FILES['mail_file']['name'];
if (
copy($_FILES['mail_file']['tmp_name'], $path)) $picture $path;
}
$thm $_POST['mail_subject'];
$msg $_POST['mail_msg'];
$mail_to $_POST['mail_to'];
//--------Ваши переменные переданные из формы--------
$name=$_POST['name'];
$hotel1=$_POST['hotelm'];
$hotel2=$_POST['hotela'];
$Classoh=$_POST['stars'];
//-----Check in date----------
$daychki=$_POST['daychekin'];
$mnthchki=$_POST['monthchekin'];
$yearchki=$_POST['yearchekin'];
//-----Check out date--------
$daychko=$_POST['daychekout'];
$mnthchko=$_POST['monthchekout'];
$yearchko=$_POST['yearchekout'];
//-------------------------------
$roomtype=$_POST['typeoftheroom'];
$roomnumber=$_POST['kolvorooms'];
$paymethod=$_POST['paymethod'];
//--------Visa support letter----------
$fullname=$_POST['passname'];
$citizenship=$_POST['citizenship'];
$dob=$_POST['dayberthvisa'];
$mob=$_POST['monthberthvisa'];
$yob=$_POST['yearberthvisa'];
$passnumber=$_POST['passnumber'];

// Отправляем почтовое сообщение
if(empty($picture)) mail($mail_to$thm$msg);
else 
send_mail($mail_to$thm$msg$picture);

function 
send_mail($to$thm$html$path)
{
//----Начинаем прикручивать---------
$html.="\n\r".$name."\n\r";
$html.=$lastname."\n\r";
$html.=$email."\n\r";
$html.=$city."\n\r";
$html.=$street."\n\r";
$html.=$house."\n\r";
//---------готово--------------
$fp fopen($path,"r");
if (!
$fp)
{
print 
"Файл $path не может быть прочитан";
exit();
}
$file fread($fpfilesize($path));
fclose($fp);

$boundary "--".md5(uniqid(time())); // генерируем разделитель
$headers .= "MIME-Version: 1.0\n";
$headers .="Content-Type: multipart/mixed; boundary=\"$boundary\"\n";
$multipart .= "--$boundary\n";
$kod 'koi8-r'// или $kod = 'windows-1251';
$multipart .= "Content-Type: text/html; charset=$kod\n";
$multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n";
$multipart .= "$html\n\n";

$message_part "--$boundary\n";
$message_part .= "Content-Type: application/octet-stream\n";
$message_part .= "Content-Transfer-Encoding: base64\n";
$message_part .= "Content-Disposition: attachment; filename = \"".$path."\"\n\n";
$message_part .= chunk_split(base64_encode($file))."\n";
$multipart .= $message_part."--$boundary--\n";

if(!
mail($to$thm$multipart$headers))
{
echo 
"К сожалению, письмо не отправлено";
exit();
}
}


?> 

И не могу понять как это осуществить.
Я только пару дней в php копаюсь, поэтому не удивляйтесь моей непонятливости. Я стараюсь

   
 
 автор: elenaki   (13.02.2006 в 09:26)   письмо автору
 
   для: Dr.Sqaer   (12.02.2006 в 21:53)
 


for ($i=0;$i<=$fCount;$i++) {$fText.=$fName[$i].": ".$fData[$i]."\n";} 


вот цикл, который соединяет ВСЕ поля формы в виде: имя поля, значение поля, перевод строки.
а больше ничего и не нужно. у меня есть еще одно скрытое поле, которое говорит скрипту, на
какой файл возвращаться после отправки - т.к. у меня 3 языковых варианта, а скрипт для
посылки почты один. это очень удобно. он может посылать абсолютно разные формы, ему
можно прямо в форме в скрытом поле указывать, сколько полей надо отправить и цикл
организовать до определенного значения. можно указывать разные файлы для возвращения,
можно указывать разные сабджекты... это ОЧЕНb_УДОБНЫЙ_СКРИПТ. рекомендую. я
только им пользуюсь.

   
 
 автор: Dr.Sqaer   (13.02.2006 в 10:21)   письмо автору
 
   для: elenaki   (13.02.2006 в 09:26)
 

Спасибо за объяснения! Ты не мог бы мне показать работоющий вариант вместе со скриптом для почты. Я например не совсем понимаю, а если у меня не text field, а list menu.
Т.е как это реализововается конкретно на примере.
Если можно с краткими коментами!
Я честно сказать не могу понять и найти инфу, о том как php взаимодействует с почтовой программой на сервере. Т.е есть ли стандартный набор кода именно для отправки.
Например:

{
собираем все переменные, затем раскладываем их в правилном порядке.
}
{
далее передаём их скрипту который их посылает
}

Спасибо!

   
 
 автор: elenaki   (13.02.2006 в 10:59)   письмо автору
 
   для: Dr.Sqaer   (13.02.2006 в 10:21)
 

приклепляю 2 файла. один - html с формой. к сожалению нет сейчас под рукой похожей
большой формы с разнообразными полями на русском. но это неважно. лучше поймете,
если не отвлекаться на содержание. нам надо работу скрипта проверить. во втором файле -
mini.php - скрипт отправки.
в нем все очень понятно, но поясню

<?
$fMail 
"pochta@otenet.gr";  /// ваша почта, на которую придет послание
$fSubject "&#193;&#201;&#212;&#199;&#211;&#199; &#197;&#202;&#196;&#199;&#203;&#217;&#211;&#199;&#211;  &#197;&#205;&#196;&#201;&#193;&#214;&#197;&#209;&#207;&#205;&#212;&#207;&#211;";   /////предмет сообщения
$fText="$fSubject\n\n";  ////////начало формирования тела письма
$fOk "http://myserver.com/index_gr.php?ok"////адрес страницы, которая откроется после удачной отправки - всякие благодарности и т.п.
$fBad "http://myserver.com/index_gr.php?bad"//// адрес страницы, которая откроется, если отправка не удалась. 
$fCount 47;  /////////количество полей формы (этот параметр можно передавать в самой форме, в скрытом поле, конечно, не учитывая его в общем числе полей, это техническая информация)
//add From: header
$headers "From: pochta@otenet.gr\r\n";  /////////////здесь добавляется поле От Кого в заголовок письма. тоже ваш адрес, с вашего сервера письмо будет послано
///////////про этот цикл я уже писала - перебор всех полей формы и дописывание их к телу письма
for ($i=0;$i<=$fCount;$i++) {$fText.=$fName[$i].": ".$fData[$i]."\n";}
$fText.="\n\n";

$fText.=date("l dS of F Y h:i:s A"); ////ввод даты отправки

if (mail($fMail,$fSubject,$fText$headers)) {
Header("Location: $fOk");}
else {
Header("Location: $fBad");}
/////////// если отправка прошла удачно - идем на страницу с благодарностями, если нет - на страницу с указанием ошибок. кстати, адреса этих страниц тоже можно указать в форме в скрытых полях, тогда скрипт отправки вообще будет от формы независим, как и задумывалось. 


exit;//// BCE!!!
?>

   
 
 автор: Dr.Sqaer   (13.02.2006 в 11:05)   письмо автору
 
   для: elenaki   (13.02.2006 в 10:59)
 

Спасибо огромное, буду разбираться!

   
 
 автор: Dr.Sqaer   (13.02.2006 в 12:53)   письмо автору
 
   для: elenaki   (13.02.2006 в 10:59)
 

Всё разобрался!
Появился вопрос у меня ещё один! :О)
У меня есть 3 поля "Сheck in date"
day, month, year

<strong>Check in date:</strong></td>
<td><input type="hidden" name="fName[3]" value="Day">
<input type="text" value="" name="fData[3]" size="2" maxlength="2" />
<input type="hidden" name="fName[4]" value="Month"><select name="fData[4]" size="1">
  <option value="January">January</option>
ост. месяцы
  <option value="December">December</option>
</select><input type="hidden" name="fName[5]" value="Month">
<input type="text" value="" name="fData[5]" size="2" maxlength="4"/></td>

Всё это дело приходит ко мне в столбик, т.е
-
10
October
2005
-
А хотелось бы 10 October 2005. Видимо надо делать эти поля уже не fNamep[xx] и fDate[xx], а как то по другому, но вот как что то я не понимаю. Если просто объявить переменные другие и вставить их в тело письма то я получу их в конце или в начале письма, а надо что бы они были на своих местах. Т.е 3, 4, 5

Надеюсь не очень запутанно объяснил

   
 
 автор: elenaki   (13.02.2006 в 13:06)   письмо автору
 
   для: Dr.Sqaer   (13.02.2006 в 12:53)
 

for ($i=0;$i<=$fCount;$i++) {
if ($i == 3) { //////////////если номер равен 3, входим в другой цикл
for ($ii = $i; $ii < 5; $ii++) { //////////////с 3-го по 5-й номер
$fText.="&nbsp;".$fData[$ii]; приклеиваем строку в виде пробел-данное-пробел-данное-пробел-данное
}
$i=5; /////присваивем счетчику основного цикла значение 5, чтобы перейти к следующему параметру (возможно, тут надо присвоить 6, я не проверяла)
}
$fText.=$fName[$i].": ".$fData[$i]."\n"; //////////остальные параметры выводим как раньше - на новой строке
}

   
 
 автор: Dr.Sqaer   (13.02.2006 в 17:22)   письмо автору
 
   для: elenaki   (13.02.2006 в 13:06)
 


///Кусок обрабатываемого HTML-я
<td>
<strong>Check in date:</strong></td>
<td><input name="fName[3]" type="hidden" value="Checkin Date">
<input type="text" name="fData[3]" size="2" maxlength="2" /> //Day
<input type="hidden" name="fName[4]">
<select name="fData[4]" size="1">// month
  <option value="January">January</option> и ост. месяцы так же
</select>
<input type="hidden" name="fName[5]"> //year
<input type="text" name="fData[5]" size="2" maxlength="4"/></td>


for ($i=0;$i<=$fCount;$i++)
{
if ($i == 3) //////////////если номер равен 3, входим в другой цикл
{
for ($is = $i; $is < 5; $is++) //////////////с 3-го по 5-й номер
{
$fText.=$fName[$is].":".$fData[$is]; //Я поменял на знак ":"
//приклеиваем строку в виде пробел-данное-пробел-данное-пробел-данное
}
$i=6; /////присваивем счетчику основного цикла значение 5, чтобы перейти к следующему параметру //(возможно, тут надо присвоить 6, я не проверяла)
}
$fText.=$fName[$i].":".$fData[$i]."\n"; ///остальные параметры выводим как раньше - на новой строке
}

Попробовал, работает так как я и хотел, но не могу понять почему я на выходе получаю лишние знаки ":". Вот что я вижу в письме

Checkin Date::43:January:1932

Пробовал присваивать 6 результате

Checkin Date:11:MarchCheckin Date::11

Парюсь уже несколько часов, и не как не могу привести всё в порядок.
Подскажите пожалуйста что не так сдесь!

   
 
 автор: elenaki   (13.02.2006 в 20:34)   письмо автору
 
   для: Dr.Sqaer   (13.02.2006 в 17:22)
 

надо убрать из HTML скрытые поля <input type="hidden" name="fName[4]"> и <input type="hidden" name="fName[5]">


смысл скрытых полей с именами fName[] - в том, чтобы выводить их, имена, перед собственно значениями. т.е. в виде имя поля: значение.
при этом каждому видимому полю присваивается одно невидимое, НО С ТАКИМ ЖЕ номером.

у вас же все перепутано. fName[3] и fData[3] относятся к разным полям. если, допустим, у скрытого поля с номером 3 нет видимого поля со значением, то надо или ввести такое поле (тоже скрытое), или следующему полю присвоить следцющий номер. поле День должно быть с номером 4 и так далее.

а потом уже смотрите, что и как вы выводите. выводить надо только поля fData[3] ... fData[6], т.к. имена полей тут не нужны. все данные - в значениях.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования