|
 50.5 Кб |
|
| Всем привет. Тему конечно я сформулировать толком не смог, но суть проблемы опишу. Вобщем у меня имеется блок сверстаный таблицей, его можно увидить на рис. 1 (прикреплено). Такой блок будет выводиться в цикле, сколько изделий, столько раз и выведется. Идем дальше. В блоке можем увидить 3 ссылки: заказать, альбом и комментарии. По клику на каждую будет отображаться нужная форма, рис. 2 (прикреплено). Вопрос мой в том, как бы отослать заказ на емайл:
1 - чтобы в случае успеха эта формочка свернулась до исходного вида и вывелось сообщение сообщение отослано.
2 - чтобы в случае ошибки ввода данных форма с данными остались (т.е. не скрылась, после перезагрузки страницы скрывается) и ниже вывелось сообщение об определенной ошибке
Есть догадка, пробовать аяксом отослать (он ведь не перезагружает страницу), но пункты 1 и 2 под вопросом.
Еще в добавок насчет комментариев. После нажатия на ссылку будет отображена форма с комментариями. Будет установлена постраничная навигация, чтобы много комментариев в блоке не было на страницу. Также ниже комментариев будут поля для добавления нового комментария. Вопросы в следующем:
1 - если через аякс добавить комментарий, увижу ли я его сразу после добавления и форма комментариев не скроется
2 - возможно ли устроить постраничную навигация внутри формы комментариев, чтобы переходя по навигации, сама форма не скрылась...и нужно учитывать что форма комментирования отображается в главном блоке при клике на ссылку. таких главных блоков будет столько, сколько данных в базе.
Вот собственно все волнующие меня моменты на пока..Если что-то не понятно описал, говорите. Буду очень благодарен за любой совет, помощь. | |
|
|
|
|
|
|
|
для: TetRiska
(16.08.2009 в 22:09)
| | можно попробовать к ссылкам добавить GET параметр и в зависимости от его значения выводить соответствующую форму.
или сделать так
<p><a href="#" onclick="document.getElementById ('hid_1').style.display = 'block'; return false" >комментарий</a ></p>
<div id="hid_1" style='display:none;'>
<!-- тут форма добавления комментария -->
</div>
|
по поводу вывода ошибок, то создай массив $error куда будешь заносить возникшие ошибки и при наличии последних показывать из пользователю
пример:
<?php
$error = array();
if(empty($_POST['name'])) $error[] = "Поле для имени пустое";
// и дальше если нет ошибок
if(empty($error)){
// продолжаешь обрабатывать данные
}
// если ошибки есть, то показываешь их
if(!empty($error)){
foreach($error as $err)
echo $err;
}
// ну а тут можешь вывести форму
?>
|
| |
|
|
|
|
|
|
|
для: Slo_Nik
(16.08.2009 в 23:10)
| | Спасибо насчет массива ошибок интересно, но насчет вывода формы так я и делаю | |
|
|
|
|
|
|
|
для: Slo_Nik
(16.08.2009 в 23:10)
| | По поводу ошибок.. Стащил интересную идею вывода ошибок у авторов гостевой, которая представлена на этом сайте:
<?php
if (empty($login)) {
$error = "<li>Вы не ввели имя\n";
}
if (empty($pass)) {
$error .= "<li>Вы не ввели пароль\n";
} elseif ($pass != $pass2) {
$error .= "<li>Введеные пароли не совпадают\n";
}
if (!empty($error)) {
echo "\n<ul>\n";
echo $error;
echo "</ul>\n";
|
И никаких массивов, и никаких циклов. | |
|
|
|
|
|
|
|
для: neadekvat
(17.08.2009 в 03:00)
| | патамушо форма одна штука, патаму и нема ни того ни другого
я конечно не настаиваю, можно делать и без массивов и даже обрабатывать без циклов, но такой гемор не для меня | |
|
|
|
|
|
|
|
для: Valick
(21.08.2009 в 20:20)
| | Геморрой? Вы это геморроем называете? По-моему, все предельно понятно.. | |
|
|
|
|
|
|
|
для: TetRiska
(16.08.2009 в 22:09)
| | >>Есть догадка, пробовать аяксом отослать (он ведь не перезагружает страницу), но пункты 1 и 2 под вопросом.
для этого не обязательно использовать аякс.
например, после сабмита формы можно сделать что-то типа:
<?php
$values=array('fio'=>'','email'=>'');
$formDisplay='display:none';// по умолчанию форма скрыта
if(isset($_POST['что-то там'])){
if(все поля заполнены)
mail($to,$subj,$msg)
else {
$formDisplay='';//показываем форму
//собираем значения для заполнения формы
$values['fio']=htmlspecialchars($_POST['fio']);
$values['email']=htmlspecialchars($_POST['email']);
}
}
?>
//а далее
<div style="<?php echo $formDisplay?>">
<form >
<input type='text' name='fio' value='<?php echo $values['fio']?>'>
<input type='text' name='email' value='<?php echo $values['email']?>'>
</form>
</div>
|
по поводу коментариев - аналогично | |
|
|
|
|
|
|
|
для: ride
(17.08.2009 в 10:10)
| | Продолжение...Наконец дошел до этого момента..Итак как у меня вышло:
начало цикла
<?php $a = 0;
while($catrow = mysql_fetch_assoc($res))
{
$a++;
$formDisplay = 'display:none';
......... ?>
|
проверка отправленных данных
<?php if(!empty($_POST['send_email'.$a.'_x']))
{
if($_POST['fio'.$a.''] == "" || $_POST['tel'.$a.''] == "")
{
$formDisplay = '';
$fio = $_POST['fio'.$a.''];
$email = $_POST['email'.$a.''];
$tel = $_POST['tel'.$a.''];
}
} ?>
|
форма
<?php $goods .="<form action='' method='post' id='zakaz".$a."' style='".$formDisplay."'>
<table style='margin-top:5px' border='0' cellspacing='0' cellpadding='0'>
<tr>
<td width='153'><div style='margin-bottom:3px'>ID изделия:</div></td>
<td width='306'><div style='margin-bottom:3px'><input style='text-align:center' class='form_z' disabled='disabled' size='3' type='text' name='id".$a."' value='".$catrow['id']."' />
<span style='font-family:tahoma; font-size:11px'><font color='red'>*</font> Не изменяемое поле</span></div></td>
</tr>
<tr>
<td><div style='margin-bottom:3px'>ФИО:</div></td>
<td><div style='margin-bottom:3px'><input class='form_z' size='40' type='text' name='fio".$a."'
id='fio' value='".$fio."'/> <font color='red'>*</font></div></td>
</tr>
<tr>
<td><div style='margin-bottom:3px'>E-mail:</div></td>
<td><div style='margin-bottom:3px'><input class='form_z' size='40' type='text'
name='email".$a."' value='".$email."'/></div></td>
</tr>
<tr>
<td><div style='margin-bottom:3px'>Контактный телефон:</div></td>
<td><div style='margin-bottom:3px'>
<select class='form_z' name='oper".$a."'>
<option>098</option>
<option>097</option>
<option>068</option>
<option>067</option>
</select>
<input class='form_z' size='15' type='text' name='tel".$a."' value='".$tel."'/>
<font color='red'>*</font></div></td>
</tr>
<tr>
<td> </td>
<td><font color='red'>*</font> <span style='font-family:tahoma; font-size:11px'>
Поля обязательны к заполнению</span></td>
</tr>
<tr>
<td colspan='2' align='center'><input style='margin-top:3px' onclick='submit();' name='send_email".$a."' type='image' src='".DOMEN."/images/btn_zak.gif' title='Отправить заказ' /> <input onclick='reset(); forms.zakaz".$a.".fio.focus(); return false;'
name='reset' type='image' src='".DOMEN."/images/clear.gif' title='Очистить все поля' /></td>
</tr>
</table>
</form>"; ?>
|
конец цикла
Проблема №1
Юзер жмет отправить заказ, но не все поля заполнены...страничку перезагружает с теми данными что были введены..нажимаю на очистить заполненные поля, не очищает...хотя до отправки очищало. Собственно как выйти из ситуации?
Проблема №2
Юзер жмет отправить заказ, но не все поля заполнены...страничку перезагружает с теми данными что были введены.. как видно формы прокручиваются в цикле..их может быть 2-6 и тд. так вот во всех формах после перезагрузки одинаковые данные...как сделать чтобы только в той форме они были с которой было отправлено? | |
|
|
|
|
|
|
|
для: TetRiska
(21.08.2009 в 19:18)
| | Проблема №1
нужно понять что такое name='reset' и не искать проблему там где её нет.
Оно не очищает, а переустанавливает в первоначальное состояние.
Проблема №2
цикл - > массивы
непонятно как вы собирались обрабатывать данные 2-6 форм с одинаковыми именами.... | |
|
|
|
|
|
|
|
для: Valick
(21.08.2009 в 19:30)
| | 1. понял
2. внимательней насчет форм..они уникальны и поля уникальны | |
|
|
|
|
|
|
|
для: TetRiska
(21.08.2009 в 19:56)
| | 2. внимательней насчет форм..они уникальны и поля уникальны
а мне всё равно ;)
цикл -> массив и будет "усё у впорядке шеф" | |
|
|
|
|
|
|
|
для: Valick
(21.08.2009 в 20:05)
| |
if(!empty($_POST['send_email'.$a.'_x']))
{
$values = array('fio'=>''.$_POST['fio'.$a.''].'','email'=>''.$_POST['email'.$a.''].'',
'tel'=>''.$_POST['tel'.$a.''].'');
if($_POST['fio'.$a.''] == "" || $_POST['tel'.$a.''] == "")
{
$formDisplay = '';
$values['fio'] = htmlspecialchars($_POST['fio'.$a.'']);
$values['email'] = htmlspecialchars($_POST['email'.$a.'']);
$values['tel'] = htmlspecialchars($_POST['tel'.$a.'']);
}
else
{
отправка мыла
}
|
<input class='form_z' size='40' type='text' name='fio".$a."' id='fio' value='".$values['fio']."'/>
|
та же картина
Вот так страница смотрится после перезагрузки - http://s57.radikal.ru/i158/0908/65/e0f732130e17.jpg
А вот если посмотреть другие изделия то видим, что данные везде продублировались - http://i033.radikal.ru/0908/d2/b5fac6e20b1b.jpg | |
|
|
|
|
|
|
|
для: TetRiska
(21.08.2009 в 20:22)
| | вам Valick указал на причину.
задайте себе вопрос: почему $_POST['tel'.$a.'']?
вместо $formDisplay = ''; должно быть $formDisplay[$id_товара] = '';
тоже самое и с $values: не $values['fio'], а $values[$id_товара]['fio'] | |
|
|
|
|
|
|
|
для: ride
(21.08.2009 в 20:45)
| | Благодарю решил обе проблемы...А вот еще 1 вопрос на засыпку...Вот отправил я емейл как мне сделать, чтобы форма с которой отправлялось сообщение осталась развернута, и выведено сообщение что заказ отослан...но при этом сбросить ПОСТ..... или же вывести на экран сообщение не надолго, что заказ отослан и потом скрыться...типа всплывающее окошко - предпочтительный вариант!!!!
<?php
if(!empty($_POST['send_email'.$a.'_x']))
{
if($_POST['fio'.$a.''] == "" || $_POST['tel'.$a.''] == "" || !preg_match("/^[a-z0-9_.-]+@([a-z0-9_]+.)+[a-z]{2,4}$/",$_POST['email'.$a.'']))
{
бла бла бла всякие проверки и запоминание данных, и вывод
}
else
{
$info = "test";
include("functions/mail.php");
$mail = new Create_Mail();
$mail -> TypeHTML(true);
$mail -> ToMail("lex-romanow@yandex.ru");
$mail -> SubMail("1");
$mail -> BodyMail($info, NULL);
$mail -> HeaderMail(false);
$mail -> SendMail();
header("location: ".DOMEN."/magazine");
//так идет сброс ПОСТ
}
.................. ?>
|
еще для удобства, чтобы страницу не проматывало, а то находясь внизу страницы после поста кидает вверх, очень сбивает с толку. такое возможно? | |
|
|
|
|
|
|
|
для: TetRiska
(16.08.2009 в 22:09)
| | Я хочу создать простое приложение EXE, изучая PHP. Застрял на теме открытия в окне нужного мне файла.
$ctrl = wb_create_control ($winmain, ListView, 'Head1, Head2', ...);
wb_set_text ($ctrl, ' 1, 2');
$vv = fopen ("C:\\11.txt", "r");
wb_create_items ($ctrl, array($vv, "81"));
Мне нужно понять принцип построения логики для этого случая, поскольку справочники ориентированы в основном на web. Я не могу открыть 11.txt. ни в каком классе окна. Вместо него упорно вставляется "Resource id #17". Что делать с ресурсом в таком случае? | |
|
|
|