PB REQUETE SQL POUR SE LOGGER SUR MON SITE

PB REQUETE SQL POUR SE LOGGER SUR MON SITE - SQL/NoSQL - Programmation

Marsh Posté le 23-08-2007 à 21:54:13    

Bonsoir à tous,
 
Bon ben voila j'ai une erreur sql lorsque je me logue sur mon site, la voici :
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource
 
Et voici mon code :
 
<?php
$db = mysql_connect('localhost', 'root', '');
mysql_select_db('pkr',$db);  
// On démarre la session
session_start();
$loginOK = false;  // cf Astuce
 
// On n'effectue les traitement qu'à la condition que  
// les informations aient été effectivement postées
if ( isset($_POST) && (!empty($_POST['Pseudo'])) && (!empty($_POST['MotDePasse'])) ) {
 
  extract($_POST);  // je vous renvoie à la doc de cette fonction
 
  // On va chercher le mot de passe afférent à ce login
  $sql = "SELECT Pseudo, MotDePasse, Prenom, Age, LieuHabitation, Pays, FROM joueurs WHERE MotDePasse = '".addslashes($MotDePasse)."'";
  $req = mysql_query($sql);
   
  // On vérifie que l'utilisateur existe bien
  if (mysql_num_rows($req) > 0) {
     $data = mysql_fetch_assoc($req);
     
    // On vérifie que son mot de passe est correct
    if ($MotDePasse == $data['MotDePasse']) {
      $loginOK = true;
    }
  }
}
 
// Si le login a été validé on met les données en sessions
if ($loginOK) {
  $_SESSION['Pseudo'] = $data['Pseudo'];
  $_SESSION['Prenom'] = $data['Prenom'];
  $_SESSION['Age'] = $data['Age'];
  $_SESSION['LieuHabitation'] = $data['LieuHabitation'];
  $_SESSION['Pays'] = $data['Pays'];
}
else {
  echo 'Une erreur est survenue, veuillez réessayer !';  
}
?>
 
Merci d'avance pour votre aide qui va m'être très précieuse.

Reply

Marsh Posté le 23-08-2007 à 21:54:13   

Reply

Marsh Posté le 23-08-2007 à 22:24:09    

1/ on se fout de ton code PHP
2/ affiche ce que donne :
echo $req;
3/ affiche le message d'erreur sql (donc fait tourner le résultat de la ligne ci-dessus dans phpmyadmin)

Reply

Marsh Posté le 23-08-2007 à 22:28:44    

pardon si vous vous foutez de mon code mais je n'en savais rien.
 
Alors si je lui demande de m'afficher l'erreur sql il me donne :
Erreur SQL :  
SELECT Pseudo, MotDePasse, Prenom, Age, LieuHabitation, Pays, FROM joueurs WHERE MotDePasse = '1234'
 
Voila.
 
merci

Reply

Marsh Posté le 23-08-2007 à 22:30:02    

voilà.
 
donc après "pays", t'as une virgule en trop que tu peux enlever :)
 
(c'est pas que je me "fout" de ton code. c'est surtout que tout ce qui est PHP est totalement indépendant du problème de requête. donc quand t'as une erreur SQL, le premier truc à faire, c'est faire un echo de cette dernière, et la tester dans phpmyadmin ou autre requêteur. si ça passen le bug est ailleurs, et si ça passe pas, on sait que c'est ça qui merde, ça évite de passer la nuit à comprendre comment marche le php autour)


Message édité par MagicBuzz le 23-08-2007 à 22:32:04
Reply

Marsh Posté le 23-08-2007 à 22:31:38    

HOLALA!
 
Génial, mais en fait c'était tout con lol!
 
Vieille erreur de saisie.
 
merci beaucoup MagicBuzz.
 
passe une bonne soirée.

Reply

Marsh Posté le 23-08-2007 à 22:33:55    

ps : juste un truc comme ça...
 
ajoute "and pseudo = ..." dans ta requête. parceque si deux personnes utilisent le même mot de passe tu vas avoir des surprises ;)
tout comme si un petit malin tapes "toto" ou "1234", valeurs typiques de mots de passe : il va se retrouver connecté avec le compte d'une autre personne.


