Page 1 sur 1

Problème de boucle

Posté : 11 juin 2008, 15:27
par nasbe
Salut j'ai un problème avec la boucle suivante il m'affiche le résultat suivant

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource on line 29.

En plus de cela il ne m'affiche pas les echo de mes requetes, par contre il recupere bien la variable mail de mon formulaire, si quelqu'un aurait une idée?


Code : Tout sélectionner

if (isset($_POST['mail'])) $mail = $_POST['mail']; else $mail = null; if(!empty($mail)) { $RequetePseudoPassword = mysql_query ("SELECT Pseudo, Password FROM `personne` WHERE Email='$mail'"); $Resultat = mysql_query($RequetePseudoPassword); echo "$Resultat"; while ($TableauNomPassword = mysql_fetch_array($Resultat)){ $NomPersonne = $TableauNomPassword['NomPersonne']; $Password= $TableauNomPassword['Password']; }

Posté : 11 juin 2008, 15:32
par guilt92
Il faut enlever les back quotes autour du nom de la table.

Je te conseille de toujours utiliser le or die(mysql_error()) après une requete comme ca tu auras les messages d'erreur :
$RequetePseudoPassword = mysql_query ("SELECT Pseudo, Password FROM personne WHERE Email='$mail'") or die(mysql_error()); 
Aussi tu peux simplifier le début de ton code :
if (isset($_POST['mail'])) 
   $mail = $_POST['mail']; 
else 
  $mail = null; 


 if(!empty($mail)) 
{ 
peut devenir
 if(!empty($_POST['mail']))
{ 
$mail = $_POST['mail'];

Posté : 11 juin 2008, 16:19
par nasbe
Salut, j'ai pu trouver comment recevoir mon pseudo et mon mot de passe.

Maintenant j'aimerai qu'il m'affiche
echo "Ton adresse mail n'est pas valide"; si elle ne l'ai pas, hors dans mon cas, il rentre quand même dans la boucle while

Je dois faire des erreurs dans mes tests.

Code : Tout sélectionner

{ $mail = $_POST['mail']; $RequetePseudoPassword =("SELECT Pseudo, Password FROM personne WHERE Email='$mail'") or die(mysql_error()); $Resultat = mysql_query($RequetePseudoPassword); if($Resultat){ while ($TableauNomPassword = mysql_fetch_array($Resultat)){ $PseudoPersonne = $TableauNomPassword['Pseudo']; $Password= $TableauNomPassword['Password']; } echo "<b>Vous allez recevoir un email qui vous redonnera votre mot de passe et votre pseudo</b>"; $message = "ton pseudo est ".$PseudoPersonne." et ton mot de passe est ".$Password; mail($mail,'Identification',$message); } else { echo "Ton adresse mail n'est pas valide"; } } else {

Posté : 11 juin 2008, 16:24
par guilt92
Premiere remarque il faudrait plutot faire le or die() sur le mysql_query, parce que sur l'affectation d'une variable de text ca risque de toujours marcher :
$RequetePseudoPassword =("SELECT Pseudo, Password FROM personne WHERE Email='$mail'");
$Resultat = mysql_query($RequetePseudoPassword) or die(mysql_error());  
Ensuite tu peux tester le nombre de résultat retourné par ta requete grace à mysql_num_rows().

Ainsi tu peux faire tester si mysql_num_rows($Resultat) est supérieur à 0 (donc au moins un résultat) et écrire le message dans le cas contraire... tu peux aussi verifier que le résultat avec cette adresse mail est unique et t'assurer que mysql_num_rows($Resultat) == 1...

Posté : 11 juin 2008, 17:02
par nasbe
Voilà j'ai modifier le code est sa fonctionne now, merci beaucoup.

Code : Tout sélectionner

$RequetePseudoPassword =("SELECT Pseudo, Password FROM personne WHERE Email='$mail'"); $Resultat = mysql_query($RequetePseudoPassword)or die(mysql_error()); if(mysql_num_rows($Resultat) > 0){

Posté : 11 juin 2008, 17:12
par guilt92
N'oublie pas le Image

Posté : 11 juin 2008, 17:19
par Sodams
Attention qu'avec ton code, si un utilisateur est inscrit plusieurs fois avec la même adresse email, il recevra seulement un pseudo et un mot de passe (le dernier).

Si tu n'autorises qu'un seule compte par email, il n'y aura évidemment pas de problème. Et à ce moment, tu n'es même pas obliger d'utiliser la boucle while() vu qu'il n'y aura qu'un résultat.

Ce qui donnera une structure bien plus plate.
   
$TableauNomPassword = mysql_fetch_array($Resultat))
$NomPersonne = $TableauNomPassword['NomPersonne'];
$Password= $TableauNomPassword['Password'];

Posté : 11 juin 2008, 17:30
par nasbe
C'est vrai tu as raison. J'ai supprimer la boucle while.