2009-04-14 8 views
0

Ci-dessous est mon formulaire d'inscription pour mon jeu et il est à la recherche d'erreurs que l'utilisateur a pu faire, mais même si une erreur est trouvée, il ne sera pas ajouter sur le tableau $errors. Lorsque je print_r le tableau retourne vide.Tableau revient toujours vide

Je crois que quelque chose ne va pas avec les fonctions if parce que si j'ajoute une valeur dans le tableau de l'extérieur d'une des fonctions if, il l'ajoute.

Voici mon code:

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

Répondre

1

essayer d'ajouter un test à votre tableau sur la création. Ensuite, si vous recevez cette sortie uniquement lorsque vous imprimez, vos instructions if ne fonctionnent pas comme prévu.

Sans plus d'informations sur les valeurs que les variables ont à l'entrée, il est difficile de déboguer. Peut-être faire un vidage de $ _POST (print_r ($ _ POST)) pour vous assurer que vous obtenez les valeurs que vous pensez que vous êtes.

2

Eh bien, la première chose que je ferais n'est pas d'adresser vos tableaux par clé. Si la seule erreur est une adresse email, voulez-vous vraiment que la seule erreur soit indexée par '2'?

mieux à l'utilisateur $ error [] = « Quelque chose ...";

5

Quelques points rapides:

  • Dans un endroit que vous utilisez $errors_array au lieu de $errors
  • Au lieu d'utiliser les index lorsque en écrivant dans le tableau, utilisez $errors[] = "some_error" Cela ajoutera some_error à la fin du tableau
1

Dans un p dentelle là vous appelez $ errors_array ['0'], vous devriez ajouter dans le tableau en faisant $ errors [] = "Foo";

2 s'il vous plaît regarder dans Safe SQL

3 vérifier si les déclarations sont en cours d'exécution. Placez echo "1"; dans chacune de vos instructions if (.. Et incrémenter ce numéro de 1 pour chaque placement Ensuite, vous pouvez voir ce qui est réellement en cours d'exécution (le cas échéant))

8

D'abord, vous faites ceci:

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

Et puis vous vérifiez si $ nom d'utilisateur, $ mot de passe, etc isset(). Cela retournera toujours vrai (parce que vous venez de les initialiser). Vous devriez faire le if (isset()) sur les variables $ _POST (I.E. pas les variables que vous avez créées). Pour cette raison tous vos contrôles fonctionneront parfaitement, parce que vous ne faites aucun contrôle qui vérifie les données réelles (adresse e-mail valide, longueur de nom d'utilisateur min/max, etc.).

Une manière simple de découvrir des problèmes de ce type consiste à définir error_reporting sur E_ALL. Cela montrera toutes les erreurs/avertissements/avis/etc. Cela vous donnera un avertissement si vous utilisez une variable qui n'existe pas/n'a pas été définie.

-1

Résolu mon propre problème, j'aurais dû utiliser "vide" pas "! Isset" dans mes fonctions if. parce qu'ils ont été définis comme ci-dessous montre:

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

Merci pour l'aide de toute façon.

+1

Ceci est soit un addendum (modifier) ​​à la question ou un commentaire sur la solution/la question. Mais certainement pas une réponse. – soulmerge

Questions connexes