希望我能让它变得更加困难。这就是我想要做的。我有一个表单执行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>
有没有办法轻松做到这一点,还是我过度复杂?
答案 0 :(得分:0)
有几种方法可以“伪造”这个。
让第一个表单提交给自己并加载$ _REQUEST变量并使用它们用适当的数据/选项填充第二个表单。
第一个提交后,通过ajax加载第二个表单,并使用javascript获取当前表单变量并将它们提供给ajax函数。
您更喜欢哪种方法?
<强>更新: 这很长,但是一个有效的例子
<!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页面,并搜索“隐藏”以查看应用程序如何执行此操作。