variables php dans requete sql

variables php dans requete sql - PHP - Programmation

Marsh Posté le 15-01-2009 à 23:07:34    

Bonsoir  :hello:  
après des recherches et essais infructueux, je viens quérir votre aide pour quelque chose que vous trouverez tout con, j'en suis sûr. comme indiqué dans le titre, j'essaie d'utiliser des variables php dans mes requêtes sql, mais rien ne se passe.
je tiens à préciser que je suis novice en php/mysql :p
 
voilà mon code :

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
  3.    <head>
  4.        <title>Enregistrement etudiant</title>
  5.        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  6.    </head>
  7.    <body>
  8.  
  9.  <form method="post" action="cible.php">
  10.   <p>
  11.    Nom ...................................... :
  12.    <input type="text" size ="30" name="nom" /> <br/><br/>
  13.    Prénom .................................. :
  14.    <input type="text" size ="30" name="prenom" /> <br/><br/>
  15.    Année en cours ....................... :
  16.    <select name="annee">
  17.     <option value="L1">Licence 1</option>
  18.     <option value="L2">Licence 2</option>
  19.     <option value="L3">Licence 3</option>
  20.     <option value="M1">Master 1</option>
  21.     <option value="M2">Master 2</option>
  22.    </select> <br/><br/>
  23.    Filière ..................................... :
  24.    <select name="filiere">
  25.     <option value="choix1">choix 1</option>
  26.     <option value="choix2">choix 2</option>
  27.     <option value="choix3">choix 3</option>
  28.     <option value="choix4">choix 4</option>
  29.     <option value="choix5">choix 5</option>
  30.    </select> <br/><br/><br/>
  31.    Adresse mail ........................... :
  32.    <input type="text" size ="30" name="mail" /> <br/><br/>
  33.    Choisissez un mot de passe ..... :
  34.    <input type="text" size ="30" name="password" /> <br/><br/>
  35.    <input type="submit" value="Valider" />
  36.   </p>
  37.  </form>
  38.  <?php
  39.   mysql_connect("localhost", "root", "" );
  40.   mysql_select_db("tele_exams" );
  41.   if (isset($_POST['nom']) AND isset($_POST['prenom']) AND isset($_POST['annee'])  AND isset($_POST['filiere']) AND isset($_POST['mail'])  AND isset($_POST['password']))
  42.   {
  43.    $nom = mysql_real_escape_string(htmlspecialchars($_POST['nom']));
  44.    $prenom = mysql_real_escape_string(htmlspecialchars($_POST['prenom']));
  45.    $annee = mysql_real_escape_string(htmlspecialchars($_POST['annee']));
  46.    $filiere = mysql_real_escape_string(htmlspecialchars($_POST['filiere']));
  47.    $mail = mysql_real_escape_string(htmlspecialchars($_POST['mail']));
  48.    $password = mysql_real_escape_string(htmlspecialchars($_POST['password']));
  49.    mysql_query("INSERT INTO utilisateurs VALUES('', '$nom', '$prenom', '$annee', '$filiere', '$password', '2', '$mail');" );
  50.   }
  51.   mysql_close();
  52.  ?>
  53. </body>
  54. </html>


 
 
cible.php :
 

Code :
  1. Bonjour, vour êtes <?php echo $_POST['nom']; ?> <?php echo $_POST['prenom']; ?> <br/>
  2. Vous êtes en <?php echo $_POST['annee']; ?> <?php echo $_POST['filiere']; ?> <br/>
  3. Votre mail est <?php echo $_POST['mail']; ?> et votre password est <?php echo $_POST['password']; ?> <br/><br/>


le souci c'est que la requête de la ligne 50 n'aboutit à rien. la page "cible.php" est bien affichée et les valeurs qui vont avec aussi, mais quand je regarde la base de données, pas d'entrée dans le tableau "utilisateurs"...
 
ça doit venir de la syntaxe pour les variables et j'ai essayé $var puis '$var' ou encore "' . $var .'" (comme vu ailleurs sur le net), niete...  
 
merci d'avance pour votre aide :jap:


---------------
>> [MOD] Another PC in the wall <<
Reply

