2009-04-14 3 views
0

私のゲームの登録フォームは以下の通りです。ユーザーが行っている可能性のあるエラーを探していますが、エラーが見つかったとしても$errorsアレイに追加しません。私はprint_r配列を空に戻します。アレイは常に空に戻ってきます

if関数の1つの外側から配列に値を追加すると、関数が間違っていると思います。作成時に使用するアレイへのテストケースを追加する

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'); 

次に、print_rを実行したときにのみこの出力が表示された場合、if文が期待通りに動作していないことがわかります。

変数が入力時にどのような値を持っているのか、デバッグが難しいかについての詳細はありません。

おそらくあなたが思っている値を取得していることを確認するために$ _POST(print_r($ _ POST))のダンプを行います。

2

私がやるべき最初のことは、あなたの配列をキーで扱うことではありません。唯一のエラーが電子メールアドレスでない場合は、本当に唯一のエラーが '2'でインデックスされるようにしますか?

ユーザー$エラー[] =「何か...」した方が良い。

5

いくつかの簡単なポイント:

  • 一つの場所にあなたが$errors_array代わりの$errors
  • 代わりのインデックスを使用してを使用します配列に書き込む場合は、$errors[] = "some_error"を使用してください。これにより、配列末尾にsome_errorが追加されます。
1

1つのp $ errors_array ['0']を呼び出すと、$ errors [] = "Foo";を実行して配列に追加する必要があります。第二

文が実行されている場合、どのようなSafe SQL

第三チェックに見てください。声明は、あなたの場合のそれぞれにecho "1";を置きます(。。それぞれ配置するための1によってその数を増加し、あなたが実際に実行されているものを見ることができます(すべての場合))

8

最初に、あなたはこれを行う:

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

そして、あなたが$ username、$ password、etcなどの場合はチェックします。これは常に(あなたが初期化したので)真を返します。 $ _POST変数(作成した変数ではなくI.E.)でif(isset())を実行する必要があります。

実際のデータ(有効な電子メールアドレス、最小/最大のユーザー名の長さなど)をチェックするチェックを行わないため、すべてのチェックが完全に機能します。

このような問題を発見する簡単な方法は、error_reportingをE_ALLに設定することです。これにより、すべてのエラー/警告/通知/などが表示されます。存在しない/設定されていない変数を使用すると、警告が表示されます。

-1

私自身の問題を解決しました。私はif関数で "!isset"ではなく "empty"を使用していたはずです。次のように設定されているためです。

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

とにかく助けてくれてありがとう。

+1

これは質問の補足(編集)または解決/質問のコメントです。しかし確かに答えはありません。 – soulmerge

関連する問題