|
|
|
|
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 :)
?>
Configuration: Windows XP Firefox 2.0.0.16
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 ?
$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... Au commencement, nous sommes tous des noobs... |
Merci pour ta reponse
$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 |
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. Au commencement, nous sommes tous des noobs... |
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 . |
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. Au commencement, nous sommes tous des noobs... |
Salut
|
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... Au commencement, nous sommes tous des noobs... |