2010-10-13 5 views
-2

J'utilise ceci pour comparer le mot de passe entré et le mot de passe de confirmation. Peu importe quoi, il crée l'utilisateur. Pourquoi ça?Mot de passe comparer, pourquoi ça ne marche pas?

est ici le code de base de données -

$connect = @mysql_connect ($host, $username, $password) or die ('error'); 
$select = @mysql_select_db($db_name, $connect) or die('check'); 
$username=stripslashes(trim($_POST['username'])); 
$select_record="select * from users where username=' ".$username."' "; 
$select_query=mysql_query($select_record) or die (mysql_error()); 
if(mysql_num_rows($select_query)==0) 

{ 
    $fullname = stripslashes(trim($_POST['fullname'])); 
    $email = stripslashes(trim($_POST['email'])); 
    $website = stripslashes(trim($_POST['website'])); 
    $username = stripslashes(trim($_POST['username'])); 
    $password = stripslashes(trim($_POST['password'])); 
    $add_new="insert into users (fullname,email,website,username,password) values ('$fullname','$email','$website','$username','$password')"; 
    $add_query=mysql_query($add_new) or die(mysql_error()); 
    if($add_query) 
    { 
     echo "Awesome! You are now a member"; 
    } 
} 
else 
echo "Please try again"; 
?> 

Au-dessus se connecter, j'ai mon nom d'utilisateur et mot de passe base de données.

Juste pour réviser, voici mon code actuel -

<div id="form"><form action="registersuccess.php" method="post"> 
Full Name<br /> 
<input type="text" name="fullname"/> 
<br /><br /> 
Website<br /> 
<input type="text" name="site"/><br /><br /> 
Email<br /> 
<input type="text" name="email"/><br /><br /> 
Username<br /> 
<input type="text" maxlength="255" name="username"/><br /> 
<br /> 
Password<br /> 
<input type="password" name="password"/><br /> 
<br /> 
Confirm Password<br /> 
<input type="password" name="confirmpass"/><br /> 
<br /> 
<p class="submit"><input type="submit" value="Create my Account"/></p> 

</form> 

<?php 
$pass = $_POST['password']; 
$cpass = $_POST['confirmpass']; 
$cmp = strcmp($pass, $cpass); 

if ($cmp != 0) 
{ 
    echo "check password"; 
} 
else 
{ 
    return true; 
} 
?> 
+0

Notez que vous ne pouvez accepter qu'une seule réponse par question. Donc, comme le dit @zengr, choisissez lequel est le meilleur. – BoltClock

+0

Votre code de vérification de mot de passe est-il dans une fonction ou dans un fichier d'inclusion? Pourriez-vous nous montrer le code d'insertion de la base de données? Il peut y avoir un problème là aussi. – BoltClock

+0

Hmmm ... comment vérifiez-vous les mots de passe? En outre, voter pour contrer ce qui semble être downvotes sans signification. – BoltClock

Répondre

10

Un certain nombre de gotchas flagrants de syntaxe ici. Il semble que vous ne voyiez même pas de notifications/avertissements (sur les variables indéfinies, les constantes non définies, etc.). Il est donc préférable d'éditer php.ini pour activer le rapport d'erreur (au moins E_NOTICE). au début de vos scripts:

error_reporting(E_ALL); 

cela fera des « erreurs » de syntaxe (ce qui signifie qu'ils sont parse pas réelles erreurs, mais frappe encore des erreurs qui sont reconnues par PHP pour signifier autre chose) beaucoup, beaucoup plus facile à catch, car PHP va imprimer des messages qui vous disent s'il y a quelque chose de louche avec votre code, et à quels fichiers/lignes.

Maintenant sur les problèmes réels avec votre code.


Vous devez affecter le résultat de strcmp() à une variable puis vérifier cette variable. En outre, vous pouvez modifier la condition if pour indiquer $cmp != 0 car vous testez pour toute sorte d'inégalité, c'est-à-dire que vous testez is not 0.

$cmp = strcmp($pass, $cpass); 

if ($cmp != 0) 
... 

En fait, en faisant que vous pouvez contourner complètement avoir à utiliser une variable temporaire, et il suffit de passer le résultat de l'appel de fonction dans l'instruction de condition:

if (strcmp($pass, $cpass) != 0) 

Ou en comparant directement la chaînes au lieu de comparer le résultat strcmp():

if ($pass != $cpass) 

Addition allié, comme d 'autres le font remarquer, vous avez eu tort vos attributions de valeur POST, elles devraient être inversées, sinon vous écrasez les valeurs de $_POST sans rien.Vous pouvez également déposer les parenthèses () pour les clés de tableau car ils ne sont pas nécessaires du tout:

$pass = $_POST['password']; 
$cpass = $_POST['confirmpass']; 
+0

m'a battu de quelques secondes ... +1 – arthurprs

+0

merci ... vérifier ma modification. –

3

Si vous souhaitez utiliser strcmp, vous devez traiter la valeur de retour de celui-ci en quelque sorte, que ce soit le stocker temporairement dans un variable, par exemple:

$cmpResult = strcmp($pass, $cpass); 
if ($cmpResult > 0 || $cmpResult < 0) { 
    // … 
} 

Ou vous utilisez la valeur retournée directement et de le comparer à 0:

if (strcmp($pass, $cpass) !== 0) { 
    echo "password check"; 
} 

B Vous pouvez également comparer directement les valeurs des variables:

if ($pass !== $cpass) { 
    echo "password check"; 
} 
0

Etes-vous sur la même page que le formulaire? Si oui, $_POST n'est pas réglé, et donc $pass = $cpass = ''

1
Password<br /> 
<input type="password" name="password"/><br /> 
<br /> 
Confirm Password<br /> 
<input type="password" name="confirmpass"/><br /> 
<br /> 
<?php 
    $pass = $_POST['password']; // previously you assigned undefined variable to $_POST element. Also no need for() when accessing array element 
    $cpass = $_POST[('confirmpass')]; 
    $compare = strcmp($pass, $cpass); //previously function return value wasn't assigned to any variable 

if ($compare !== 0) //some optimization 
    { 
    echo "password check"; 
    } 
else 
{ 
    return true; 
} 
?> 
0

Quelques problèmes je pouvais voir:

Vous devez obtenir la valeur du tableau $_POST pas affecter la valeur.
Aussi vous n'avez pas vraiment besoin de parenthèses lors de l'accès élément de tableau (bien que son pas une erreur pour l'utiliser.), Donc pour obtenir la valeur de la clé 'foo' dans un tableau $arr vous pouvez utiliser $arr['foo'].

Alors vous avez besoin:

$pass = $_POST['password']; 
$cpass = $_POST['confirmpass']; 

Ensuite, vous comparez les deux chaînes en utilisant la fonction strcmp qui retourne 0 si les deux chaînes sont égales et renvoie une valeur non nulle si la différer. Donc, vous pouvez faire:

if(strcmp($pass, $cpass) !== 0) { 
    // passwords differ 
} 
0

Il peut être utile d'attribuer vos valeurs aux données publiées plutôt que l'inverse. S'il vous plaît prenez le temps d'apprendre les bases avant de poser ce genre de questions.

ie. $ pass = $ _POST ['pass']; etc.

1
$_POST[('password')] = $pass; 
$_POST[('confirmpass')] = $cpass; 

ne devrait-il pas en être autrement?

$pass = $_POST['password']; 
$cpass= $_POST['confirmpass']; 
+0

+1 parce que je n'ai même pas remarqué: O – Robus