Marsh Posté le 15-01-2009 à 23:07:34   

Reply

Marsh Posté le 15-01-2009 à 23:12:45    

tu affiches le formulaire en meme temps que tu insert tes variables, dans ce cas de figure tes variables à insérer sont vides, donc ton isset renvoie forcément faux, donc la condition suivant n'est pas effectuée.
 
faut que tu mette la commande insert sur une autre page, et que tu récupere les infos via la méthode post  
ou que tu cible la meme page toujours en utilisant la méthode post
 
Tu peux lire ce post que j'ai trouvé plutot rigolo et qui te donnera la réponse.
http://forum.hardware.fr/hfr/Progr [...] 0450_1.htm

Message cité 1 fois
Message édité par Artesia le 15-01-2009 à 23:13:58
Reply

Marsh Posté le 15-01-2009 à 23:16:43    

ah vi quand tu met choisir un mot de passe tu met qu'un seul champ, si l'utilisateur fait une faute de frappe, il va etre embêté, met un deuxieme champ de mot de passe et vérifi si les deux champs sont identiques, là tu pourras être sur que l'utilisateur a bien mis son mot de passe et n'a pas fait d'erreur.
 
je ne connais pas cette commande : mysql_real_escape_string
elle sert à quoi ?

Reply

Marsh Posté le 15-01-2009 à 23:21:19    

Artesia a écrit :

tu affiches le formulaire en meme temps que tu insert tes variables, dans ce cas de figure tes variables à insérer sont vides, donc ton isset renvoie forcément faux, donc la condition suivant n'est pas effectuée.
 
faut que tu mette la commande insert sur une autre page, et que tu récupere les infos via la méthode post  
ou que tu cible la meme page toujours en utilisant la méthode post
 
Tu peux lire ce post que j'ai trouvé plutot rigolo et qui te donnera la réponse.
http://forum.hardware.fr/hfr/Progr [...] 0450_1.htm


merci pour ta réponse, j'espérai pas grand chose ce soir :)
oui, ce que je me suis dit. du coup pour tester, j'avais mis un echo avant et après la requête sql et ça me les affichait bien. j'ai même fait un echo de chaque variable à chaque affectation pour vérifier, et ça me les affichait bien. par précaution, j'avais déplacé tout le code php dans le fichier cible.php et l'avais viré du premier fichier, idem, pas de résultat...
sinon, laquelle des syntaxe pour l'utilisation des variables dans la requête est correcte?
 
edit : pour mysql_real_escape_string, c'est "On fait alors un mysql_real_escape_string et un htmlspecialchars sur chacune de ces variables pour éviter que du HTML ne soit inscrit" . j'ai pris ça du tuto "siteduzero.com" :p
 
redit : t'avais raison pour le fait de mettre sur la même page. comme un con, quand j'ai testé les variantes pour la syntaxe des variables, je l'ai fait en ayant laissé le code php dans le premier fichier... :/ c'est bien '$var' qu'il faut utiliser alors. par contre, si je veux laisser le code qui fait la requête sur cette page sans la mettre dans la page cible, comment dois-je procéder?


Message édité par newbee le 15-01-2009 à 23:28:11

---------------
>> [MOD] Another PC in the wall <<
Reply

Marsh Posté le 15-01-2009 à 23:33:29    

elle a l'air bonne ta syntaxe (en meme temps je ne suis pas douée en syntaxe, je fais toujours de l'apprentissage par essai et erreur.... oui je sais pas de commentaire)
 
c'est normal que ça s'affiche dans ton cible.php
 
mais là comme ça, ça ne peut pas insert quoique ce soit en plus mettre des AND partout dans ton if, je trouve ça risqué, tous les champs sont donc obligatoire ?
 
pour que ta requete sql de insert fonctionne il faut qu'elle ait quelque chose à "inserter"
 
là ce qu'il se passe, lorsque tu rempli ton formulaire et que tu valide, ça envoie sur ta page cible.php, mais ta requete sql insert n'a rien vu passé, car quand elle s'est affiché, en meme temps que ton formulaire à rempli, les champs étaient alors vide aussi
 
