簡體   English   中英

數組總是返回為空

[英]Array always comes back as empty

以下是我的游戲注冊表格,它正在尋找用戶可能已做的錯誤,但是即使發現錯誤,也不會將其添加到$errors數組中。 當我print_r數組時,它返回空。

我相信if函數會出問題,因為如果我從if函數之一之外的數組中添加一個值,它將添加它。

這是我的代碼:

if (isset($_GET['action'])){
db_connect();
db_select();

if ($_GET['action'] == "register"){
  $username = $_POST['username'];
  $password = $_POST['password'];
  $confirm = $_POST['confirm'];
  $email = $_POST['email'];
  $agree = $_POST['agree'];

  $errors = array();
  if (!isset($username)){
    $errors['0'] = "You did not specifiy a username";
  }elseif (ereg("[^a-z0-9]", $username)) {
    $errors_array['0'] = "Usernames can only contain lowercase letters and numbers";
  }elseif (mysql_num_rows(mysql_query("SELECT username FROM users WHERE username = '{$username}'")) > 0) {
    $errors['0'] = "The username you chose has already been taken";
  }

  if (!isset($password)){
    $errors['1'] = "You did not specify a password";
  }elseif ($password != $confirm){
    $errors['1'] = "The password and password confirm fields do not match";
  }

  if (!isset($email)){
    $errors['2'] = "You did not specify a E-mail address";
  }elseif (mysql_num_rows(mysql_query("SELECT email FROM users WHERE email = '{$email}'")) > 0) {
    $errors['2'] = "The E-mail you specified is already being used";
  }
  print_r($errors);
  }
}

首先,您需要這樣做:

$username = $_POST['username'];
$password = $_POST['password'];
$confirm = $_POST['confirm'];
$email = $_POST['email'];
$agree = $_POST['agree'];

然后檢查$ username,$ password等isset()。 這將始終返回true(因為您剛剛對其進行了初始化)。 您應該對$ _POST變量(即不是您創建的變量)執行if(isset())。

因此,所有檢查都將完美執行,因為您無需進行任何檢查實際數據的檢查(有效的電子郵件地址,最小/最大用戶名長度等)。

發現此類問題的一種簡單方法是將error_reporting設置為E_ALL。 這將顯示所有錯誤/警告/通知/等。如果您使用的變量不存在/尚未設置,則會給您警告。

一些要點:

  • 在一個地方,您使用$errors_array而不是$errors
  • 使用$errors[] = "some_error"而不是在寫入數組時使用索引。 這會將some_error添加到數組的末尾。

好吧,我要做的第一件事不是通過鍵尋址數組。 如果唯一的錯誤是沒有電子郵件地址,那么您真的希望唯一的錯誤以“ 2”索引嗎?

最好使用$ error [] ='Something ...“;

嘗試在創建時向陣列添加測試用例。

$errors = array('test'=>'Test');

然后,如果僅在print_r時收到此輸出,則知道if語句沒有按預期工作。

如果沒有更多有關變量具有什么值的信息,則很難調試。

可能要轉儲$ _POST(print_r($ _ POST)),以確保獲得了您認為的值。

在一個地方,您正在調用$ errors_array ['0'],應該通過執行$ errors [] =“ Foo”將其添加到數組中。

2請查看安全SQL

第三步檢查if語句是否正在運行。 放置echo "1"; 放入您的每個if語句中(並為每個展示位置將該數字加1。然后您可以查看實際運行的內容。(如果有的話))

解決了我自己的問題,我應該在if函數中使用“空”而不是“!isset”。 因為它們的設置如下所示:

$username = $_POST['username'];
$password = $_POST['password'];
$confirm = $_POST['confirm'];
$email = $_POST['email'];
$agree = $_POST['agree'];

無論如何,謝謝您的幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM