2013-09-11 44 views
3

我是新來的PHP,當它涉及到會話我更是一個初學者。我有我的index.php頁面,這是用戶可以註冊和登錄的地方。的形式張貼到validate.php和loginvalidate.php頁,分別用於註冊和在登錄用PHP會議未定義指數

我對這些index.php的錯誤,當我打開它。

1)注意:未定義指數:註冊 2)注意:未定義指數:neverused

我試圖改變我的文字在許多方面,但我從來沒有得到解決的錯誤。

的index.php

<?php 
      if ($_SESSION['registered'] != NULL){ 
       echo $_SESSION['registered'];     
      } 
      if ($_SESSION['badlogin'] != NULL){ 
       echo $_SESSION['badlogin']; 
      } 
      if ($_SESSION['neverused'] != NULL) { 
       echo $_SESSION['neverused'];      
      } 
    ?> 

Validate.php

if (mysqli_num_rows($result) > 0) { //IF THERE IS A PASSWORD FOR THAT EMAIL IN DATABASE 
    $_SESSION['registered'] = "Email is already registered."; 
    mysqli_close($db_handle); 
    header('Location: index.php'); 
    exit(); 
} 

Loginvalidate.php(提交登錄表單之後)

if ($numrows!=0) //IF THERE IS A PASSWORD FOR THAT EMAIL IN THE DATABASE 
{ 
    if ($row['password'] == $password) { //IF THE PASSWORD MATCHES USER INPUT 
     header('Location: homepage.php'); 
     echo "lol"; 
     exit(); 
    } 
    else{ 
    $_SESSION['badlogin'] = "Email/password combination not valid."; 
    mysqli_close($db_handle); 
    header('Location: index.php'); 
    exit(); 
    } 
} 
else { //THERE IS NO PASSWORD FOR THAT EMAIL, SO THAT EMAIL IS NOT REGISTERED 
    $_SESSION['neverused'] = "Email is not registered."; 
    mysqli_close($db_handle); 
    header('Location: index.php'); 
    exit(); 
} 

好了,所以我的腳本(提交報名登記表後)做它打算做的事情。唯一不能解決的是這些會話錯誤。你有沒有看到濫用會話?當然,我已經開始了所有.php文件中的會話。

而且,請注意,我知道有黑客沒有保障。這僅適用於未包含任何重要數據的未來原型。

回答

11

原因這些錯誤是,你試圖讀取一個不存在的數組鍵。 isset()函數在那裏,所以你可以測試這個。對於每個元素,下面的內容都會起作用;有沒有必要爲null檢查,你從來沒有分配到空的元素:

// check that the 'registered' key exists 
if (isset($_SESSION['registered'])) { 

    // it does; output the message 
    echo $_SESSION['registered']; 

    // remove the key so we don't keep outputting the message 
    unset($_SESSION['registered']); 
} 

你也可以使用它在一個循環:

$keys = array('registered', 'badlogin', 'neverused'); 

//iterate over the keys to test 
foreach($keys as $key) { 

    // test if $key exists in the $_SESSION global array 
    if (isset($_SESSION[$key])) { 

     // it does; output the value 
     echo $_SESSION[$key]; 

     // remove the key so we don't keep outputting the message 
     unset($_SESSION[$key]); 
    } 
} 
4

如果您收到未定義的索引錯誤,你可以嘗試確保你嘗試比較值之前,你的索引設置。查看文檔這裏isset功能: http://php.net/manual/en/function.isset.php

if (isset($_SESSION['registered'])) 
    if ($_SESSION['registered'] != NULL){ 
     echo $_SESSION['registered'];     
    } 
} 
if (isset($_SESSION['badlogin'])) 
    if ($_SESSION['badlogin'] != NULL){ 
     echo $_SESSION['badlogin']; 
    } 
} 
if (isset($_SESSION['neverused'])) 
    if ($_SESSION['neverused'] != NULL) { 
     echo $_SESSION['neverused'];      
    } 
} 
+0

它的工作原理!我試圖檢查會話變量與設置,如果($ _SESSION [ 'X']!= NULL,而不是與如果(isset($ _ SESSION [ 'X']))。我有很好的邏輯,但錯誤的語法。非常感謝你。 – LPB