2012-11-28 94 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