[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Предпросмотр данных в форме
kromag
Светлые головы, подскажите:
есть необходимость перед отправкой данных из формы на сервер показать юзеру что он назаполнял, ну и соответственно затем 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(который может быть отключен у пользователей)

Это старая "холиварная война"... smile.gif 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)
Цитата (Michael @ 16.10.2010 - 13:04)
данные из полей ввода в скрытые поля - только по необходимости, они же в сессии лежат и так.

Просто у меня в форме и прикрепленные файлы есть и селекты, посмотрю щас что получится.
Спасибо за совет.

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


Спустя 10 минут, 54 секунды (16.10.2010 - 16:42) kromag написал(а):
Цитата (Michael @ 16.10.2010 - 13:31)
Цитата (kromag @ 16.10.2010 - 15:10)
Цитата (Michael @ 16.10.2010 - 13:04)
данные из полей ввода в скрытые поля - только по необходимости, они же в сессии лежат и так.

Просто у меня в форме и прикрепленные файлы есть и селекты, посмотрю щас что получится.
Спасибо за совет.

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

Видимо придется идти по пути наименьшего сопротивления и юзать JavaScript sad.gif

Спустя 17 минут, 53 секунды (16.10.2010 - 17:00) Michael написал(а):
Цитата (kromag @ 16.10.2010 - 15:42)
Видимо придется идти по пути наименьшего сопротивления и юзать JavaScript sad.gif

да, пока шеф не просекет. biggrin.gif
на js вообще просто, а если отключен - этот шаг подтверждения вообще пропускай.

Спустя 7 минут, 52 секунды (16.10.2010 - 17:08) kromag написал(а):
Цитата (sergeiss @ 16.10.2010 - 13:19)
Цитата (Michael @ 16.10.2010 - 16:52)
Если не завязываться на js(который может быть отключен у пользователей)

Это старая "холиварная война"... smile.gif 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>

А что туда воткнуть, чтоб он мне окошко с дивом показал? (не пинайте плиз)


Если можно с примером unsure.gif


Спустя 9 минут, 57 секунд (16.10.2010 - 17:18) Michael написал(а):
По нажатию на "Отправить" у тебя вызов ValidateForm? Ну так в конце нее добавь код вывода окна:
1) Если окошко системное использовать confirm- "серенькое"(некрасивое), то обсматривая форму собирай данные для текста в окно:
var text = 'Тип доставки:';
text += document.form1.dost.value + '\n';
...

var x = confirm(text);
if (x) document.form1.submit();

2) если красивое всплывающее окошко - то поищи готовое - их тьма. Кодинг похож, только не строку формируешь, а в dom эл-ты окна распихиваешь данные. На "нет" - скрываешь диалоговое окно, на "да" - сабмит
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.