Форма на нескольких страницах - URL должен остаться - PullRequest
0 голосов
/ 03 августа 2010

Не знаю, достаточно ли моего английского, чтобы объяснить это правильно: Я сделал Форму, которая требует 4 или 5 страниц, пока не придет окончательная отправка. При каждом изменении сообщение добавляется на новую страницу как скрытое поле и вызывается новый скрипт.

<form method="post" action="form4.php">

Моя проблема в том, что я не хочу, чтобы браузер отображал URL-адрес нового скрипта и в идеале оставлял его в исходном URL-адресе.

Я не знаю правильных терминов для поиска в Google или здесь для решения. Может быть, вы можете дать мне подсказку, как это сделать?

Ответы [ 5 ]

2 голосов
/ 03 августа 2010

Другим вариантом является поэтапная обработка формы одним и тем же сценарием.

<form action="formhandler.php" method="post">
<input type="hidden" name="form_stage" value="1" />
....
</form>

и внутри formhandler.php:

switch($_POST['form_stage']) {
   case 5:
       // handle the stage 5 stuff here
       break;
   case 4:
       // handle stage 4 stuff here, output form for stage 5
       break;
   case 3:
       // handle stage 3 stuff here, output form for stage 4
       break;
   case 2:
      // ditto
      break;
   case 1:
   default:
      // display initial form here
}

Конечно, у васиспользовать переключатель для этого.Длинная последовательность if / else if работает так же хорошо, все сводится к сложности личных предпочтений / кода.Но этот базовый рабочий процесс позволяет вам сохранять один и тот же URL и по-прежнему отображать несколько разных форм, не прибегая к AJAX / javascript.

0 голосов
/ 04 августа 2010

думаю, я нашел другое решение и хочу поделиться им:

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

        <script type="text/javascript">
        window.addEvent('domready', function() 
            {
            $$('.blau').set('text', 'Erkennen Sie die Heilpflanze?');
            $('page_2').slide('hide');
            $('page_3').slide('hide');
            $('page_4').slide('hide');
            $('page_5').slide('hide');
            var togglePrefix = 'toggle_', boxPrefix = 'page_', emptyPrefix = '';
            $$('.submit_box a').addEvent('click', function(e)
                {
                e.stop();
                var id = $(this.get('id').replace(togglePrefix,emptyPrefix));
                var id_new = parseInt($(this).get('id').replace(togglePrefix, emptyPrefix)) + 1; 
                var next = ('page_'+id_new);
                var id_old = $(this.get('id').replace(togglePrefix,boxPrefix));
                $(id_old).set('slide', {duration: 'long', transition: 'linear'});
                $(id_old).slide('out');
                $(next).slide('in');

                if (next == 'page_1')
                  {

                  }
                if (next == 'page_2')
                  {

                  }
                if (next == 'page_3')
                  {

                  }
                if (next == 'page_4')
                  {
                  $$('.blau').set('text', '....und die letzte ist?');
                  }
                if (next == 'page_5')
                  {
                  $$('.blau').set('text', 'Nur noch ein paar Daten:');
                  }
                });
            });
        </script>

HTML:

<form id="gewinnspiel" name="gewinnspiel" method="post" action="<?=$_SERVER[PHP_SELF]; ?>">
<div id="page_1"> 
    <div class="inhalt-gewinn">
      <div class="gewinn_bild"></div>
      <div class="gewinn_form">
              <div class="input_box">
                  <div><input type="radio" name="frage1" value="Kamille" /><span>Kamille</span></div>
                  <div><input type="radio" name="frage1" value="Kaktus" /><span>Kaktus</span></div>
                  <div><input type="radio" name="frage1" value="Krokus" /><span>Krokus</span></div>
              </div>
              <div class="submit_box"><a id="toggle_1" class="frage">nächste Frage...</a></div>
      </div>
      <div class="gewinn_werbung"></div>
    </div>
</div>

