есть необходимость перед отправкой данных из формы на сервер показать юзеру что он назаполнял, ну и соответственно затем 2 кнопки (ok и back).
вот кусок того что я нарисовал (все прекрасно работает, тут полный пример: заказ факсимиле):
<?php
function show_form()
{
?>
<form action="" method=post enctype="multipart/form-data" onSubmit='return ValidateForm(this)'>
<table width="100%" border="0" cellpadding="7" cellspacing="0">
<tr>
<td align="right" valign="middle">
Адрес доставки:</td>
<td>
<input type="text" name="dostav" size="40" class="textbox">
</td>
</tr>
<tr>
<td align="right" valign="middle">
Тип доставки:</td>
<td>
<select name="tip" size="1" class="textbox">
<option>Самовывоз с производства</option>
<option>Стандартная доставка</option>
<option>Экспресс доставка</option>
</select>
</td>
</tr>
<tr>
<td align="right" valign="middle">
Координаты для связи: <span style='color:#ff0000;'>*</span></td>
<td>
<input type="text" name="koord" size="40" class="textbox">
</td>
</tr>
<tr>
<td align="right" valign="middle">
Ваша электронная почта:</td>
<td>
<input type="text" name="milo" size="40" class="textbox">
</td>
</tr>
<tr>
<td align="right" valign="middle">
Наименование заказчика: <span style='color:#ff0000;'>*</span></td>
<td>
<input type="text" name="naim" size="40" class="textbox">
</td>
</tr>
<tr>
<td align="right" valign="middle">
Примечание:</td>
<td>
<textarea rows="10" name="mess" cols="35" class="textbox"></textarea>
</td>
</tr>
<tr>
<td height="62"></td>
<td><input type="submit" value="Отправить" name="submit" class="button"></td>
</tr>
</table>
<script language='JavaScript'>
function ValidateForm(frm) {
if (frm.koord.value=="") {
alert("Пожалуйста введите координаты для связи с Вами.");
return false;
}
if (frm.naim.value=="") {
alert("Пожалуйста введите Наименование заказчика.");
return false;
}
}
</script>
</form>
<?
}
function complete_mail() {
$_POST['mess'] = substr(htmlspecialchars(trim($_POST['mess'])), 0, 10000);
$_POST['dostav'] = substr(htmlspecialchars(trim($_POST['dostav'])), 0, 1000);
$_POST['tip'] = substr(htmlspecialchars(trim($_POST['tip'])), 0, 1000);
$_POST['koord'] = substr(htmlspecialchars(trim($_POST['koord'])), 0, 1000);
$_POST['naim'] = substr(htmlspecialchars(trim($_POST['naim'])), 0, 1000);
$_POST['milo'] = substr(htmlspecialchars(trim($_POST['milo'])), 0, 1000);
$mess = '
<b>Адрес доставки:</b>'.$_POST['dostav'].'<br />
<b>Тип доставки:</b>'.$_POST['tip'].'<br />
<b>Координаты для связи:</b>'.$_POST['koord'].'<br />
<b>Электронная почта:</b>'.$_POST['milo'].'<br />
<b>Наименование заказчика:</b>'.$_POST['naim'].'<br />
<b>Примечание:</b>'.$_POST['mess'];
require 'class.phpmailer.php';
$mail = new PHPMailer();
$mail->From = 'pechati-permi@mail.ru';
$mail->FromName = 'Заказ факсимиле с сайта';
$mail->AddAddress('pechati-permi@mail.ru', 'PoMaH');
$mail->IsHTML(true);
$mail->Subject = $_POST['naim'];
$mail->Body = $mess;
if (!$mail->Send()) die ('Mailer Error: '.$mail->ErrorInfo);
echo 'Спасибо! Ваше письмо отправлено.<br>
Вы заполнили следующую информацию:<br><hr>
<b>Адрес доставки: </b>'.$_POST['dostav'].'<br />
<b>Тип доставки: </b>'.$_POST['tip'].'<br />
<b>Координаты для связи: </b>'.$_POST['koord'].'<br />
<b>Электронная почта: </b>'.$_POST['milo'].'<br />
<b>Наименование заказчика: </b>'.$_POST['naim'].'<br />
<b>Примечание: </b>'.$_POST['mess'];
}
if (!empty($_POST['submit'])) complete_mail();
else show_form();
?>
а вот как сюда воткнуть еще и подтверждение не знаю, видимо иссяк =)
Спустя 18 минут, 27 секунд (16.10.2010 - 15:09) kromag написал(а):
Да кстати, тут у меня есть код который выводит заполненную инфу:
но делает он это уже после отправки, а надо что бы ДО
echo 'Спасибо! Ваше письмо отправлено.<br>
Вы заполнили следующую информацию:<br><hr>
<b>Адрес доставки: </b>'.$_POST['dostav'].'<br />
<b>Тип доставки: </b>'.$_POST['tip'].'<br />
<b>Координаты для связи: </b>'.$_POST['koord'].'<br />
<b>Электронная почта: </b>'.$_POST['milo'].'<br />
<b>Наименование заказчика: </b>'.$_POST['naim'].'<br />
<b>Примечание: </b>'.$_POST['mess'];
но делает он это уже после отправки, а надо что бы ДО
Спустя 27 минут, 6 секунд (16.10.2010 - 15:36) sergeiss написал(а):
Цитата (kromag @ 16.10.2010 - 15:51) |
есть необходимость перед отправкой данных из формы на сервер показать юзеру что он назаполнял, ну и соответственно затем 2 кнопки (ok и back) |
Это задача для JS, поэтому переношу в раздел JS.
Ты можешь, например, сделать скрытый DIV, который в функции ValidateForm заполняешь введенными данными и показываешь пользователю. Там же делаешь кнопки нужные. И уже в зависимости от введенных данных и/или от нажатых кнопок возвращаешь из ValidateForm true или false.
Впрочем, я так и не понял, зачем что-то показывать юзеру? Он что - не видит, что навводил? Я бы сделал проще. Просто внутри ValidateForm надо спросить подтверждение от пользователя, через фунцию prompt. Тут же можно и указать, что именно введено не верно (если это требуется). И уже потом вернуть true или false, а зависимости от нажатой кнопки.
Спустя 11 минут, 31 секунда (16.10.2010 - 15:48) kromag написал(а):
Цитата (sergeiss @ 16.10.2010 - 12:36) |
Ты можешь, например, сделать скрытый DIV, который в функции ValidateForm заполняешь введенными данными и показываешь пользователю. Там же делаешь кнопки нужные. И уже в зависимости от введенных данных и/или от нажатых кнопок возвращаешь из ValidateForm true или false. |
ValidateForm у меня проверяет заполненность необходимых полей:
<script language='JavaScript'>
function ValidateForm(frm) {
if (frm.koord.value=="") {
alert("Пожалуйста введите координаты для связи с Вами.");
return false;
}
if (frm.naim.value=="") {
alert("Пожалуйста введите Наименование заказчика.");
return false;
}
}
</script>
А что туда воткнуть, чтоб он мне окошко с дивом показал? (не пинайте плиз)
Спустя 4 минуты, 24 секунды (16.10.2010 - 15:52) Michael написал(а):
Если не завязываться на js(который может быть отключен у пользователей), то для php задача называется - многостраничная форма. Гугл поможет, но вкратце: промежуточные данные складываешь в сессии; в формы передаешь текущий шаг; по этому шагу определяешь обработку - или форму с подтверждением выдать или обработать данные, или первоначальную форму выдать .
Спустя 8 минут, 52 секунды (16.10.2010 - 16:01) kromag написал(а):
Цитата (Michael @ 16.10.2010 - 12:52) |
Если не завязываться на js(который может быть отключен у пользователей), то для php задача называется - многостраничная форма. Гугл поможет, но вкратце: промежуточные данные складываешь в сессии; в формы передаешь текущий шаг; по этому шагу определяешь обработку - или форму с подтверждением выдать или обработать данные, или первоначальную форму выдать . |
Т.е. создаю еще один файл со скрытыми полями -> передаю из заполненных до этого форм содержимое в скрытые поля -> а на экране отображаю введенные ранее данные -> а дальше юзер выбирает, что с этим делать: отправить на сервер или редактировать?
Спустя 2 минуты, 37 секунд (16.10.2010 - 16:04) Michael написал(а):
данные из полей ввода в скрытые поля - только по необходимости, они же в сессии лежат и так.
Спустя 6 минут, 24 секунды (16.10.2010 - 16:10) kromag написал(а):
Цитата (Michael @ 16.10.2010 - 13:04) |
данные из полей ввода в скрытые поля - только по необходимости, они же в сессии лежат и так. |
Просто у меня в форме и прикрепленные файлы есть и селекты, посмотрю щас что получится.
Спасибо за совет.
Спустя 9 минут, 23 секунды (16.10.2010 - 16:19) sergeiss написал(а):
Цитата (Michael @ 16.10.2010 - 16:52) |
Если не завязываться на js(который может быть отключен у пользователей) |
Это старая "холиварная война"... JS мало у кого отключен.
Но если это и так, то тогда можно сделать проверку на то, что при отправке не было дополнительного подтверждения (т.е., скорее всего, JS отключен) и что надо дополнительно спросить юзера о подтверждении данных. Т.е. то, о чем говоришь ты. Но надо оценить, стоит ли это делать ради мелкой кучки параноиков, отключающих JS.
Спустя 9 минут, 58 секунд (16.10.2010 - 16:29) arvitaly написал(а):
Цитата |
Но надо оценить, стоит ли это делать ради мелкой кучки параноиков, отключающих JS. |
которые вообще пользуются lynx и им формы пофигу)))
Спустя 1 минута, 50 секунд (16.10.2010 - 16:31) Michael написал(а):
Цитата (kromag @ 16.10.2010 - 15:10) | ||
Просто у меня в форме и прикрепленные файлы есть и селекты, посмотрю щас что получится. Спасибо за совет. |
ага, с прикрепленными файлами морока небольшая - надо их полюбому грузить во временную папку (которая будет потом очищаться), и пути сохранять в сессии.
Спустя 10 минут, 54 секунды (16.10.2010 - 16:42) kromag написал(а):
Цитата (Michael @ 16.10.2010 - 13:31) | ||||
ага, с прикрепленными файлами морока небольшая - надо их полюбому грузить во временную папку (которая будет потом очищаться), и пути сохранять в сессии. |
Видимо придется идти по пути наименьшего сопротивления и юзать JavaScript
Спустя 17 минут, 53 секунды (16.10.2010 - 17:00) Michael написал(а):
Цитата (kromag @ 16.10.2010 - 15:42) |
Видимо придется идти по пути наименьшего сопротивления и юзать JavaScript |
да, пока шеф не просекет.
на js вообще просто, а если отключен - этот шаг подтверждения вообще пропускай.
Спустя 7 минут, 52 секунды (16.10.2010 - 17:08) kromag написал(а):
Цитата (sergeiss @ 16.10.2010 - 13:19) | ||
Это старая "холиварная война"... JS мало у кого отключен. Но если это и так, то тогда можно сделать проверку на то, что при отправке не было дополнительного подтверждения (т.е., скорее всего, JS отключен) и что надо дополнительно спросить юзера о подтверждении данных. Т.е. то, о чем говоришь ты. Но надо оценить, стоит ли это делать ради мелкой кучки параноиков, отключающих JS. |
Тогда возвращаясь к своему вопросу по JS:
Цитата |
ValidateForm у меня проверяет заполненность необходимых полей: <script language='JavaScript'> function ValidateForm(frm) { if (frm.koord.value=="") { alert("Пожалуйста введите координаты для связи с Вами."); return false; } if (frm.naim.value=="") { alert("Пожалуйста введите Наименование заказчика."); return false; } } </script> А что туда воткнуть, чтоб он мне окошко с дивом показал? (не пинайте плиз) |
Если можно с примером
Спустя 9 минут, 57 секунд (16.10.2010 - 17:18) Michael написал(а):
По нажатию на "Отправить" у тебя вызов ValidateForm? Ну так в конце нее добавь код вывода окна:
1) Если окошко системное использовать confirm- "серенькое"(некрасивое), то обсматривая форму собирай данные для текста в окно:
2) если красивое всплывающее окошко - то поищи готовое - их тьма. Кодинг похож, только не строку формируешь, а в dom эл-ты окна распихиваешь данные. На "нет" - скрываешь диалоговое окно, на "да" - сабмит
1) Если окошко системное использовать confirm- "серенькое"(некрасивое), то обсматривая форму собирай данные для текста в окно:
var text = 'Тип доставки:';
text += document.form1.dost.value + '\n';
...
var x = confirm(text);
if (x) document.form1.submit();
2) если красивое всплывающее окошко - то поищи готовое - их тьма. Кодинг похож, только не строку формируешь, а в dom эл-ты окна распихиваешь данные. На "нет" - скрываешь диалоговое окно, на "да" - сабмит