Sos ....un problem avec la requette sql..
Résolu
assia87
Messages postés
25
Date d'inscription
vendredi 25 juillet 2008
Statut
Membre
Dernière intervention
20 août 2008
-
25 juil. 2008 à 12:28
Sri Lumpa Messages postés 177 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 1 juin 2010 - 25 juil. 2008 à 22:14
Sri Lumpa Messages postés 177 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 1 juin 2010 - 25 juil. 2008 à 22:14
A voir également:
- Sos ....un problem avec la requette sql..
- Logiciel sql - Télécharger - Bases de données
- Requete sql pix ✓ - Forum MySQL
- Jointure sql ✓ - Forum MySQL
- Il y a eu un problème avec cette requête. nous travaillons à sa résolution aussi vite que nous le pouvons. - Forum Facebook
- Ora-00933: la commande sql ne se termine pas correctement ✓ - Forum Oracle
9 réponses
Sri Lumpa
Messages postés
177
Date d'inscription
mercredi 14 novembre 2007
Statut
Membre
Dernière intervention
1 juin 2010
69
25 juil. 2008 à 19:36
25 juil. 2008 à 19:36
Voilà le code que j'ai de mon côté, légèrement modifié afin de débugger un peu :
Ce code marche, je l'ai testé. Quand tu arrives la première fois sur la page ou que tu rentres de mauvais identifiant, il t'affiche le formulaire pour se logger. Quand tu rentres les bons identifiants, tu accèdes à la page cachée...
<?php if (isset($_POST['mot_de_passe']) && isset($_POST['nom']) && isset($_POST['prenom']) ) // Si la variable existe { // On se crée une variable $mot_de_passe avec le mot de passe entré et$ non et $prenom $mot_de_passe = $_POST['mot_de_passe']; $prenom = $_POST['prenom']; $nom = $_POST['nom']; } else // La variable n'existe pas encore { $mot_de_passe = ""; // On crée une variable $mot_de_passe vide $prenom ="" ; $nom = ""; } echo "pass : $mot_de_passe, nom: $nom, prenom: $prenom<br />"; mysql_connect("localhost", "root", ""); mysql_select_db("tests")or die(mysql_error()); $requete = "SELECT password FROM visiteurs WHERE nom='".$nom."' AND prenom='".$prenom."'"; echo "$requete<br />"; $reponse=mysql_query($requete); $donnees = mysql_fetch_array($reponse); print_r($donnes);echo "<br />"; if(isset($donnees['password']) && ($donnees['password'] == $mot_de_passe)) { // On affiche la page cachée. ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <title>page cachee :</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> </head> <body> <form action="titre.php" method="post"> <p> <fieldset> <legend><strong> voila la page cachee </strong> :</legend> </fieldset> <input type="submit" value="Valider" /> <br /> </p> </form> </body> </html> <?php } else // le mot de passe n'est pas bon { // On affiche la zone de texte pour rentrer le mot de passe. ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <title>Page protégée par mot de passe</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> </head> <body> <p>Veuillez entrer vos cordonnes pour acceder a la page cachee :</p> <fieldset> <legend><strong>Vos coordonnées:</strong></legend> <form action="protection.php" method="post"> <p> <label for="prenom"><strong>votre prenom</strong></label> :<br /> <input type="text" name="prenom" id="prenom" /> </p> <p> <label for="nom"><strong>Votre nom</strong></label>:<br /> <input type="text" name="nom" id="nom" /> </p> <p> <label for="password"><strong>Votre mot de passe</strong></label> :<br /> <input type="password" name="mot_de_passe" id="pseudo" /> </p> </fieldset> <p> <input type="submit" value="Valider" /> <input type="reset" /> </p> </form> </body> </html> <?php } // Fin du else mysql_close(); // Fin du code :) ?>
Ce code marche, je l'ai testé. Quand tu arrives la première fois sur la page ou que tu rentres de mauvais identifiant, il t'affiche le formulaire pour se logger. Quand tu rentres les bons identifiants, tu accèdes à la page cachée...
Sri Lumpa
Messages postés
177
Date d'inscription
mercredi 14 novembre 2007
Statut
Membre
Dernière intervention
1 juin 2010
69
25 juil. 2008 à 13:20
25 juil. 2008 à 13:20
Si j'ai bien compris ton problème, c'est que quoiqu'il arrive, ton script affiche toujours la partie de la page pour entrer les identifiants et mot de passe c'est ça ?
Si c'est bien ça ton problème, il vient du fait que quoiqu'il arrive, ton if ($donnees['password']== $mot_de_passe AND $donnees['prenom']== $prenom AND $donnees['nom']== $nom ) sera forcement faux à un moment ou l'autre... et donc il affichera la page de login.
Je pense qu'en modifiant ta requête, tu régleras le problème (et tu accéléreras la vitesse d'exécution) :
Puis tu exécutes ta requête, tu ne fais qu'un seul fetch pour récupérer les données et si ton tableau est non-vide alors, ça veut dire que ces identifiants étaient contenues dans la table et tu peux donner accès à ta page cachée...
J'espère avoir pu t'aider...
Si c'est bien ça ton problème, il vient du fait que quoiqu'il arrive, ton if ($donnees['password']== $mot_de_passe AND $donnees['prenom']== $prenom AND $donnees['nom']== $nom ) sera forcement faux à un moment ou l'autre... et donc il affichera la page de login.
Je pense qu'en modifiant ta requête, tu régleras le problème (et tu accéléreras la vitesse d'exécution) :
$requete = "SELECT nom, prenom, password FROM visteurs WHERE nom='$nom' AND prenom='$prenom' AND password='$motdepasse'";
Puis tu exécutes ta requête, tu ne fais qu'un seul fetch pour récupérer les données et si ton tableau est non-vide alors, ça veut dire que ces identifiants étaient contenues dans la table et tu peux donner accès à ta page cachée...
J'espère avoir pu t'aider...
assia87
Messages postés
25
Date d'inscription
vendredi 25 juillet 2008
Statut
Membre
Dernière intervention
20 août 2008
1
25 juil. 2008 à 14:41
25 juil. 2008 à 14:41
merci pour ta reponse
bon je crois qu'il m'affiche la page tant de fois qu'il boucle dans le while ..et puisque j'ai deux visiteurs dans ma table il affiche deux formulaires.
pour la modification de la requette
j'ai déjà essayé avec cella au debut :
et ca marche plus !!
et avec la requette que tu m'as donné ,il detecte une erreur dans la ligne ou il y a while ($donnees = mysql_fetch_array($reponse) )
je sais pas si je dois ecrire les variables comme cela :nom='$nom'(ce que tu as utilisé )
ou bien comme ca : nom='".$nom." ???
il ne reconnait plus les variables de where ....
c'est pourquoi j'ai fait select * from visiteurs dans mon code
bon je crois qu'il m'affiche la page tant de fois qu'il boucle dans le while ..et puisque j'ai deux visiteurs dans ma table il affiche deux formulaires.
pour la modification de la requette
j'ai déjà essayé avec cella au debut :
$reponse = mysql_query("SELECT password FROM visiteurs WHERE nom='".$nom."' AND prenom ='".$prenom."'or die(mysql_error()"); while ($donnees = mysql_fetch_array($reponse) ) {if($mot_de_passe = password ) ..... else ...}
et ca marche plus !!
et avec la requette que tu m'as donné ,il detecte une erreur dans la ligne ou il y a while ($donnees = mysql_fetch_array($reponse) )
je sais pas si je dois ecrire les variables comme cela :nom='$nom'(ce que tu as utilisé )
ou bien comme ca : nom='".$nom." ???
il ne reconnait plus les variables de where ....
c'est pourquoi j'ai fait select * from visiteurs dans mon code
Sri Lumpa
Messages postés
177
Date d'inscription
mercredi 14 novembre 2007
Statut
Membre
Dernière intervention
1 juin 2010
69
25 juil. 2008 à 15:03
25 juil. 2008 à 15:03
Tu as mis ton or die(mysql_error() dans ta requete, alors il ne te retourne rien que ça ne veut rien dire pour lui.... Je crois qu'il faut mettre à la place :
perso je ferais plutôt comme ça :
Que tu mettes nom='$nom' ou nom='".$nom."' reviens au même. Quand tu as une chaîne de caractères formée par des double quotes ("...") les variables sont évaluées à l'intérieur de ta chaîne. Si il s'agit d'une chaîne faite par des simples queots ('...') tes variables ne sont pas évaluées.
$reponse = mysql_query("SELECT password FROM visiteurs WHERE nom='".$nom."' AND prenom ='".$prenom."'") OR die(mysql_error());
perso je ferais plutôt comme ça :
$reponse = mysql_query("SELECT password FROM visiteurs WHERE nom='$nom' AND prenom='$prenom'"); $donnees = mysql_fetch($reponse); if($donnees['password'] == $mot_de_passe){ // affichage de la page cachée } else { // affichage de la page par défaut }
Que tu mettes nom='$nom' ou nom='".$nom."' reviens au même. Quand tu as une chaîne de caractères formée par des double quotes ("...") les variables sont évaluées à l'intérieur de ta chaîne. Si il s'agit d'une chaîne faite par des simples queots ('...') tes variables ne sont pas évaluées.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
assia87
Messages postés
25
Date d'inscription
vendredi 25 juillet 2008
Statut
Membre
Dernière intervention
20 août 2008
1
25 juil. 2008 à 15:33
25 juil. 2008 à 15:33
je viens de tester ca
mais il m'affiche directement la 2eme page caché sans afficher le formulaire, il ne verifie meme pas .
j sais pas si la requette est bonne ou non .!!
j'ai fait
il m'affiche la page blanche cette fois ,cela ne veut pas dire qu' il ne rentre même pas dans le while
j'ai fait plusieurs tests mais ils prouvent tous que la requette ne return rien .
$reponse=mysql_query( "SELECT password FROM visiteurs WHERE nom='".$nom."' AND prenom='".$prenom."'"); $donnees = mysql_fetch_array($reponse); if($donnees['password'] == $mot_de_passe) . ........(afficher la page cachée ) else (afficher le formulaire a nouveau )...
mais il m'affiche directement la 2eme page caché sans afficher le formulaire, il ne verifie meme pas .
j sais pas si la requette est bonne ou non .!!
j'ai fait
$reponse=mysql_query( "SELECT password FROM visiteurs WHERE nom='".$nom."' AND prenom='".$prenom."'"); while ($donnees = mysql_fetch_array($reponse)) {echo zzz; if($mot_de_passe = password ).... else .........
il m'affiche la page blanche cette fois ,cela ne veut pas dire qu' il ne rentre même pas dans le while
j'ai fait plusieurs tests mais ils prouvent tous que la requette ne return rien .
Sri Lumpa
Messages postés
177
Date d'inscription
mercredi 14 novembre 2007
Statut
Membre
Dernière intervention
1 juin 2010
69
25 juil. 2008 à 16:03
25 juil. 2008 à 16:03
J'ai trouvé...
En faisant ça, j'arrive à entrer sur ta page cachée si je rentre les bons identifiants et le formulaire ne s'affiche plus... Si je rentre des identifiants faux, le formulaire de login s'affiche à nouveau.
$reponse = mysql_query("SELECT password FROM visiteurs WHERE nom='$nom' AND prenom='$prenom'"); $donnees = mysql_fetch($reponse); if(isset($donnes['password']) && ($donnees['password'] == $mot_de_passe)){ // affichage de la page cachée } else { // affichage de la page par défaut }
En faisant ça, j'arrive à entrer sur ta page cachée si je rentre les bons identifiants et le formulaire ne s'affiche plus... Si je rentre des identifiants faux, le formulaire de login s'affiche à nouveau.
assia87
Messages postés
25
Date d'inscription
vendredi 25 juillet 2008
Statut
Membre
Dernière intervention
20 août 2008
1
25 juil. 2008 à 19:24
25 juil. 2008 à 19:24
salut
merci pour ton aide ,vraiment c'est gentil .
j'ai essayé avec le dernier code que tu m'as donné ,il m'affiche le formulaire mais quoi que j fasse(.meme si je saisi les données correctes ,il n'affiche plus la page cachée) ..il vide le formulaire il le re-affiche encore une fois !!
c'est a dire il passe seulement au else,dans le 1 er affichage parce que l'utilisateur n'a rien saisi (..isset )
et il le re-affiche parce qu'il n'arrive pas a faire la requette et le if .
$donnees = mysql_fetch_array($reponse); est vide il ne contient rien peut etre !!
merci pour ton aide ,vraiment c'est gentil .
j'ai essayé avec le dernier code que tu m'as donné ,il m'affiche le formulaire mais quoi que j fasse(.meme si je saisi les données correctes ,il n'affiche plus la page cachée) ..il vide le formulaire il le re-affiche encore une fois !!
c'est a dire il passe seulement au else,dans le 1 er affichage parce que l'utilisateur n'a rien saisi (..isset )
et il le re-affiche parce qu'il n'arrive pas a faire la requette et le if .
$donnees = mysql_fetch_array($reponse); est vide il ne contient rien peut etre !!
assia87
Messages postés
25
Date d'inscription
vendredi 25 juillet 2008
Statut
Membre
Dernière intervention
20 août 2008
1
25 juil. 2008 à 20:43
25 juil. 2008 à 20:43
merci bien sri lumpa...
vraiment j sais pas quoi dire !
maintenant ca marche tres bien !!
merci ..merci ..merci :)
vraiment j sais pas quoi dire !
maintenant ca marche tres bien !!
merci ..merci ..merci :)
Sri Lumpa
Messages postés
177
Date d'inscription
mercredi 14 novembre 2007
Statut
Membre
Dernière intervention
1 juin 2010
69
25 juil. 2008 à 22:14
25 juil. 2008 à 22:14
Tout le plaisir était pour moi ;)