Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
847 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Comparaison de chaines en PHP

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comparaison de chaines en PHP

n°1819545
garfunk71
Posté le 30-11-2008 à 19:21:44  profilanswer
 

Bonjour à tous
J'ai créé un petit site en PHP/MySQL, et je suis confronté à un souci.
Dans l'espace membre, j'ai une partie qui permet de modifier son mot de passe. Je récupère donc l'ancien mot de passe, puis les 2 nouveaux (il est répété pour éviter les erreurs de frappe, banal quoi).
Tout ceci est envoyé via POST a une page qui compare les deux chaînes $newpass et $newpass2, et qui redirige via un header("Location:fdsfds.php" ) sur la page précédente avec un petit message d'erreur.
Jusque là, rien d'extraordinaire...
Sauf que ça marche pas !
J'ai testé avec des echo, et il ne se gêne pas du tout pour valider la comparaison des deux mots de passe !!!
Je ne comprends pas...
J'ai fait la même chose pour l'inscription, et il valide celle-ci même si le deuxième champ de password est vide  :??:  
ci-joint le code correspondant :
La page html avec le formulaire :

Code :
  1. echo '<table><form method = "POST" action = "changepass.php">
  2. <tr>
  3.  <td><p>Mot de passe actuel :</td><td><input type = "password" name = "oldpass"></p></td>
  4. </tr><tr>
  5.  <td><p>Nouveau mot de passe :</td><td><input type = "password" name = "newpass"></p></td>
  6. </tr><tr>
  7.  <td><p>Répéter :</td><td><input type = "password" name = "newpass2"></p></td>
  8. </tr><tr>
  9.  <td><p><input type = "submit" value = "Changer mon Mot de Passe"></p></td><td></td>
  10. </tr>
  11. </form></table>';


Et voici la page qui récupère les données :
 

Code :
  1. //on récupère les données
  2. $oldpass = $_POST['oldpass'];
  3. $newpass = $_POST['newpass'];
  4. $newpass2 = $_POST['newpass2'];
  5. /*echo 'pass1 : '.$newpass.'<br>';
  6. echo 'pass2 : '.$newpass2.'<br>';*/
  7. if ($newpass == "" ){
  8. header("Location:account.php?pv=1" );
  9. }
  10. if ($newpass != $newpass2) {
  11. header("Location:index.php" );
  12. }
  13. $sql = mysql_query("SELECT password FROM ".$mysql_prefix."accounts WHERE id = ".$_SESSION['id']."" ) or die(mysql_error());
  14. $verifmdp = mysql_fetch_array($sql);
  15. if (md5($oldpass) != $verifmdp['password']) {
  16. header("Location:account.php?mp=1" );
  17. } else {
  18. $newpassword = md5($newpass);
  19. mysql_query("UPDATE accounts SET password = '".$newpassword."' WHERE id = '".$_SESSION['id']."' " ) or die(mysql_error());
  20. header("Location:account.php?p=1" );
  21. }


Y a t'il un souci dans ma comparaison ? Il me semblait qu'un simple == suffirait mais apparemment non...Il me semblait aussi qu'une redirection par header stoppait le traitement du fichier...Le problème pourrait-il venir de là ? Dois-je mettre l'update de la bdd en conditionnelle [mot de passes identiques] ?  
Merci de vos réponses et aides :)

mood
Publicité
Posté le 30-11-2008 à 19:21:44  profilanswer
 

n°1819572
skeye
Posté le 30-11-2008 à 20:11:23  profilanswer
 

header n'arrête pas le traitement. il faut un exit; derrière.

Message cité 1 fois
Message édité par skeye le 30-11-2008 à 20:12:15

---------------
Can't buy what I want because it's free -
n°1819573
garfunk71
Posté le 30-11-2008 à 20:13:58  profilanswer
 

skeye a écrit :

header n'arrête pas le traitement. il faut un exit; derrière.


 
Merci, réponse concise et claire :)
Bon, j'ai tout mis en conditionnel et ça fonctionne, merci beaucoup !!
Par contre, j'ai un souci dans l'inscription, j'aimerais tester si le pseudo existe toujours, comment je peux faire ? J'ai fait un SELECT avec login = $login et regardé si le fetch était un tableau (is_array) mais ça ne fonctionne pas, il me laisse m'inscrire avec le meme pseudo...Une idée ?

n°1819581
skeye
Posté le 30-11-2008 à 20:19:09  profilanswer
 

Pas compris la question. Tu veux tester si un pseudo existe déjà?


---------------
Can't buy what I want because it's free -
n°1819583
garfunk71
Posté le 30-11-2008 à 20:22:05  profilanswer
 

Voila.
Donc je fais une requete avec le pseudo, et j'aimerais tester si j'ai des résultats ou pas quoi...
Si j'ai un résultat : le pseudo existe, si j'en ai pas c'est bon...
Comment tester si une requête mysql comprend des résultats ? J'ai essayé de faire un "mysql_num_rows == 0" mais ça fonctionne pas...
C'est correct comme méthode ou y'a plus simple ?

