Sos ....un problem avec la requette sql..

Résolu/Fermé
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
Bonjour,
j'ai un problème dans mon code
le but : afficher un formulaire avec des zones (nom ,prenom ,mot de pass)
après remplissage de ces zones ,on clique sur valider pour voir si le nom et le prenom et le mot de pass existaient deja dans une table créée .
si tout est bon on affiche une page cachée .
la table qui est déjà créée contient 4 champs : id- nom-prénom- password .
exemple:
1 -cassie- luhane - passun
2 -jeremy-clio-passdeux
donc pour que cassie puisse voir la page cachée,
elle doit saisir son nom et son prenom et son mot de pass predifini : passun.
mais LE PROBLEME c'est pour l'affichage ,il me donne deux formulaires a saisir dans une seule page ,quand je remplie un (avec des informations correctes ),la moitié de la page devient la page cachée et l'autre moitié garde toujours le formulaire .
<?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 = "";
	
}
mysql_connect("localhost", "root", "");
mysql_select_db("tests")or die(mysql_error());
$reponse = mysql_query("SELECT * FROM visiteurs ");
while ($donnees = mysql_fetch_array($reponse) )
{if ($donnees['password']== $mot_de_passe AND $donnees['prenom']== $prenom AND $donnees['nom']== $nom ) 
{
// 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 :)
?>

merci d'avance
A voir également:

9 réponses

Sri Lumpa Messages postés 177 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 1 juin 2010 68
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 :
<?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...
1
Sri Lumpa Messages postés 177 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 1 juin 2010 68
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) :
$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...
0
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
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 :
$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
0
Sri Lumpa Messages postés 177 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 1 juin 2010 68
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 :
$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.
0

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
je viens de tester ca
$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 .
0
Sri Lumpa Messages postés 177 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 1 juin 2010 68
25 juil. 2008 à 16:03
J'ai trouvé...

$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.
0
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
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 !!
0
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
merci bien sri lumpa...
vraiment j sais pas quoi dire !
maintenant ca marche tres bien !!
merci ..merci ..merci :)
0
Sri Lumpa Messages postés 177 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 1 juin 2010 68
25 juil. 2008 à 22:14
Tout le plaisir était pour moi ;)
0