[英]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.