je ne sais pas si tu as compris, mais lis le lien que je t'ai envoyé

Reply

Marsh Posté le 15-01-2009 à 23:36:44    

il faut que tu rafraichisse ta page entre temps,  
 
l'idée c'est
 
formulaire => tu valide => ça envoie les données par la méthode post sur le fichier cible (ici cible.php)
 
donc la page du formulaire n'a pas de donnée à inserter
 
si tu veux mettre la requete insert dans le meme fichier que ton formulaire il faut que le formulaire cible la page où se trouve ta requete insert. donc la meme page.

Reply

Marsh Posté le 15-01-2009 à 23:47:25    

sisi, j'ai compris et c'est d'ailleurs comme cela que je l'avais compris, mais n'était pas sûr de comment procéder :)
sinon oui, tous les champs sont obligatoires, il s'agit d'une "inscription". là c'est la version brouillon, je vais rajouter des tests sur le contenu des champs plus tard ;) mais là en fait, je voudrais tout faire sur cette page même car après l'inscription, je voudrais aller sur une page cible (accueil) pour laquelle il ne devrait pas y avoir le requête sql INSERT car cette même page d'accueil est sensée être accessible même si on n'est pas enregistré. du coup il me faudrait intercaler une page entre l'enregistrement et l'accueil juste pour l'insertion? :/
je vais jeter un oeil au lien ;)


---------------
>> [MOD] Another PC in the wall <<
Reply

Marsh Posté le 15-01-2009 à 23:58:49    

j'essaierai de découper en plusieurs pages comme tu le suggères dans l'autre thread ;)
merci pour ton aide :jap:


---------------
>> [MOD] Another PC in the wall <<
Reply

Marsh Posté le 16-01-2009 à 00:08:02    

euh tu as bien saisi le principe des sessions ?

Reply

Marsh Posté le 16-01-2009 à 00:18:22    

[:freedatoune] pas tout à fait. je sais que ça permet de rendre des variables accessibles par toutes les pages, mais je sais pas trop comment ça marche. à vrai dire, je n'ai pas encore attaqué ce chapitre du tuto que j'ai mentionné (le chapitre "formulaires" se trouve avant "sessions" :p). c'est pas bien, mais vu que je doit essayer d'avancer assez vite, j'essaie d'apprendre et de faire en même temps :)
en même temps, le but n'est pas trop de rendre ces variables accessibles tout le temps mais juste sur cette page. après, ce sera la base qui sera interrogée si j'ai besoin d'une valeur en particulier.


---------------
>> [MOD] Another PC in the wall <<
Reply

Marsh Posté le 16-01-2009 à 00:18:22   

Reply

Marsh Posté le 16-01-2009 à 00:23:43    

c'est rigolo, car quand je vois ton code, je vois que c'est un site pour des étudiants, L1 L2 L3 etc... avec les filières
je suis étudiante aussi et je fais un site pour ma fac, pour une asso, un site de partage de cours, avec des sessions, restriction d'accès  par année, ça me ferait bien rire que tu sois dans la meme fac que moi
 
je te laisse fini ton formulaire, si tu as des questions sur les sessions n'hésite pas :)
 
tu fais ça pour une école ou juste pour t'amuser ?


Message édité par Artesia le 16-01-2009 à 00:24:56
Reply

Marsh Posté le 16-01-2009 à 00:29:52    

:lol:
moi c'est pour un projet de site où l'on peut s'exercer à faire des qcm classés par filière+matière etc.. c'est malheureusement pas pour m'amuser mais pour gagner des points! on est 3 dessus, moi je m'occupe des base de données, des formulaires et un peu du design.

Spoiler :

fac de créteil ;)


 
merci, bon courage pour ton site ;)
(je repasserai ici si besoin :p)


---------------
>> [MOD] Another PC in the wall <<
Reply

Marsh Posté le 16-01-2009 à 00:36:04    

merci
 
générer des qcm, ça peut etre drole, beaucoup de logique en tout cas :) (j'aime bien la logique, meme si je n'en fais pas pour mes études)
 
je suis en psycho à P5

Reply

