【问题标题】:Form over several pages - URL should remain多页表格 - 网址应保留
【发布时间】:2010-08-03 16:25:42
【问题描述】:

不知道我的英语是否足以解释这一点: 我已经制作了一个需要 4 或 5 页的表格,直到最终提交。 每次更改时,帖子都会作为隐藏字段添加到新页面并调用新脚本。

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

我的问题是我不希望浏览器显示新脚本的 url,最好将其保留在原始 url。

我不知道在 google 或此处搜索解决方案的正确术语。也许你可以给我一个提示如何做到这一点?

【问题讨论】:

    标签: php forms url


    【解决方案1】:

    另一种选择是通过相同的脚本分阶段处理表单。

    <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。

    【讨论】:

    • 2 这个建议的问题:第一个:我想我必须在提交到隐藏字段时写入新的 form_stage 值?第二:到目前为止,我将以前页面的结果存储在隐藏字段中。这种方法我不知道我怎么能在这里完成......我不想在会议上走这条路。
    • @Arweb 最好将数据存储在会话中。要允许用户同时打开多个表单,您可以传递对话 id,就像传递页面一样。
    • 在会话中存储中间数据是一种选择,但您必须小心,如果用户开始填写表单的两个副本,则两个不同的副本不会相互影响.如果您需要防范这种情况,您必须在会话 AND 表单中采取特殊步骤来识别数据的哪个副本在哪里,或者在用户进行操作时将所有内容存储在隐藏字段中。
    【解决方案2】:

    如果表单的操作是form4.php,那么您不能更改表单发布到的URL。但是,您可以在处理完帖子数据后立即重定向到您希望用户所在的 URL。

    或者,您可以更改表单操作,以便它们都发布到同一页面,并且只允许在您的 PHP 中发布多种类型。

    【讨论】:

    • 当我转到表单的第二个站点时,我将第一个站点的结果存储在隐藏字段中。如果我进行重定向,我猜我的隐藏字段丢失了?
    【解决方案3】:

    您可以使用 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 值,您可以加载正确的表单并处理其余数据。

    【讨论】:

    • 一个非常优雅的解决方案,但到目前为止,我使用 ajax 只是为了在某些 div 容器中显示一些额外的内容,而不是更改表单......但是感谢您的建议
    【解决方案4】:

    在某个页面的iframe 中加载您的 php 站点。此页面的 url 将始终保留。

    【讨论】:

    • 这对我来说听起来是最实用的解决方案,但由于我从未使用过 iframe,所以我脑子里有一个可怕的结......我想表单的第一页必须在 iframe 中如果我更改为下一页,它会在不更改 url 的情况下加载到里面?
    【解决方案5】:

    认为我找到了另一个解决方案并想分享它:

    switch 的解决方案和 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>
    

    一切正常!谢谢你的灵感!

    【讨论】:

      猜你喜欢
      • 2018-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-22
      • 1970-01-01
      • 2020-08-13
      • 1970-01-01
      • 2013-05-07
      相关资源
      最近更新 更多