【问题标题】:I need to have a form be filled out, go to a page chosen in a drop down then use the other info from the form to populate the chosen page我需要填写表格,转到下拉列表中选择的页面,然后使用表格中的其他信息填充所选页面
【发布时间】:2011-01-26 03:54:31
【问题描述】:

根据您在表单下拉列表中选择的内容,我已经针对 taking info put into a form and using it to populate a pageredirect you to a page when you submit the form 提出了两个问题。现在我需要这两件事都适用于同一个表单。

从表单中获取信息并使用它来填充下一页的代码是:

<?php
$firstname = $_GET['personsName'];
echo "My Name is" .$firstname;
?>

表格看起来像这样:

<form action="letter.php" method="get">
<input type="text" name="personsName"></input>
<input type="submit" value="submit">
</form>

选择页面的代码是:

$pages = array('Page 1' => 'page1.php', 'Page 2' => 'page2.php', 'Page 3' => 'page3.php');

if (array_key_exists($_POST['dropdown-name'], $pages)) {
header("Location: " . $pages[$_POST['dropdown-name']]);
} else {
echo "Error processing form"; // submitted form value wasn't in your array, perhaps a hack attempt
}

我需要这两个都适用于同一个表单,我只是无法弄清楚。我尝试的是:

<form action="<?=$pages?>" method="POST">
<input type="text" name="name" /><br />
<select name="letter">

<option value="Page 1">
Page 1
</option>

<option value="Page 2">
Page 2
</option>

<option value="Page 3">
Page 3
</option>

</select>
<input type="submit" value"Print" />
</form>

这显然是错误的。我需要这个表单来获取放入其中的信息,重定向到所选页面,然后使用输入到表单中的其他信息填充页面。问题是我不知道如何得到我已经得到的答案。感谢大家的帮助!

当前代码是这样的:

<script type="text/javascript">
$(function UpdateFormAction(){
alert('Launched event handler');
var form = document.getElementById('MyForm');
var list = document.getElementById('PageList');
alert('List item numer ' + list.selectedIndex);
var desiredAction = list.options[list.selectedIndex].value
alert('Desired action set to ' + desiredAction);
form.action = desiredAction;
});
</script>

形式是:

<form id="MyForm" action="letter.php" method="POST">
<input type="text" name="name" /><br />
<select id="PageList" name="letter" onchange="UpdateFormAction();">

<option value="letter.php">Page 1</option>
<option value="letter2.php">Page 2</option>
<option value="letter3.php">Page 3</option>
</select>
<input type="submit" value"Print" />
</form>

【问题讨论】:

    标签: php forms redirect populate


    【解决方案1】:

    您在执行重定向时会丢失发送到服务器的数据。

    基本上,您有 3 个选项:

    • 使用 cookie 或类似的方式将数据存储在客户端(简单的事情会产生很多开销)
    • 将数据服务器端存储在会话或类似的(甚至更多开销)中
    • 通过您要重定向到的 URL 传递数据...

    比如:

    if (array_key_exists($_POST['dropdown-name'], $pages)) {
        header("Location: " . $pages[$_POST['dropdown-name']] . "?personsName=" urlencode($_POST['name']));
    } else {
        //Blah
    }
    

    这似乎是您简单示例的最佳答案。如果有大量数据或更复杂的数据,请考虑使用上述其他 2 个选项之一

    注意:在表单上,​​您将变量称为 name,在接收它的 pae 上,您将其称为 personsName - 请注意 URL 中从一个到另一个的映射。

    Javascript 解决方案(已测试):

    <html>
        <head>
            <title>SO Demo</title>
        </head>
        <body>
    
        <script type="text/javascript">
            function UpdateFormAction(){
                var form = document.getElementById('MyForm');
                var list = document.getElementById('PageList');
                var desiredAction = list.options[list.selectedIndex].value
                form.action = desiredAction;
                document.getElementById('Target').innerHTML = 'Form action set to: ' + desiredAction;
            }
        </script>
    
        <form id="MyForm" action="letter.php" method="POST">
            Name: <input type="text" name="name" /><br />
            Page: <select id="PageList" name="letter" onchange="UpdateFormAction();">
                <option value="letter.php">Page 1</option>
                <option value="letter2.php">Page 2</option>
                <option value="letter3.php">Page 3</option>
            </select>
            <input type="submit" value="Print" /><br/>
            <span id="Target">Form action unmodified</span>
        </form>
        </body>
    </html>
    

    【讨论】:

    • 在实际形式中,我将获得 10 条信息来填充重定向页面。用这种方法是不是太过分了?
    • URL 的长度是有限制的(IE6 为 1024 个字符,如果我没记错的话,所有后来/更现代的浏览器至少为 4096 个字符),因此这取决于数据是什么。简单的输入字段应该没问题,但大文本区域可能是个问题。
    • 哦,当然,您可以使用一些简单的 javascript,以便在更改下拉列表时,表单的 action 更改为相应的页面 - 这样就没有 PHP 步骤了中间然后你直接提交到想要的页面。
    • 这将是完美的,javascript 解决方案!你能给我一个简单的例子吗?
    • 我刚刚将它重构为一个函数以提高可读性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 2019-07-24
    • 2015-08-13
    • 1970-01-01
    相关资源
    最近更新 更多