Message édité par MagicBuzz le 23-08-2007 à 22:34:44
Reply

Marsh Posté le 23-08-2007 à 22:41:32    

Je l'ai fait mais le truc c'est qu'il m'affiche le echo tout à la fin qui dit : "Une erreur est survenue..."
 
J'ai donc rajouté à la condition de validation If ($MotDePasse == $data['MotDePasse']), un && $Pseudo == $data['Pseudo']);
 
Mais il m'affiche toujours le même message!
 
Et la je vois pas!
 
Merci encore

Reply

Marsh Posté le 23-08-2007 à 22:56:29    

Crois tu que tu pourrais m'aider sur un problème que j'ai avec un formulaire??

Reply

Marsh Posté le 23-08-2007 à 22:57:48    

En passant il existe aussi la fonction mysql_error() qui donne de bonnes explications sur un problème de requête. Idéale donc dans ce genre de situations.


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 23-08-2007 à 23:01:08    

ok merci.
 
Et toi tu pourrais peut-être m'aider pour un autre problème que j'ai avec un formulaire?
 
J'ai un souci avec les bouton radio!
 
Je ne vois aps comment faire pour dire que si le bouton 1 est sélectionné, alors tu prend sa value et tu lui donne la variable $correct=true, et le bouton 2 dans ce cas tu lui donne la variable $incorrect=false.
 
Merci

Reply

Marsh Posté le 23-08-2007 à 23:01:08   

Reply

Marsh Posté le 23-08-2007 à 23:37:04    

A oui en passant les titres tout en majuscules sont moyennement appréciés ici.
 
Ensuite je veux bien t'aider, mais je t'avouerais que je trouve ta question un peu floue. Si tu pouvais clarifier, donner un exemple ça aiderait pas mal pour te répondre!


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 23-08-2007 à 23:48:35    

En fait mon formulaire de saisie(nouvelle_entree.php) demande au visiteur de sélectionner par des boutons radio le type de jeux :
 
Cette ligne pour le jeu Sit And Go :
 
<td><input class="radio" type="radio" name="NomTournois" value="IdSAG"> Sit And Go</td>
 
Et cette ligne pour le MTT :
 
<td><input class="radio" type="radio" name="NomTournois" value="IdMTT"> MTT</td>
 
Et en fait, lors de la vérification de la saisie(verif_nouvelle_entree.php), je souhaiterai pouvoir sélectionner la valeur du bouton sélectionné par le visiteur et lui donner la valeur vrai. Et du coup donner la valeur false à l'autre bouton qui n'a pas été sélectionné.
 
Mon but, pouvoir ensuite, par requete sql, insérer uniquement la valeur du bouton sélectionné dans ma base.
 
le souci c'est que si le visiteur a bien tout rempli, et bien ma base ne s'alimente pas!
 
Donc il doit y avoir un problème dans ma requete et je ne vois pas ce que c'est. Et donc du coup je ne sais pas si ce que je t'ai expliqué avant fonctionne(et je ne pense pas que cela fonctionne!).
 
j'espère avoir été assez claire.
 
merci

Reply

Marsh Posté le 24-08-2007 à 00:09:30    

Fais voir ton code (les parties intéressantes) et on verra.


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 24-08-2007 à 00:43:36    

Ok
 
Alors pour ce qui est du formulaire de saisie, tu a les infos dans mon dernier post.
 
La page verif c'est ici :
 
  <tr>
   <td class="explication">Indique sur quel type de jeu tu étais :</td>
    <br/>
   <td><input class="radio" type="radio" name="NomTournois" IdSAG"> Sit And Go
    <?  
    $NomTournois = $_POST['NomTournois'];
    ?>
   </td>
    <br/>
   <td><input class="radio" type="radio" name="NomTournois" value="IdMTT"> MTT
 
   </td>
  </tr>
 
