2009-04-14 2 views
0

Ниже представлена ​​моя регистрационная форма для моей игры, и она ищет ошибки, которые пользователь мог сделать, но даже если обнаружена ошибка, она не добавит ее в массив $errors. Когда I print_r массив возвращается пустым.Array всегда возвращается как пустой

Я считаю, что что-то не так с функциями 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); 
    } 
} 

ответ

1

попробуйте добавить тестовый пример в массиве по созданию.

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

Тогда, если вы получаете этот вывод только тогда, когда вы печатаете_r, вы знаете, что ваши операторы if работают как ожидалось.

Без дополнительной информации о том, какие значения имеют переменные при вводе, трудно отлаживать.

Возможно, сделайте сброс $ _POST (print_r ($ _ POST)), чтобы убедиться, что вы получаете значения, которые, по вашему мнению, вы есть.

2

Ну, первое, что я сделал бы, это не обращаться к вашим массивам по клавишам. Если единственной ошибкой не является адрес электронной почты, вы действительно хотите, чтобы единственная ошибка была проиндексирована '2'?

Лучше пользователя $ ошибок [] = «Что-то ...";

5

Несколько быстрых точек:

  • В одном месте вы используете $errors_array вместо $errors
  • Вместо использования индексов при запись в массиве, используйте $errors[] = "some_error". Это добавит some_error до конца массива.
1

в одном из р кружева там вы вызываете $ errors_array ['0'], вы должны добавить в массив, выполнив $ errors [] = "Foo";

второй, пожалуйста, смотрите в Safe SQL

3 проверки, что если операторы работает. Поместите echo "1"; в каждую из ваших, если заявления (.. И увеличения этого числа на 1 для каждого размещения Тогда вы можете увидеть, что на самом деле работает (если вообще))

8

Сначала вы делаете это:

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

И затем вы проверяете, есть ли $ username, $ password и т. Д. Isset(). Это всегда будет возвращать true (потому что вы только что инициализировали их). Вы должны сделать if (isset()) для переменных $ _POST (I.E. не созданные вами переменные).

Из-за этого все ваши проверки будут работать отлично, потому что вы не делаете никаких проверок, которые проверяют фактические данные (действительный адрес электронной почты, минимальное имя пользователя и т. Д.).

Простым способом обнаружения таких проблем является установка error_reporting для E_ALL. Это покажет все ошибки/предупреждения/уведомления/и т. Д. Это даст вам предупреждение, если вы используете переменную, которая не существует/не была установлена.

-1

Решил мою собственную проблему, я должен был использовать «пустые», а не «! Isset» в моих if-функциях. поскольку они были установлены как показано ниже:

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

Спасибо за помощь в любом случае.

+1

Это либо добавление (изменение) к вопросу, либо комментарий к решению/вопросу. Но определенно не ответ. – soulmerge

Смежные вопросы