Flux rss
Collection CommentÇaMarche.net
Rechercher : dans
Par :

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

assia87, le vendredi 25 juillet 2008 à 12:28:32 
 Signaler ce message aux modérateurs

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
Configuration: Windows XP
Firefox 2.0.0.16

1

Sri Lumpa, le vendredi 25 juillet 2008 à 13:20:53

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... Au commencement, nous sommes tous des noobs...

Répondre à Sri Lumpa

2

assia87, le vendredi 25 juillet 2008 à 14:41:45

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

Répondre à assia87

3

Sri Lumpa, le vendredi 25 juillet 2008 à 15:03:48

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...

Répondre à Sri Lumpa

4

assia87, le vendredi 25 juillet 2008 à 15:33:03

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 .

Répondre à assia87

5

Sri Lumpa, le vendredi 25 juillet 2008 à 16:03:10

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...

Répondre à Sri Lumpa

6

assia87, le vendredi 25 juillet 2008 à 19:24:23

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 !!

Répondre à assia87

7

Sri Lumpa, le vendredi 25 juillet 2008 à 19:36:19
  • +1

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...

Répondre à Sri Lumpa

8

assia87, le vendredi 25 juillet 2008 à 20:43:11

Merci bien sri lumpa...
vraiment j sais pas quoi dire !
maintenant ca marche tres bien !!
merci ..merci ..merci :)

Répondre à assia87

9

 Sri Lumpa, le vendredi 25 juillet 2008 à 22:14:02

Tout le plaisir était pour moi ;) Au commencement, nous sommes tous des noobs...

Répondre à Sri Lumpa
2 requettes SQL, 2 tables, 1 seul tableau PHP (Résolu) Bonjour a tous, Voici mon probleme: J ai 2 requettes SQL sur 2 tables differentes : //recupere l'ID du problem par rapport a l ID de l imprimante $query= odbc_exec( $cnx, "select IDProblem from tbl_nbPrbl where IDImprimante=$IDimprimante" );... www.commentcamarche.net/forum/affich-10757037-2-requettes-sql-2-tables-1-seul-tableau-php
Requette SQL Chaines +Fonction Format()sous A Bonjour J'ai effectué une requette SQL sous Access et essayé pas mal de combinaisons mais j'ai une erreur de compilation ...Je sais que ça doit être un truc à la con (en relation avec les quotes..) mais voila je demande de l'aide parceque je ne suis... www.commentcamarche.net/forum/affich-9617279-requette-sql-chaines-fonction-format-sous-a
Requette SQL et tri des champs Bonjour tous le monde, je suis en train de faire une requette SQL sur mon forum qui est destinée sortir tous les champs d'un "theme" ordonnés en decroissant par rapport a la "date" et a l'"heure" : SELECT * FROM `forum` WHERE theme like "Annif de... www.commentcamarche.net/forum/affich-2167973-requette-sql-et-tri-des-champs
Gestion des paramètres SQLSQL présente un certain nombre de paramètres au niveau d'Oracle qu'il est possible de visualiser à travers la commande : SHOW ALL Pour modifier la valeur d'un paramètre il suffit d'utiliser la commande : SET NOM_PARAM VALEUR www.commentcamarche.net/faq/sujet-18035-gestion-des-parametres-sql
Visual FoxPro et SQL-ServerVisual Foxpro 9 et SQL-Server 2005 Quoi de mieux que Visual FoxPro pour bien utiliser SQL-Server ? Voici une question intéressante ! Pour plus d'information voir l'article de Joël Post http://www.cyberfoxpro.com/joel et les fichiers... www.commentcamarche.net/faq/sujet-5347-visual-foxpro-et-sql-server
Optimisation des requette sqlBonjour, j'ai un exposé sur l'optimisation des requettes sql . est ce que vous pouvez m'aider www.commentcamarche.net/forum/affich-5001453-optimisation-des-requette-sql
Addslashe avec une requette sql server ? (Résolu)Bonjour SVP pouvez vous me dire comment je doit faire pour que addslashe marche avec une requette sql server?en effet, mes variables dans le INSERT contiennent des ' j' utilise la fonction addslashe sans succès. www.commentcamarche.net/forum/affich-3612307-addslashe-avec-une-requette-sql-server
Une requette sql sans repetition des valeurs (Résolu)Bonjour, je veux faire une requette sql qui m'affiche les valeurs distinctes d'une colonne . exemple : on a une table id....nom....categorie 1....marco...enfant 2....rita........adulte 3....katie......enfant comment faire pour afficher seulement... www.commentcamarche.net/forum/affich-7884840-une-requette-sql-sans-repetition-des-valeurs
Télécharger SQL Server BackupSQL Server Backup est un outil de sauvegarde ou de restauration pour Microsoft SQL Server. Son assistant vous permettra de sauvegarder la base de données SQL Server sur le disque dur local, un dossier partagé du réseau ou sur un réseau distant. Facile... www.commentcamarche.net/telecharger/telecharger-34058935-sql-server-backup
Télécharger SQL QuerySQL Query est un éditeur SQL. Le programme prend en charge les bases suivantes : toutes les versions de SQL Server et MSDE y compris SQL Server 2005 et SQL Server 2005 Express. Il permet de créer et d'exécuter des requêtes par lots, de naviguer entre... www.commentcamarche.net/telecharger/telecharger-34058385-sql-query
Télécharger MS SQL MigratePour des raisons pratique ou quasiment professionnel, il est nécessaire de convertir des bases de données entre différents formats. Le principal, c’est qu’il n’y ait aucune perte de donnée lors de la conversion. MS SQL Migrate est... www.commentcamarche.net/telecharger/telecharger-34058211-ms-sql-migrate
SQL - JointuresExpression des jointures Une jointure (ou θ-jointure) est un produit cartésien de deux tables. On appelle équijointure une θ-jointure dont la qualification est une égalité entre deux colonnes. En SQL, l'expression d'une jointure se... www.commentcamarche.net/contents/sql/sqljoint.php3
Le langage SQLQu'appelle-t-on SQL? SQL (Structured Query Language, traduisez Langage de requêtes structuré) est un langage de définition de données (LDD, ou en anglais DDL Data Definition Language), un langage de manipulation de données (LMD, ou en anglais DML,... www.commentcamarche.net/contents/sql/sqlintro.php3
SQL - Création de tableLe SQL, comportant un langage de définition de données (LDD), permet de créer des tables. Pour cela, il utilise le couple de mots clés CREATE TABLE. La création de tables Le création de tables se fait à l'aide du couple de mots-clés CREATE... www.commentcamarche.net/contents/sql/sqlcreate.php3