2013-02-18 17 views
0

我遇到變量問題。似乎我必須在使用它之前始終初始化$ variable。這非常刺激。 $ username_check = mysql_num_rows($ sql_username_check);在這裏它說:注意:未定義的變量:username_check在c:// 注意:未定義的變量:email_check在c:// 我正在檢查db中的重複數據。這是可惜的是添加相同的數據:( 有人可以幫我這個使用mysql_num_rows時的udefined變量

// Database duplicate Fields Check 
     $sql_username_check = mysql_query("SELECT user_id FROM users WHERE user_username='$username' LIMIT 1"); 
     $sql_email_check = mysql_query("SELECT user_id FROM users WHERE user_email='$email' LIMIT 1"); 
     if($sql_username_check != "") 
      if(isset($username_check)) 
       $username_check= mysql_num_rows($sql_username_check); 
     if($sql_email_check != "") 
      if(isset($email_check)) 
       $email_check = mysql_num_rows($sql_email_check); 
     if ($username_check > 0){ 
      $errorMsg = "<u>ERROR:</u><br />Your User Name is already in use inside of our system. Please try another."; 
     } 
     else if ($email_check > 0){ 
      $errorMsg = "<u>ERROR:</u><br />Your Email address is already in use inside our system. Please try another."; 
     } 
+0

我用isset變量,但它不工作:( – Angelina 2013-02-18 19:39:10

+1

停止你正在使用過時的API切換到庫MySQLi或PDO(有人會複製粘貼通常的評論,但我沒有減價...) – Amelia 2013-02-18 19:44:57

回答

-1

你需要在PHP調整錯誤報告設置,例如像這樣:。

error_reporting (E_ALL & ~E_NOTICE & ~E_STRICT); 
+2

可怕的建議。代碼應該確實不會有這些通知。他們在那裏是有原因的,並且通常是由於錯誤的編碼習慣和/或錯誤的代碼執行路徑,關閉錯誤不會使代碼正常工作 – 2013-02-18 19:48:17

0

你已經得到了一些真是奇怪的代碼,但你可以試試這個:

$sql_username_check = mysql_query("SELECT user_id FROM users WHERE user_username='$username' LIMIT 1"); 
    $sql_email_check = mysql_query("SELECT user_id FROM users WHERE user_email='$email' LIMIT 1"); 

    if($sql_username_check) 
     $username_check= mysql_num_rows($sql_username_check); 

    if($sql_email_check) 
     $email_check = mysql_num_rows($sql_email_check); 

    if (isset($username_check) && $username_check > 0){ 
     $errorMsg = "<u>ERROR:</u><br />Your User Name is already in use inside of our system. Please try another."; 
    } else if (isset($email_check) && $email_check > 0){ 
     $errorMsg = "<u>ERROR:</u><br />Your Email address is already in use inside our system. Please try another."; 
    } 
+0

哈哈哈,謝謝你們,我放棄了並初始化了兩個變量,但是這是我使用它們的唯一地方 – Angelina 2013-02-18 19:52:16

0

這個問題似乎從這裏開始:

$sql_username_check = mysql_query("SELECT user_id FROM users WHERE user_username='$username' LIMIT 1"); 
$sql_email_check = mysql_query("SELECT user_id FROM users WHERE user_email='$email' LIMIT 1"); 

函數調用不返回字符串,因此下面的比較沒有做你認爲他們正在做的事情。造成錯誤的行可能是這些:

if ($username_check > 0){ 
     $errorMsg = "<u>ERROR:</u><br />Your User Name is already in use inside of our system. Please try another."; 
    } 
    else if ($email_check > 0){ 
     $errorMsg = "<u>ERROR:</u><br />Your Email address is already in use inside our system. Please try another."; 
    } 

從我從你的例子我能讀;噸認爲,其中$username_check$email_check此處將設置任何辦法,這樣你就不會得到這些通知) 。

您真正需要做的是瞭解如何使用數據庫中的結果集,包括數據庫錯誤處理。

當你在看完了,你應該繼續和轉儲你的mysql_*功能的使用,因爲它們已被棄用,並學習使用mysqliPDO這是最流行的首選數據庫庫在PHP中使用。

+0

我很抱歉,但我仍然是一名學生。沒有人教我有關好的或不好的做法。我向你這樣的人學習如何做。感謝你的幫助。 – Angelina 2013-02-18 19:54:29

+0

@Angelina沒問題。我建議你看一下mysqli,因爲它與'mysql_ *'語法最相似(如果你以過程方式使用它,反正我會建議嘗試學習如何使用它或PDO以面向對象的方式) 。確保您瞭解每個函數/方法調用的返回值來自文檔。如果你甚至看到'mysql_query'文檔,你會意識到試圖比較函數結果和空字符串不是你應該做的。 – 2013-02-18 19:57:03

+0

@Angelina還要確保爲函數調用的所有可能性提供代碼分支。例如,在使用SELECT語句的'mysql_query'上,可能的函數結果爲false(出錯)或包含結果集的資源。你應該有代碼來處理'false'情況以及'resource'情況。 – 2013-02-18 20:00:26

0
if(isset($username_check)) 

這是$username_check被分配之前使用,這就是爲什麼通知有。

嘗試這樣的代碼:。

$sql_username_check = mysql_query("SELECT user_id FROM users WHERE user_username='$username' LIMIT 1"); 
     $sql_email_check = mysql_query("SELECT user_id FROM users WHERE user_email='$email' LIMIT 1"); 
     if($sql_username_check != "") 
      $username_check= mysql_num_rows($sql_username_check); 
     if($sql_email_check != "") 
      $email_check = mysql_num_rows($sql_email_check); 
     if ($username_check > 0){ 
      $errorMsg = "<u>ERROR:</u><br />Your User Name is already in use inside of our system. Please try another."; 
     } 
     else if ($email_check > 0){ 
      $errorMsg = "<u>ERROR:</u><br />Your Email address is already in use inside our system. Please try another."; 
     }