我想区分网站上的几个不同的电话。
案例1.)直接访问页面,然后填写并提交表格 案例2.)按照特殊链接访问该页面 案例3.)在关注特殊链接后访问该页面,然后提交表格
if (($_POST['gesendet']) && (!$_GET['modifiziere_id'])) {
//should be entered only when I submit the form
...
// comes here after following a link and then submiting the form
} elseif ((!$_POST['gesendet']) && ($_GET['modifiziere_id'])) {
//should be entered, when I came to this site following a link
...
} elseif (($_POST['gesendet']) && ($_GET['modifiziere_id'])) {
//should be entered, after I came to this site following a link and then submit the form
...
// but it's not.
} else {
// should be entered when I load the page directly
}
?>
提交以下表格后,我想输入案例1
<form method="post" action="<?php print $_SERVER['PHP_SELF'] ?>">
....
<input type="submit" value="Senden" name="gesendet" />
案例2的链接是:
print '<td><a href="teilnehmer_bearbeiten.php?modifiziere_id='.$id.'">Bearbeiten</a></td>'."\n";
在我成功输入案例2后,我想保存$ _GET数组,以便我可以提交表单并输入案例3.相反,我总是来到案例1,所以$ _GET ['modifiziere_id']不是再也没有了。不应重置$ _GET ['modifiziere_id']。 我该如何重置它?我用一个简单的布尔值尝试了它,但是没有用(不明白为什么)。
答案 0 :(得分:2)
与其他人说的一样,您不需要每次都明确重置$_GET
数组。
您遇到的问题是因为在提交表单时您没有传递$_GET['modifiziere_id']
变量(如果存在)。
此逻辑确定脚本的访问方式(这仅与您的实现不同,因为我使用isset()
检查变量是否已设置,以防id
为0
)。
<?php
if (isset($_POST['gesendet']) && !isset($_GET['modifiziere_id'])) {
// Came to site and submitted form.
// ...
} elseif (!isset($_POST['gesendet']) && isset($_GET['modifiziere_id'])) {
// Came to site following the link
// ...
} elseif (isset($_POST['gesendet']) && isset($_GET['modifiziere_id'])) {
// Came to site following the link and submitted the form
// ...
} else {
// Came to site directly
// ...
}
?>
在打印表单之前,您需要确定将表单提交到的位置。如果存在$_GET['modifiziere_id']
,您还希望它位于提交表单的URL中。因此,如果他们通过链接访问,则表单action
应为teilnehmer_bearbeiten.php
,但如果他们点击该链接则应为teilnehmer_bearbeiten.php?modifiziere_id=<id>
。有很多方法可以做到这一点,这里有两个:
// Build the location where the form will be submitted
$form_action = $_SERVER['PHP_SELF'];
if (isset($_GET['modifiziere_id'])) {
$form_action .= '?modifiziere_id=' . $_GET['modifiziere_id'];
}
更简单的替代方法是简单地传递用于进入当前页面的确切内容:
// Build the location where the form will be submitted
$form_action = $_SERVER['PHP_SELF'] . $_SERVER['QUERY_STRING'];
无论您选择哪一个,您现在都有足够的信息来构建表单。小心使用$_SERVER['PHP_SELF']
本身,you may be exposed to an injection attack。
<form method="post" action="<?php print htmlentities($form_action) ?>">
<input type="submit" value="Senden" name="gesendet" />
</form>
修改:更新答案以使用isset()
答案 1 :(得分:0)
每次加载页面时,都会创建一个新的$ _GET数组,因此您根本不需要重置它!只要您从URL中删除任何您不想要的参数(例如删除modifiziere_id),它就不会出现在下一个$ _GET数组中。