Problème de boucle

Eléphanteau du PHP | 28 Messages

11 juin 2008, 15:27

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']; }

Mammouth du PHP | 1353 Messages

11 juin 2008, 15:32

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'];
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Eléphanteau du PHP | 28 Messages

11 juin 2008, 16:19

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 {

Mammouth du PHP | 1353 Messages

11 juin 2008, 16:24

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...
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Eléphanteau du PHP | 28 Messages

11 juin 2008, 17:02

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){

Mammouth du PHP | 1353 Messages

11 juin 2008, 17:12

N'oublie pas le Image
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Eléphant du PHP | 70 Messages

11 juin 2008, 17:19

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'];

Eléphanteau du PHP | 28 Messages

11 juin 2008, 17:30

C'est vrai tu as raison. J'ai supprimer la boucle while.