2009-10-04 13 views
0

J'avais un code de code inefficace pour réinitialiser les mots de passe en fonction de l'utilisateur qui entrait son nom d'utilisateur ou son adresse e-mail. Le script PHP s'est ramifié en fonction de l'identifiant utilisé. Je l'ai fusionné en un qui fonctionne maintenant si l'utilisateur entre son nom d'utilisateur, mais pas si elles entrent leur adresse e-mail. Voici le code saillant:Le script de réinitialisation du mot de passe ne s'allume que la moitié du temps

$identifier = isset($_POST["username"])?"username":"email"; 
$ident = isset($_POST["username"])?trim(mysqli_real_escape_string($mysqli,(check_chars_username($_POST["username"])))):trim(mysqli_real_escape_string($mysqli, (check_chars_email($_POST["email"])))); 


    //create and issue the query 
    $sql = "SELECT * FROM aromaMaster WHERE $identifier = '$ident'"; 
    $sql_res =mysqli_query($mysqli, $sql) or die(mysqli_error($mysqli)); 

    if(mysqli_num_rows($sql_res) == 0) { 
     //wrong login info 
     header("Location: password_reset_form.html/error=$ident"); 
     exit(); 
    } 
     $info = mysqli_fetch_array($sql_res); 
     $userid = $info["id"]; 
     $username = stripslashes($info["username"]); 
     $email = stripslashes($info["email"]); 

J'ai vérifié et vérifié que doublé le champ de formulaire e-mail est appelé e-mail et il est. Ça me fait me gratter la tête. La redirection d'en-tête est particulièrement intéressante. Lorsque je saisis une adresse e-mail et que je suis redirigé, la variable $ ident apparaît vide.

+2

Exécutez ceci à l'aide d'un débogueur (PHP + Zend?) Ou au moins echo $ identifier et $ ident après qu'ils ont été définis pour s'assurer qu'ils sont bien ce qu'ils sont supposés être. –

+0

À l'avenir, il vous suffit d'omettre les balises dans le titre. Cela encombre la question. – random

+0

@ e.c.h.o .: fera, désolé. @igro: Comme je l'ai dit, j'ai ajouté $ ident à la chaîne de requête, et il est apparu vide. Cependant, en essayant $ identifier, pour une raison quelconque, il a dit "nom d'utilisateur". Je suppose que isset était le mauvais test - l'a changé en! Empty() et ça marche très bien. Merci! – user97410

Répondre

0

Comme vous l'avez noté dans votre commentaire, vous devez vérifier que la variable username du tableau $_POST est vide.

C'est également une bonne idée de vérifier si la variable est encore là en premier lieu en plus de et avant que vous ne le testiez. Lorsque vous envoyez votre formulaire, tous les champs de saisie de texte s'affichent, même s'ils sont vierges. Le blanc n'est pas la même chose que le vide. C'est la raison pour laquelle la première partie de l'opérateur ternaire est toujours true dans votre code initial.

+0

Excellente réponse. Je pourrais ajouter que cela pourrait être simplifié à $ identifier = (! Empty ($ _POST ['nom d'utilisateur']))? 'nom d'utilisateur': 'email'; '- en utilisant' isset' et '! empty' est dans ce cas un peu redondant. –

Questions connexes