<div id="page_2">
    <div class="inhalt-gewinn">
      <div class="gewinn_bild"></div>
      <div class="gewinn_form">
          <div class="input_box">
              <div><input type="radio" name="frage2" value="Ringelblume" /><span>Ringelblume</span></div>
              <div><input type="radio" name="frage2" value="Rotklee" /><span>Rotklee</span></div>
              <div><input type="radio" name="frage2" value="Ringelkraut" /><span>Ringelkraut</span></div>
              </div>
              <div class="submit_box"><a id="toggle_2" class="frage">nächste Frage...</a></div>
      </div>
      <div class="gewinn_werbung"></div>
    </div>
</div>

<div id="page_3">
    <div class="inhalt-gewinn">
      <div class="gewinn_bild"></div>
      <div class="gewinn_form">
          <div class="input_box">
                <div><input type="radio" name="frage3" value="Enzian" /><span>Enzian</span></div>
                <div><input type="radio" name="frage3" value="Eisenkraut" /><span>Eisenkraut</span></div>
                <div><input type="radio" name="frage3" value="Eiche" /><span>Eiche</span></div>  
              </div>
              <div class="submit_box"><a id="toggle_3" class="frage">nächste Frage...</a></div>
      </div>
      <div class="gewinn_werbung"></div>
    </div>
</div>

<div id="page_4">
    <div class="inhalt-gewinn">
        <div class="gewinn_bild"></div>
        <div class="gewinn_form">
            <div class="input_box">
                  <div><input type="radio" name="frage4" value="Wollblume" /><span>Wollblume</span></div>
                  <div><input type="radio" name="frage4" value="Tulpe" /><span>Tulpe</span></div>
                  <div><input type="radio" name="frage4" value="Rose" /><span>Rose</span></div>
              </div>
              <div class="submit_box"><a id="toggle_4" class="frage">nächste Frage...</a></div>
      </div>
      <div class="gewinn_werbung"></div>
    </div>
</div>

<div id="page_5">
    <div class="inhalt-gewinn">
        <div class="gewinn_bild"></div>
        <div class="gewinn_form">
            <div class="input_box_ende">     
                <?php echo '<input name="date" type="hidden" value="', time(), '" />'; ?>
                <div class="nosee">eMail:<input name="email" type="text" id="email" value="<?=$_POST['email']; ?>" size="30" /></div>
                <div><span>Vorname:</span><input type="text" name="vorname" value="<?=$_POST['vorname']; ?>"/></div>
                <div><span>Nachname:</span><input type="text" name="nachname" value="<?=$_POST['nachname']; ?>"/></div>
                <div><span>Strasse:</span><input type="text" name="strasse" value="<?=$_POST['strasse']; ?>"/></div>
                <div><span>Ort:</span><input type="text" name="ort" value="<?=$_POST['ort']; ?>"/></div>
                <div><span>PLZ:</span><input type="text" name="plz" value="<?=$_POST['plz']; ?>"/></div>
                <div><span>eMail:</span><input type="text" name="imehl" value="<?=$_POST['imehl']; ?>"/></div>
            </div>
            <div class="submit_box"><input id="submit" name="senden" type="submit" value="Senden" /></div>
          </form>
        </div>
    </div>
</div>

все работает! спасибо за вдохновение!

0 голосов
/ 03 августа 2010

Вы можете использовать Ajax и передавать данные из формы в скрипт php, а затем загружать новую форму.Или вы можете передать аргумент (скрытый или нет) в файл:

<form action="form.php?p=1" method="post">
...
</form>

Скрытый параметр:

<form action="form.php" method="post">
<input type="hidden" value="4" name="p">
...
</form>

В зависимости от значения p вы загружаете правильную форму и выполняете действия с остальными данными.

0 голосов
/ 03 августа 2010

Загрузите ваш php-сайт внутри iframe на некоторой странице. URL этой страницы всегда останется.

0 голосов
/ 03 августа 2010

Если действие формы - form4.php, то вы не можете изменить какой URL отправляет форма. Тем не менее, вы можете выполнить перенаправление сразу после обработки данных поста по URL-адресу, по которому пользователь должен быть.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...