Marsh Posté le 16-01-2009 à 23:00:52    

:hello:  
c'est quand même pas que du par coeur la psycho?! je déteste le par coeur :p
 
au fait, solution trouvée pour pas avoir recours à un autre fichier php! rajouter un if pour voir si les variables sont initialisées, cas dans lequel je fais ma requête sql et plus important, else afficher le formulaire. du coup, s'il n'y a pas de variables post, on a le formulaire à remplir et si elles sont pas nulles, on réactualise la même page avec un texte du genre "c bon". voilà ce que ça donne :
 

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
  3.    <head>
  4.        <title>Enregistrement etudiant</title>
  5.        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  6.    </head>
  7.    <body>
  8.    <?php
  9.       /* parametre de connexion de la base de donnee */
  10.   mysql_connect("localhost", "root", "" );
  11.   mysql_select_db("tele_exams" );
  12.   /* si le formulaire est rempli */
  13.   if (isset($_POST['nom']) AND isset($_POST['prenom']) AND isset($_POST['annee'])  AND isset($_POST['filiere']) AND isset($_POST['mail'])  AND isset($_POST['password']))
  14.   {
  15.    $nom = mysql_real_escape_string(htmlspecialchars($_POST['nom']));
  16.    $prenom = mysql_real_escape_string(htmlspecialchars($_POST['prenom']));
  17.    $annee = mysql_real_escape_string(htmlspecialchars($_POST['annee']));
  18.    $filiere = mysql_real_escape_string(htmlspecialchars($_POST['filiere']));
  19.    $mail = mysql_real_escape_string(htmlspecialchars($_POST['mail']));
  20.    $password = mysql_real_escape_string(htmlspecialchars($_POST['password']));
  21.    $password=md5($mail.$password);
  22.    mysql_query("INSERT INTO utilisateurs VALUES('', '$nom', '$prenom', '$annee', '$filiere', '$password', '0', '$mail')" );
  23.    echo "<p>Bienvenue $nom $prenom .</p><p>Félicitations votre inscription a bien été prise en compte !</p>";
  24.    echo '<p><a href="./index.php">Home</a></p>';
  25.   }
  26.   else{/* si le formulaire n' a pas été rempli correctement ou premiere fois */
  27.  ?>
  28.      <form method="post" action="form_etudiant.php">
  29.   <p>
  30.    Nom ...................................... :
  31.    <input type="text" size ="30" name="nom" /> <br/><br/>
  32.    Prénom .................................. :
  33.    <input type="text" size ="30" name="prenom" /> <br/><br/>
  34.    Année en cours ....................... :
  35.    <select name="annee">
  36.     <option value="L1">Licence 1</option>
  37.     <option value="L2">Licence 2</option>
  38.     <option value="L3">Licence 3</option>
  39.     <option value="M1">Master 1</option>
  40.     <option value="M2">Master 2</option>
  41.                     <option value="IUT">IUT</option>
  42.                     <option value="DUT">DUT</option>
  43.    </select> <br/><br/>
  44.    Filière ..................................... :
  45.    <select name="filiere">
  46.     <option value="Informatique">Informtique</option>
  47.     <option value="Mathématiques">Mathématique</option>
  48.     <option value="Chimie">Chimie</option>
  49.     <option value="AES">AES</option>
  50.     <option value="Littéraire">Littéraire</option>
  51.    </select> <br/><br/><br/>
  52.    Adresse mail ........................... :
  53.    <input type="text" size ="30" name="mail" /> <br/><br/>
  54.    Choisissez un mot de passe ..... :
  55.    <input type="password" size ="30" name="password" /> <br/><br/>
  56.    <input type="submit" value="Valider" />
  57.   </p>
  58.  </form>
  59.         <?php }
  60.  mysql_close(); ?>
  61. </body>
  62. </html>


 
manque plus que les tests sur les champs et c'est in the pocket ;) ou du moins pour cette page, il reste les autres... :p


Message édité par newbee le 16-01-2009 à 23:56:01

---------------
>> [MOD] Another PC in the wall <<
Reply

Sujets relatifs:

Leave a Replay

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