如何在PHP中保存$ _GET数组或将其内容保存更长时间?

时间:2014-03-01 00:56:50

标签: php html forms

我想区分网站上的几个不同的电话。

案例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']。 我该如何重置它?我用一个简单的布尔值尝试了它,但是没有用(不明白为什么)。

2 个答案:

答案 0 :(得分:2)

与其他人说的一样,您不需要每次都明确重置$_GET数组。

您遇到的问题是因为在提交表单时您没有传递$_GET['modifiziere_id']变量(如果存在)。

此逻辑确定脚本的访问方式(这仅与您的实现不同,因为我使用isset()检查变量是否已设置,以防id0 )。

<?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数组中。