2012-11-28 116 views
0

我是PHP脚本编程新手,来自Java背景。这是一件微不足道的事情,到现在为止我已经变成了一个谜题。所以这里是问题所在,我给变量赋了一些值,当试图在if/else语句中使用该值时,该变量实际上并未拥有先前分配的值。下面是代码: -当在PHP中的if/else语句中访问时变量超出范围

<?php 
    session_start(); 

    $email = $_POST["Email"]; 
    $password = $_POST["Password"]; 

    $db_username="root"; 
    $db_password="root"; 
    $database="mydb"; 
    $localhost = "mysql"; 

    $con = mysql_connect($localhost,$db_username,$db_password); 
    mysql_select_db($database,$con) or die("Unable to select database"); 

    $query = "select * from photobook.users where email ='$email' and password ='$password';" ; 

    $result = mysql_query($query); 

    $num=mysql_num_rows($result); 

    if($num == 1){ 
     while($row = mysql_fetch_array($result)) 
      { 
       $_SESSION['email'] = $row['email']; 

       $_SESSION['username'] = $row['username']; 
      } 

     header("location: home.php"); 

    } 

    else{ 

     include "photoBookProtocol.php"; 

       print "<br>email value after photobookprotocol file include is $email"; 
       print "<br>password value after photobookprotocol file include is $password"; 

     $obj=new Protocol(); 

     $var = $obj->loginCheck($email,$password); 

       print "value of var received is $var"; 

     if($var == 0){ 
      session_destroy(); 
         print "<br>user does not exist"; 
      //header("location: login.php"); 
     } 
     else{ 
      $_SESSION['email'] = $var[0]; 
      $_SESSION['username'] = $var[1]; 
      print "<br>user exists"; 
      header("location: home.php"); 

     } 
    } 

    mysql_close($con); 
?> 

所以,当我通过里面的“其他”子句中loginCheck的$ email和$密码($电子邮件,$密码)没有什么过去了。任何想法为什么发生这种情况?

+0

你怎么知道没有什么传递? – melpomene

+0

'photoBookProtocol.php'是否覆盖变量?所有看起来都对我好。 –

+0

无论出现什么错误 - 您需要了解如何防止SQL注入 - https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet – Laurence

回答

1

没有什么不对您的变量范围,所以无论是:

  • 没有什么在POST数据
  • 将包括覆盖两个变量
  • loginCheck()接收到正确的变量,但有功能中的一个错误

作为一个方面说明,由于您的脚本依赖于POST数据,您应该有一个条件来检查是否需要数据存在之前继续:

if(isset($_POST['Email'], $_POST['Password'])) 
{ 
    // something posted 
} 
+0

感谢您的回答,但作为@Mike de Klerk上面评论说,这是包含文件覆盖变量。谢谢大家。赞赏:) – user1371033

+1

......这就是MrCode所说的:“*包含覆盖了两个变量” – melpomene

+0

@ user1371033这是令人兴奋的,我的回答说:) – MrCode