我的SESSION遇到了问题,当我用POST插入一些内容时会发生更改


I have trouble with my SESSION that change when i insert somethnig with POST

我在下面的代码中遇到了一些问题,我不知道它是如何将$level放入$_SESSION的。这个$level替换了我的用户$_SESSION['level'],然后他就注销了。

<?php
session_start();
if( $_POST['action'] == 'Add' ) {
    $level = $_POST['level'];
?>
<form action="<?php $_SERVER[PHP_SELF]; ?>" method="post" >
    <input type="text" name="level" value="" placeholder="Level" /><br />
    <input type="hidden" name="action" value="Add" />
    <input type="submit" value="Add user" />
</form>

我认为会话变量最常见的问题是忘记了文档顶部的session_start()。实际上,您已经将session_start()放在了它所属的位置,但您忘记定义会话变量:)

事情就是这样做的。

$_SESSION['level'] = $_POST['level'];

您的意思是将$level放入$_SESSION['level']中吗。您可以将$_SESSION变量视为一个数组,您必须在其中为键指定一个值。在您的情况下

$_SESSION['level'] = $_POST['level']
<?php
session_start();
if( $_POST['action'] == 'Add' ) {
    $_SESSION['level'] = ($_POST['level']) ? $_POST['level'] : null;
}
?>

然后你可以这样分配:

$level = isset($_SESSION['level']) ? $_SESSION['level'] : null;

此外,我建议用Class处理输入,这里有一个基本的类:

<?php
class Form
{
  public static function post($input)
  {
    return ($_POST[$input]) ? $_POST[$input] : false;
  }
}
?>

然后,当你有一个表单时,你不会得到一个未定义的变量,你可以像这样使用它:

Form::post('inputname');

if(Form::post('inputname') == 'add'):
  //passed
endif;

请注意:伪代码