n°1819585
skeye
Posté le 30-11-2008 à 20:27:13  profilanswer
 

montre ton code, ça doit fonctionner...


---------------
Can't buy what I want because it's free -
n°1819589
garfunk71
Posté le 30-11-2008 à 20:31:21  profilanswer
 

Code :
  1. $sql = mysql_query("SELECT * FROM ".$mysql_prefix."accounts WHERE login = ".$login."" );
  2. $samelogin = mysql_num_rows($sql);
  3. if ($samelogin == 0) {
  4. //il n'y a pas de pseudo semblable


 
Voila la partie importante du code...  
Il ne bloque pas dessus et valide mon inscription même si j'utilise le même pseudo (identique minuscule et majuscule comprises)... [:agla]
 
Je comprends pas...

n°1819593
skeye
Posté le 30-11-2008 à 20:36:00  profilanswer
 

euh, elle est valide ta requête là? Ton login c'est une chaine de caractères, et tu le met pas entre quotes...


---------------
Can't buy what I want because it's free -
n°1819596
garfunk71
Posté le 30-11-2008 à 20:41:16  profilanswer
 

J'ai pas compris...Oui oui elle est valide, tout fonctionne a merveille ! A part qu'il me laisse m'inscrire avec un pseudo déja existant dans ma base de données...
$login c'est le login que le mec qui veut s'inscrire utilise. Je fais donc une requête dans "accounts" avec ce login, pour voir si il y a des résultats...
login sans quotes c'est le nom du champ dans ma base de données. J'ai jamais utilisé de quotes dans mes requetes pour les noms des champs, et ça fonctionne  :??: ...
J'ai une base accounts qui contient:
id login password ...etc
Et je fais une requête dessus avec le login que le mec veut utiliser pour son inscription ! Et moi je veux l'envoyer bouler si ce pseudo existe déjà...
Bon pour faire simple, je veux faire une requête sur ma table, et voir si il y a des résultats. Comment je fais ?

Message cité 1 fois
Message édité par garfunk71 le 30-11-2008 à 20:43:38
n°1819602
skeye
Posté le 30-11-2008 à 20:44:53  profilanswer
 

garfunk71 a écrit :

J'ai pas compris...
$login c'est le login que le mec qui veut s'inscrire utilise. Je fais donc une requête dans "accounts" avec ce login, pour voir si il y a des résultats...
login sans quotes c'est le nom du champ dans ma base de données. J'ai jamais utilisé de quotes dans mes requetes pour les noms des champs, et ça fonctionne  :??: ...
J'ai une base accounts qui contient:
id login password ...etc
Et je fais une requête dessus avec le login que le mec veut utiliser pour son inscription ! Et moi je veux l'envoyer bouler si ce pseudo existe déjà...
Bon pour faire simple, je veux faire une requête sur ma table, et voir si il y a des résultats. Comment je fais ?


non, ce que je veux dire c'est que

Code :
  1. "SELECT * FROM ".$mysql_prefix."accounts WHERE login = ".$login.""


ça donne

Citation :

SELECT * FROM ton_prefixe_accounts WHERE login = leloginsaisi

 

Ceci n'est pas une requête sql valide, leloginsaisi devrait être entre quotes, ie 'leloginsaisi'


Message édité par skeye le 30-11-2008 à 20:45:18

---------------
Can't buy what I want because it's free -
mood
Publicité
Posté le 30-11-2008 à 20:44:53  profilanswer
 

n°1819611
garfunk71
Posté le 30-11-2008 à 20:51:44  profilanswer
 

Ah oui !! En effet j'ai merdé sur ce coup-là..
Ca fonctionne maintenant...Je me sens con. Désolé :$ et encore merci


Message édité par garfunk71 le 30-11-2008 à 20:51:55
n°1819659
skeye
Posté le 30-11-2008 à 22:53:26  profilanswer
 

Au passage, je te conseille si tu ne connais pas de jeter un oeil àla fonction mysql_real_escape_string, voire aux requêtes préparées, si tu as accès à mysqli ou PDO.


Message édité par skeye le 30-11-2008 à 22:53:32

---------------
Can't buy what I want because it's free -

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Comparaison de chaines en PHP

 

Sujets relatifs
[PHP / MySQL] Compteur de visiteursPanier en PHP
[CDI] [Belgique] 2 Programmeurs PHP/MySQLPb script PHP
[PHP] Problème : Réception de mail[Php/Mysql]Effacer ligne d'un tableau de données
[PHP ET SEO] comment éviter un duplicate content[PHP] Conversion string to float... mais ca marche pas !
[PHP] timeout 0 dans le php.ini, quelques questions[PHP] Comparaison de chaines de caracteres
Plus de sujets relatifs à : Comparaison de chaines en PHP


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR