Se connecter avec
S'enregistrer | Connectez-vous

Enregistrement de données de formulaire dans une BDD en PHP

Dernière réponse : dans Programmation

Bonjour,

Voila j'ai un problème, j'ai fait un formulaire et j'essaye que lorsque les gens entrent qqchose dans un champ du formulaire cela s'enregistre dans ma BDD

Voila mon code :

  1. <form method="post" action="traitement.php">
  2.  
  3. <dl>
  4. <dt><label><input type="checkbox" name="choix1" id="choix1" onchange="affchoix(this.id)" />Je l'ai</label></dt>
  5. <dd id="donneeschoix1"><textarea name=textarea_choix1 id=textarea_choix1 rows=1 cols=5></textarea></dd>
  6.  
  7. <br />
  8.  
  9. <dt><label><input type="checkbox" name="choix2" id="choix2" onchange="affchoix(this.id)" />Je la cherche</label></dt>
  10. <dd id="donneeschoix2"><textarea name=textarea_choix2 id=textarea_choix2 rows=1 cols=5></textarea></dd>
  11.  
  12. <br />
  13.  
  14. <dt><label><input type="checkbox" name="choix3" id="choix3" onchange="affchoix(this.id)" />Je ne la cherche pas</label></dt>
  15. <dd id="donneeschoix3"><textarea name=textarea_choix3 id=textarea_choix3 rows=1 cols=5></textarea></dd>
  16.  
  17. <br />
  18.  
  19. <dt><label><input type="checkbox" name="choix4" id="choix4" onchange="affchoix(this.id)" />Je l'attends</label></dt>
  20. <dd id="donneeschoix4"><textarea name=textarea_choix4 id=textarea_choix4 rows=1 cols=5 ></textarea></dd>
  21.  
  22. <br />
  23.  
  24. <dt><label><input type="checkbox" name="choix5" id="choix5" onchange="affchoix(this.id)" />Je l'ai en double</label></dt>
  25. <dd id="donneeschoix5"><textarea name=textarea_choix5 id=textarea_choix5 rows=1 cols=5 ></textarea></dd>
  26.  
  27.  
  28. </dl>
  29.  
  30. <input type="submit" value="Valider">
  31.  
  32. </form>
  33.  
  34.  
  35.  
  36. <?php
  37. try
  38. {
  39. $bdd = new PDO('mysql:host=localhost;dbname=perok6_gestion', 'perok6', 'd5swpsr');
  40.  
  41. }
  42. catch(Exception $e)
  43. {
  44. die('Erreur : '.$e->getMessage());
  45. }
  46.  
  47. <?php
  48. $req = $bdd->prepare('INSERT INTO gestion(case_1_ai, case_2_cherche, case_3_pas, case_4_attend, case_5_double) VALUES($_POST['choix1'], $_POST['choix2'], $_POST['choix3'], $_POST['choix4'], $_POST['choix4'], $_POST['choix1'])');
  49.  
  50.  
  51. echo 'Les Modifications ont bien été enregistrées !';
  52. ?>


Mais j'ai un probleme, quand j'essaye sur wamp cela m'affiche ça : Parse error: parse error in C:\wamp\www\Formulaire\fiche_bretagne.php on line 128

Pouvez-vous m'aider ?

Merci d'avance,
Cordialement !
Lassé par la pub ? Créez un compte
Expert Programmation

Bonsoir perok68,

L'erreur est assez explicite, tu as une erreur de syntaxe à la ligne 128 de ton fichier fiche_bretagne.php.

J'imagine que c'est la ligne :
  1. $req = $bdd->prepare('INSERT INTO gestion(case_1_ai, case_2_cherche, case_3_pas, case_4_attend, case_5_double) VALUES($_POST['choix1'], $_POST['choix2'], $_POST['choix3'], $_POST['choix4'], $_POST['choix4'], $_POST['choix1'])');


Qu'il faudrait remplacer par quelque chose du genre :
  1. $req = $bdd->prepare('INSERT INTO gestion(case_1_ai, case_2_cherche, case_3_pas, case_4_attend, case_5_double) VALUES('.$_POST['choix1'].', '.$_POST['choix2'].', '.$_POST['choix3'].','. $_POST['choix4'].','.$_POST['choix4'].', '.$_POST['choix1'].')');


Mais ça sent l'injection SQL ça quand même :) 

Re bonsoir,

En fait je pense qu'il serait plus judicieux de tout refaire !

Donc pour résumer, je veux que lorsque que l'utilisateur rentre une donnée dans un textarea (après avoir cocher la checkbox) cela s'enregistre dans ma BDD

Dans ma BDD , une table : "gestion" qui contient 6 champs, voici les 6 champs : pseudo, case_1_ai, case_2_cherche, case_3_pas, case_4_attend, case_5_double.

Et enfin j'ai un formulaire (qui, lorsque l'on coche la checkbox un textarea apparait pour entrer ses données) .

Maintenant , il faut passer au concret !
Je pense qu'il faudrait passer par la variable superglobale $_POST qui est en relation avec mon formulaire.
Donc c'est quelquechose avec "INSERT INTO gestion" etc ... mais je ne sais pas si il faut prendre une requete préparée ... et comment bien faire par la suite ..

Pouvez-vous m'aider SVP ?
Ce serait très gentil !

Merci d'avance,
Cordialement !

Expert Programmation

Bah c'est toi qui demande des informations sur les requêtes préparées.
Là tu as des exemples de requêtes préparées qui te montrent comment bien faire des requêtes préparées, tout en évitant les SQL Injections (en ne mettant pas de $_POST directement dans ta requête sans les échapper...)

Re,

Oui mais pourrais tu a m'aider a faire mon code car j'en ai fait un nouveau maintenant :

insertion1.php

  1. <html>
  2. <head>
  3. <title>insertion de données en PHP :: partie 1</title>
  4. </head>
  5. <body>
  6. <form name="insertion" action="insertion2.php" method="POST">
  7. <table border="0" align="center" cellspacing="2" cellpadding="2">
  8. <tr align="center">
  9. <td>nom</td>
  10. <td><input type="text" name="nom"></td>
  11. </tr>
  12. <tr align="center">
  13. <td>prenom</td>
  14. <td><input type="text" name="prenom"></td>
  15. </tr>
  16. <tr align="center">
  17. <td>adresse</td>
  18. <td><input type="text" name="adresse"></td>
  19. </tr>
  20. <tr align="center">
  21. <td>code postal</td>
  22. <td><input type="text" name="codePostal"></td>
  23. </tr>
  24. <tr align="center">
  25. <td>numéro de téléphone</td>
  26. <td><input type="text" name="telephone"></td>
  27. </tr>
  28.  
  29. <tr align="center">
  30. <td colspan="2"><input type="submit" value="insérer"></td>
  31. </tr>
  32. </table>
  33. </form>
  34. </body>
  35. </html>


et insertion2.php :

  1. <?php
  2. //connection au serveur
  3. $cnx = mysql_connect( "localhost", "perok6", "monmotdepassejuste" ) ;
  4.  
  5.  
  6. //récupération des valeurs des champs:
  7. //nom:
  8. $nom = $_POST["nom"] ;
  9. //prenom:
  10. $prenom = $_POST["prenom"] ;
  11. //adresse:
  12. $adresse = $_POST["adresse"] ;
  13. //code postal:
  14. $cp = $_POST["codePostal"] ;
  15. //numéro de téléphone:
  16. $tel = $_POST["telephone"] ;
  17.  
  18. //création de la requête SQL:
  19. $sql = "INSERT INTO gestion (case_1_ai, case_2_cherche, case_3_pas, case_4_attend, case_5_double)
  20. VALUES ( '$nom', '$prenom', '$adresse', '$cp', '$tel') " ;
  21.  
  22. //exécution de la requête SQL:
  23. $requete = mysql_query($sql, $cnx) or die( mysql_error() ) ;
  24.  
  25. //affichage des résultats, pour savoir si l'insertion a marchée:
  26. if($requete)
  27. {
  28. echo("L'insertion a été correctement effectuée") ;
  29. }
  30. else
  31. {
  32. echo("L'insertion à échouée") ;
  33. }
  34. ?>


Mais il m'affiche un message d'erreur apres avoir rempli mon formulaire et avoir validé :

Warning: mysql_select_db() [function.mysql-select-db]: Access denied for user 'perok6'@'localhost' (using password: NO) in /home/perok6/www/lol/insertion2.php on line 6

Warning: mysql_select_db() [function.mysql-select-db]: A link to the server could not be established in /home/perok6/www/lol/insertion2.php on line 6

Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /home/perok6/www/lol/insertion2.php on line 25
Access denied for user 'perok6'@'localhost' (using password: NO)

Mais mes identifiants sont justes !!
Peux tu m'aider ?
Merci .

En effet, quel idiot :D 

Encore une question, maintenant après avoir rempli le formulaire, il m'affiche ce message d'erreur :

Unknown column 'case_5_double' in 'field list'

Comment résoudre ce problème ?

Merci d'avance :) 

EDIT : j'ai fait fait une faute de frappe dans phpMyAdmin , excusez moi :) 

Maintenant, ça marche !!!!!!

Mais, comment puis je récupérer le pseudo de la personne connecté car j'ai un champ "pseudo" dans phpmyadmin mais je ne veux pas que les utilisateur aient a le rentrer. Pouvez vous m'aider ?
Expert Programmation

C'est que la colonne case_5_double n'existe pas dans la base de données.

Edit: mince, t'as répondu entre temps.

Tu fais un SELECT pseudo FROM taTable WHERE ta_condition

Mais en fait je veux que lorsque l'utilisateur se connecte, en meme temps qu'il clique sur Valider du formulaire son pseudo est récupéré et enregistré dans une autre table (et dans un champ deja créé)que celle ou il y a tous les pseudo et mdp.

Est ce bien ce que tu m'as indiqué ?
Expert Programmation

Bah pour récupérer des données depuis une table, c'est un SELECT pseudo FROM laTable

Le problème est de savoir avec quelle(s) donnée(s) tu peux récupérer ce pseudo ? Est-ce que tu as une adresse mail par exemple, qui te permet d'avoir un pseudo en fonction d'une adresse, ou quelque chose comme ça ?

Parce qu'il faudra que tu récupères le bon pseudo :) 
Expert Programmation

Comment veux-tu que je sache dans quel fichier tu dois mettre ça moi ?
C'est ton projet, avec ton arborescence de fichiers, ta façon de penser/organiser...etc.

Je ne suis pas devin :spamafote: 

Tu sais quel est le but de ta requête, donc tu sais à quel moment tu vas en avoir besoin.
Lassé par la pub ? Créez un compte
Tom's guide dans le monde