我可以从第二个表单提交并保留第一个表单中的POST数据吗?

时间:2012-01-11 01:19:08

标签: php post

希望我能让它变得更加困难。这就是我想要做的。我有一个表单执行POST并返回数据。我有第二种形式,然后根据第一种形式的数据向用户询问是/否问题。是否可以从第一个表单提交中捕获POST数据并将其与第二个表单POST一起传递?

这是我的方案

if ($_POST['button_1']) {
    $params = $_POST;
    print_r($_POST);

    // process form data
}
if ($_POST['button_2']) {
    // Retain the POST data from the first submission
    $new_params = $params . $_POST;
    print_r($new_params);

    // process form data and do some additional stuff
}

<form id="form_1" action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
...
<input type="submit" value="Button" name="button_1" id="button_1"/>
</form>

<form id="form_2" action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
...
<input type="submit" value="Button" name="button_2" id="button_2"/>
</form>

有没有办法轻松做到这一点,还是我过度复杂?

4 个答案:

答案 0 :(得分:0)

有几种方法可以“伪造”这个。

  1. 让第一个表单提交给自己并加载$ _REQUEST变量并使用它们用适当的数据/选项填充第二个表单。

  2. 第一个提交后,通过ajax加载第二个表单,并使用javascript获取当前表单变量并将它们提供给ajax函数。

  3. 您更喜欢哪种方法?

    <强>更新: 这很长,但是一个有效的例子

    <!DOCTYPE html>
    <html>
        <body>
            <form name="first" method="post">
                <input type="hidden" name="action" value="firstformdone">
                <div style="width:100px;float:left;">
                    Age:
                </div>
                <div style="width:200px;float:left;margin-left:20px;">
                 <input type="text" name="age">
                </div>
                <div style="clear:both;"></div>
                <div style="width:100px;float:left;">
                    Name:
                </div>
                <div style="width:200px;float:left;margin-left:20px;">
                 <input type="text" name="name">
                </div>
                <div style="clear:both;"></div>
                <br>
                <?PHP
                    if (!$_REQUEST['action'] == "firstformdone") {
                ?>
                <input type="submit" value="contine">
                <?PHP
                    }
                ?>
            </form>
            <?PHP
                if ($_REQUEST['action'] == "firstformdone") {
            ?>
            <form name="second" action="something_else.php" method="post">
                <input type="hidden" name="age" value="<?PHP echo $_REQUEST['age']; ?>">
                <input type="hidden" name="name" value="<?PHP echo $_REQUEST['name']; ?>">
                <div style="width:150px;float:left;">
                    Preferred games:
                </div>
                <div style="width:200px;float:left;margin-left:20px;">
                    <select name="games">
                        <option value="">Select games</option>
                        <?PHP
                            if ($_REQUEST['age'] <= 10) {
                        ?>
                        <option value="tlddlywinks">Tiddly Winks</option>
                        <option value="Jacks">Jacks</option>
                        <option value="Go-Fish">Go-Fish</option>
                        <option value="Hid-And-Go-Seek">Hid-And-Go-Seek</option>
                        <?PHP
                            } else {
                        ?>
                        <option value="Halo">Halo</option>
                        <option value="StarWars">The Old Republic</option>
                        <option value="LaserTag">Laser Tag</option>
                        <option value="spin-the-bottle">spin-the-bottle</option>
                        <?PHP
                            }
                        ?>
                    </select>
                </div>
                <div style="clear:both;"></div>
                <br>
                <input type="submit" value="Next!">
            </form>
            <?PHP
                }
            ?>
        </body>
    </html>
    

答案 1 :(得分:0)

您需要打包第一个表单中的数据以重新提交。使用隐藏字段:

foreach ($_POST as $key=>$value) {
    print "<input type='hidden' name='".htmlspecialchars($key, ENT_QUOTES, "UTF-8")." value='".htmlspecialchars($value, ENT_QUOTES, "UTF-8")."'>";
}

答案 2 :(得分:0)

您可以在第二种形式或会话中使用隐藏字段。从这里开始阅读: http://www.php.net/manual/en/book.session.php

答案 3 :(得分:0)

是的,标准方法是使用 type =“hidden”字段将此上下文数据传递到第二个表单。有很多有用的例子可以看看如何做到这一点。查看此HTML页面的源代码或其他包含表单的HTML页面,并搜索“隐藏”以查看应用程序如何执行此操作。