|
|
|
| Хочется что бы после нажатия кнопки 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">>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> | |
|
|
|
|
|
|
|
для: Dr.Sqaer
(12.02.2006 в 19:07)
| | Такие здоровые листинги лучше прикреплять в виде отдельного файла. | |
|
|
|
|
|
|
|
для: cheops
(12.02.2006 в 19:23)
| | а нельзя как-нить отредактировать пост? | |
|
|
|
|
|
|
|
для: 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="">
|
тогда можно поля называть как угодно, на каком угодно языке. удачки! | |
|
|
|
|
|
|
|
для: elenaki
(12.02.2006 в 19:48)
| | А не пойдет
<form action=mailto:destination@email.ru>
|
? | |
|
|
|
|
|
|
|
для: Киналь
(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($fp, filesize($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 копаюсь, поэтому не удивляйтесь моей непонятливости. Я стараюсь | |
|
|
|
|
|
|
|
для: Dr.Sqaer
(12.02.2006 в 21:53)
| |
for ($i=0;$i<=$fCount;$i++) {$fText.=$fName[$i].": ".$fData[$i]."\n";}
|
вот цикл, который соединяет ВСЕ поля формы в виде: имя поля, значение поля, перевод строки.
а больше ничего и не нужно. у меня есть еще одно скрытое поле, которое говорит скрипту, на
какой файл возвращаться после отправки - т.к. у меня 3 языковых варианта, а скрипт для
посылки почты один. это очень удобно. он может посылать абсолютно разные формы, ему
можно прямо в форме в скрытом поле указывать, сколько полей надо отправить и цикл
организовать до определенного значения. можно указывать разные файлы для возвращения,
можно указывать разные сабджекты... это ОЧЕНb_УДОБНЫЙ_СКРИПТ. рекомендую. я
только им пользуюсь. | |
|
|
|
|
|
|
|
для: elenaki
(13.02.2006 в 09:26)
| | Спасибо за объяснения! Ты не мог бы мне показать работоющий вариант вместе со скриптом для почты. Я например не совсем понимаю, а если у меня не text field, а list menu.
Т.е как это реализововается конкретно на примере.
Если можно с краткими коментами!
Я честно сказать не могу понять и найти инфу, о том как php взаимодействует с почтовой программой на сервере. Т.е есть ли стандартный набор кода именно для отправки.
Например:
{
собираем все переменные, затем раскладываем их в правилном порядке.
}
{
далее передаём их скрипту который их посылает
}
Спасибо! | |
|
|
|
|
|
|
|
для: Dr.Sqaer
(13.02.2006 в 10:21)
| | приклепляю 2 файла. один - html с формой. к сожалению нет сейчас под рукой похожей
большой формы с разнообразными полями на русском. но это неважно. лучше поймете,
если не отвлекаться на содержание. нам надо работу скрипта проверить. во втором файле -
mini.php - скрипт отправки.
в нем все очень понятно, но поясню
<?
$fMail = "pochta@otenet.gr"; /// ваша почта, на которую придет послание
$fSubject = "ÁÉÔÇÓÇ ÅÊÄÇËÙÓÇÓ ÅÍÄÉÁÖÅÑÏÍÔÏÓ"; /////предмет сообщения
$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!!!
?>
|
| |
|
|
|
|
|
|
|
для: elenaki
(13.02.2006 в 10:59)
| | Спасибо огромное, буду разбираться! | |
|
|
|
|
|
|
|
для: 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
Надеюсь не очень запутанно объяснил | |
|
|
|
|
|
|
|
для: 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.=" ".$fData[$ii]; приклеиваем строку в виде пробел-данное-пробел-данное-пробел-данное
}
$i=5; /////присваивем счетчику основного цикла значение 5, чтобы перейти к следующему параметру (возможно, тут надо присвоить 6, я не проверяла)
}
$fText.=$fName[$i].": ".$fData[$i]."\n"; //////////остальные параметры выводим как раньше - на новой строке
} | |
|
|
|
|
|
|
|
для: 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
|
Парюсь уже несколько часов, и не как не могу привести всё в порядок.
Подскажите пожалуйста что не так сдесь! | |
|
|
|
|
|
|
|
для: 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], т.к. имена полей тут не нужны. все данные - в значениях. | |
|
|
|