使用php会话验证表单

时间:2013-11-27 05:27:51

标签: php forms validation session

我正在尝试使用php验证我的表单。验证后,它将发出欢迎消息。否则它将重定向到索引页面。我用session来保存变量。但是当我提交表单时,问题就不会发生了,这是我的脚本

<?php session_start();
    $_SESSION['reg'] = array();
    $name = $_POST['name'];
    $email = $_POST['email'];
    $passwd = $_POST['passwd'];
    $repasswd = $_POST['repasswd'];

if(empty($_POST)){
    header("location:register.php");
}
else
{
    if(empty($name)){
        $_SESSION['reg']['name'] = "Please enter name";
    }
    if(empty($email)){
        $_SESSION['reg']['email'] = "Please enter email";
    }
    if (empty($passwd)) {
        $_SESSION['reg']['passwd'] = "please enter a password";
    }
    elseif (strlen(passwd)>16) {
        $_SESSION['reg']['passwd'] = "At most 16 chars";
    # code...
    }
    if ($passwd != $repasswd) {
        $_SESSION['reg']['repasswd'] = "Passwords don't match";
    }
    if (empty($_SESSION['reg'])) {
        header("location:welcome.php");
    }
    else
    {
        $_SESSION['data'] = array();
        foreach($_POST as $id=>$val)
        {
            $_SESSION['data'][$id] = $val;

        }
        header("location:register.php");
    }

?>      

当我提交表单时,它会显示一个空白页面。

1 个答案:

答案 0 :(得分:1)

问题是如果在检查

之前它们不是空的,那么你不会将你的帖子变量存储到会话中
if (empty($_SESSION['reg'])) {

我强烈建议在将post变量放入会话范围之前进行一些sql注入预防。

更新:所以如果你想在会话范围内使用变量,而不是检查if(empty($name)){并在会话中设置错误消息,我会这样做:

if( !empty($name) ){
   $_SESSION['reg']['name'] = $name;
} else {
   // error handling
}

如果发布的值不为空,这将设置会话变量。现在,当您稍后检查会话变量时,它将具有名称值,并且不会为空。