Donc la tu la compris c'est la vérification des fameux bouton de sélection du type de jeu.
 
Et maintenant tu trouveras les conditions d'envoi des infos sur ma base de données :
 
 <?
$Insert="INSERT INTO sag(NumTournois, NomTournois, Pseudo, Date, NbJoueurs, PrixEntree, Classement, Gain) VALUES('', '$NomTournois', '$Pseudo', '$Date', '$NbJoueurs', '$PrixEntree', '$Classement', '$Gain')";
   
  If ($NomTournois==$incorrect || $Date==$incorrect || $NbJoueurs==$incorrect || $PrixEntree==$incorrect || $Classement==$incorrect || $Gain==$incorrect)
  {
   echo 'Désolé mais je ne peux pas prendre ton enregistrement en compte car certaines informations sont incorrectes! Allez on y retourne!';
  }
  else
  {
   $Insert;
   echo 'Tes informations ont bien été enregistrées.';
  }
 ?>
 
La variable $NomTournois est utilisée pour vérifier la valeur du bouton radio avec la value="IdSAG". Les autres vaiables ne nous intéresse pas pour le problème en question (sauf si tu y vois un intérêt particulier).
 
Et donc au final, cette requete ne donne rien (malgrès qu'il n'y a pas d'erreur et que le echo 'Tes informations ont bien été enregistrées.'; s'affiche lui aussi.
 
J'espère que tu vas pas t'y perdre.
N'hésite pas à me demander des précisions si tu en as besoin.
 
merci

Reply

Marsh Posté le 24-08-2007 à 00:54:50    

Heu :heink: C'est où que tu executes la requete?

Reply

Marsh Posté le 24-08-2007 à 00:56:24    

Ouai déjà ou est l'exécution de ta requête?
Et puis qu'est ce que ça :
$NomTournois = $_POST['NomTournois'];  
fout au milieu du code html...?


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 24-08-2007 à 09:17:36    

dwogsi a écrit :

Ouai déjà ou est l'exécution de ta requête?
Et puis qu'est ce que ça :
$NomTournois = $_POST['NomTournois'];  
fout au milieu du code html...?


 
Alors en fait, <? $NomTournois = $_POST['NomTournois'];?>  c'est pour prendre la valeur sélectionnée du bouton qui a pour name="NomTournois".
Mais mon problème est que je ne vois pas comment interpréter la saisie et la non saisie sur deux boouton n'ayant pas la même value mais ayant le même name. Car en fait je veux prendre uniquement en compte la valeur du bouton sélectionner pour le rentrer dans la base et ne pas tnir compte de celui qui n'a pas été sélectionné.
 
Et l'exécution de ma requête est la suivant :
 
 <?
 
$req = mysql_query("INSERT INTO sag(NumTournois, NomTournois, Pseudo, Date, NbJoueurs, PrixEntree, Classement, Gain) VALUES('', '$NomTournois', '$Pseudo', '$Date', '$NbJoueurs', '$PrixEntree', '$Classement', '$Gain')" );
$res = mysql_num_rows($req);  
  If ($NomTournois==$incorrect || $Date==$incorrect || $NbJoueurs==$incorrect || $PrixEntree==$incorrect || $Classement==$incorrect || $Gain==$incorrect)
  {
   echo 'Désolé mais je ne peux pas prendre ton enregistrement en compte car certaines informations sont incorrectes! Allez on y retourne!';
  }
  else
  {
   $donnees = mysql_fetch_assoc($res);
   echo 'Tes informations ont bien été enregistrées.';
  }
 ?>
 
Voilou.
 
Par contre pour les modifications que vous m'aaporterai je vous donnerai les résultats ce soir (vers 18h30) car la je suis au boulot et donc pas de easyPHP possible car pas les droits administrateurs!
 
Merci beaucoup pour votre aide.
 
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed