2012-02-24 107 views
2

我正在构建一个微站点,并且在密码重置行为时遇到了问题。调试PHP验证脚本

有一种形式要求用户输入两次密码。我不是密码纳粹,唯一的要求是密码超过5个字符。提交时,表单数据被添加到$ _POST数组中,并发送到我的站点范围的php函数脚本中的setPass函数。

功能是

function setPass(){ 
    $link= connectDB(); 

    $query= "select * from People where Username='" . $_SESSION['name'] . "' Limit 1"; 
    $result= $link->query($query); 

    if ($result->num_rows==0){ 
     $_SESSION['status']= 'invaliduser'; 
     header("location: ../index.php"); 
    } else { 
     $first = $_POST['firstPass']; 
     $second = $_POST['secondPass']; 

     if (($first == $second) && (strlen($first) > 5)){ 
      $password = sha1($first); 
     } 
    } 
} 

我要离开了本例中的数据库插入代码。

我的问题是,包含在页面主体中的此脚本echo $_SESSION['name'] . " and password: " . $first;会输出用户名,但会返回unidentified variable: first警告。当我尝试访问变量$password时,也会发生这种情况。

早期的测试表明,第一个条件是真实的,因为页面没有重定向。

那么,在else块中导致执行失败的原因是什么?

+0

我没有在你的代码中看到'echo'...你想在哪里“回声”?你是在你的'setPass'函数里面还是在外面? – 2012-02-24 19:17:52

+0

我在setPass函数所在的php页面中添加了一些HTML标头和主体标签。这就是echo标签所在的位置。 – Jason 2012-02-24 19:21:49

+0

是的,如果你想在'setPass'函数之外访问这些变量,那么你就超出了范围。使用全局变量或$ _SESSION,就像下面的答案一样。 – 2012-02-24 19:25:12

回答

4

由于您在setPass函数中设置了$first$password,因此它们在相同的主体外部不可用。

如果你想在外面使用它们,你应该使用global关键字,或者更好的办法是从函数返回值。

这个概念被称为范围的变量。这些变量在功能范围内有本地范围。请参阅here了解PHP中范围确定的全面描述。

2

你说你在回应脚本的内容?你在函数中定义了变量,所以除非你把它设置为全局变量(通常不是一个好主意,请参阅PHP global in functions),否则$第一个实际上不存在。