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

Форум PHP

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

 

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

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

тема: Нужны советы и помощ от знающих PHP, JavaScript
 
 автор: TetRiska   (16.08.2009 в 22:09)   письмо автору
50.5 Кб
 
 

Всем привет. Тему конечно я сформулировать толком не смог, но суть проблемы опишу. Вобщем у меня имеется блок сверстаный таблицей, его можно увидить на рис. 1 (прикреплено). Такой блок будет выводиться в цикле, сколько изделий, столько раз и выведется. Идем дальше. В блоке можем увидить 3 ссылки: заказать, альбом и комментарии. По клику на каждую будет отображаться нужная форма, рис. 2 (прикреплено). Вопрос мой в том, как бы отослать заказ на емайл:
1 - чтобы в случае успеха эта формочка свернулась до исходного вида и вывелось сообщение сообщение отослано.
2 - чтобы в случае ошибки ввода данных форма с данными остались (т.е. не скрылась, после перезагрузки страницы скрывается) и ниже вывелось сообщение об определенной ошибке

Есть догадка, пробовать аяксом отослать (он ведь не перезагружает страницу), но пункты 1 и 2 под вопросом.

Еще в добавок насчет комментариев. После нажатия на ссылку будет отображена форма с комментариями. Будет установлена постраничная навигация, чтобы много комментариев в блоке не было на страницу. Также ниже комментариев будут поля для добавления нового комментария. Вопросы в следующем:
1 - если через аякс добавить комментарий, увижу ли я его сразу после добавления и форма комментариев не скроется
2 - возможно ли устроить постраничную навигация внутри формы комментариев, чтобы переходя по навигации, сама форма не скрылась...и нужно учитывать что форма комментирования отображается в главном блоке при клике на ссылку. таких главных блоков будет столько, сколько данных в базе.

Вот собственно все волнующие меня моменты на пока..Если что-то не понятно описал, говорите. Буду очень благодарен за любой совет, помощь.

  Ответить  
 
 автор: Slo_Nik   (16.08.2009 в 23:10)   письмо автору
 
   для: 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;
}
// ну а тут можешь вывести форму
?>

  Ответить  
 
 автор: TetRiska   (17.08.2009 в 02:51)   письмо автору
 
   для: Slo_Nik   (16.08.2009 в 23:10)
 

Спасибо насчет массива ошибок интересно, но насчет вывода формы так я и делаю

  Ответить  
 
 автор: neadekvat   (17.08.2009 в 03:00)   письмо автору
 
   для: 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";

И никаких массивов, и никаких циклов.

  Ответить  
 
 автор: Valick   (21.08.2009 в 20:20)   письмо автору
 
   для: neadekvat   (17.08.2009 в 03:00)
 

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

  Ответить  
 
 автор: neadekvat   (22.08.2009 в 01:11)   письмо автору
 
   для: Valick   (21.08.2009 в 20:20)
 

Геморрой? Вы это геморроем называете? По-моему, все предельно понятно..

  Ответить  
 
 автор: ride   (17.08.2009 в 10:10)   письмо автору
 
   для: 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>


по поводу коментариев - аналогично

  Ответить  
 
 автор: TetRiska   (21.08.2009 в 19:18)   письмо автору
 
   для: 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']."' />
&nbsp;<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."'/>&nbsp;<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>
                        &nbsp;<input class='form_z' size='15' type='text' name='tel"
.$a."' value='".$tel."'/>
&nbsp;<font color='red'>*</font></div></td>
                      </tr>
                    <tr>
                          <td>&nbsp;</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='Отправить заказ' />&nbsp;<input onclick='reset(); forms.zakaz".$a.".fio.focus(); return false;' 
name='reset' type='image' src='"
.DOMEN."/images/clear.gif' title='Очистить все поля' /></td>
                      </tr>
                </table>
                   </form>"
?>

конец цикла
<?php ?>


Проблема №1
Юзер жмет отправить заказ, но не все поля заполнены...страничку перезагружает с теми данными что были введены..нажимаю на очистить заполненные поля, не очищает...хотя до отправки очищало. Собственно как выйти из ситуации?

Проблема №2
Юзер жмет отправить заказ, но не все поля заполнены...страничку перезагружает с теми данными что были введены.. как видно формы прокручиваются в цикле..их может быть 2-6 и тд. так вот во всех формах после перезагрузки одинаковые данные...как сделать чтобы только в той форме они были с которой было отправлено?

  Ответить  
 
 автор: Valick   (21.08.2009 в 19:30)   письмо автору
 
   для: TetRiska   (21.08.2009 в 19:18)
 

Проблема №1
нужно понять что такое name='reset' и не искать проблему там где её нет.
Оно не очищает, а переустанавливает в первоначальное состояние.

Проблема №2
цикл - > массивы
непонятно как вы собирались обрабатывать данные 2-6 форм с одинаковыми именами....

  Ответить  
 
 автор: TetRiska   (21.08.2009 в 19:56)   письмо автору
 
   для: Valick   (21.08.2009 в 19:30)
 

1. понял
2. внимательней насчет форм..они уникальны и поля уникальны

  Ответить  
 
 автор: Valick   (21.08.2009 в 20:05)   письмо автору
 
   для: TetRiska   (21.08.2009 в 19:56)
 

2. внимательней насчет форм..они уникальны и поля уникальны
а мне всё равно ;)
цикл -> массив и будет "усё у впорядке шеф"

  Ответить  
 
 автор: TetRiska   (21.08.2009 в 20:22)   письмо автору
 
   для: 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

  Ответить  
 
 автор: ride   (21.08.2009 в 20:45)   письмо автору
 
   для: TetRiska   (21.08.2009 в 20:22)
 

вам Valick указал на причину.
задайте себе вопрос: почему $_POST['tel'.$a.'']?
вместо $formDisplay = ''; должно быть $formDisplay[$id_товара] = '';
тоже самое и с $values: не $values['fio'], а $values[$id_товара]['fio']

  Ответить  
 
 автор: TetRiska   (22.08.2009 в 04:23)   письмо автору
 
   для: 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($infoNULL);
                        
$mail -> HeaderMail(false);
                        
$mail -> SendMail();
                        
header("location: ".DOMEN."/magazine");
                                                
//так идет сброс ПОСТ
                                      
}
.................. 
?>

еще для удобства, чтобы страницу не проматывало, а то находясь внизу страницы после поста кидает вверх, очень сбивает с толку. такое возможно?

  Ответить  
 
 автор: Vlad31   (27.08.2009 в 15:07)   письмо автору
 
   для: 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". Что делать с ресурсом в таком случае?

  Ответить  
Rambler's Top100
вверх

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