PHP ET MYSQL

Résolu
Bonjour,

j'essai d'ajouter des données dans ma base sql a laide de php, j'y suis parvenu tt à l'heure une fois et j'ai du faire une erreur de manip et ca ne fonctionne plus je cherche mais je ne vois pas mon erreur voila le script :

aidez moi svp je galère!merci d'avance

<!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" >
<head>
<title>Accueil</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" media="screen" type="text/css" title="Design" href="design3.css" />
</head>
<body>

<?php
mysql_connect("localhost", "root", "");
mysql_select_db("camping");

if (isset($_POST['civilite'])
AND isset($_POST['nom'])
AND isset($_POST['prenom'])
AND isset($_POST['adresse'])
AND isset($_POST['codepostal'])
AND isset($_POST['ville'])
AND isset($_POST['telephone'])
AND isset($_POST['mail'])
AND isset($_POST['message']))

{

$civilite = mysql_real_escape_string(htmlspecialchars($_POST['civilite'])); // On utilise mysql_real_escape_string et htmlspecialchars par mesure de sécurité
$nom = mysql_real_escape_string(htmlspecialchars($_POST['nom']));
$prenom = mysql_real_escape_string(htmlspecialchars($_POST['prenom']));
$adresse = mysql_real_escape_string(htmlspecialchars($_POST['adresse']));
$codepostal = mysql_real_escape_string(htmlspecialchars($_POST['codepostal']));
$ville = mysql_real_escape_string(htmlspecialchars($_POST['ville']));
$telephone = mysql_real_escape_string(htmlspecialchars($_POST['telephone']));
$mail = mysql_real_escape_string(htmlspecialchars($_POST['mail']));
$message = mysql_real_escape_string(htmlspecialchars($_POST['message']));
$message = nl2br($message); // Pour le message, comme on utilise un textarea, il faut remplacer les Entrées par des <br />

// On peut enfin enregistrer :o)
mysql_query("INSERT INTO clients VALUES('', '" . $civilite . "', '" . $nom . "', '" .$prenom.'", "'.$adresse."', '".$codepostal."', '".$ville."', '".$telephone."', '".$mail."', '".$message."')");

}

mysql_close();
?>

</body>
</html>
Configuration: Windows Vista
Firefox 3.0.10

38 réponses

Résumé de la discussion

Plusieurs échanges portent sur l'insertion de données dans une base MySQL via PHP à partir d'un formulaire HTML, avec des erreurs de manipulation et des incohérences dans les noms de champs. Des interventions insistent sur la correspondance entre les noms de champs du formulaire et les clés de $_POST, et sur la correction d'erreurs courantes comme des parenthèses manquantes dans la requête INSERT. En cas de débogage, il est recommandé d'ajouter une clause d'erreur et de corriger la syntaxe de l'insertion, notamment en vérifiant la parenthèse fermante et les guillemets autour des valeurs. D'autres précisent qu'il faut harmoniser les noms des champs (par exemple prenom vs prénom) et tester avec print_r($_POST) pour vérifier le flux de données avant l'insertion.

Bobot (l’IA à votre service)
  1. je sais pas j'ai tellement fait de modif tte cet aprem que franchment je suis incapable de le dire en tt cas votre requete fonctionne a merveille !merci bcp
    1. je sais pas d'ou venait mon erreur mais un grand merci a vous deux ca fonctionne ENFINNNNNNNNN

      j'vais bien dormir cette nuit^^
      1. et elle venait d'ou ton erreur ?
      2. @lewis34la sienne je ne sais pas, mais je peux te montrer celle de ton message 39
      3. @le pèreah ?

        edit je crois que j'ai vu..
        j'ai mis ça "''));

        alors que c'etait ca
        "') ');

        l'erreur est humaine et la fatigue aussi lol !..
      4. @lewis34C'est bien d'être indulgent avec soi-même...
        Errare humanum est, perseverare diabolicum... et dans le genre perseverare tu as fait assez fort
    2. $req=mysql_query('INSERT INTO clients (nom, prenom, adresse, codepostal, ville, telephone, mail, message) VALUES("'.$nom.'", "' .$prenom.'", "'.$adresse.'", "'.$codepostal.'", "'.$ville.'", "'.$telephone.'", "'.$mail.'", "'.$message.'"') );

      euh j'ai retapé la requete en virant le or die ,
      les ( sont correctes il me semble ..
      1. il manque une ) à la fin de la requête
        $req=mysql_query('INSERT INTO clients (nom, prenom, adresse, codepostal, ville, telephone, mail, message) VALUES("'.$nom.'", "' .$prenom.'", "'.$adresse.'", "'.$codepostal.'", "'.$ville.'", "'.$telephone.'", "'.$mail.'", "'.$message.'")') or die (mysql_error());
        1. bien vu ;-)
      2. oui mai lo on essaye de debogger un code simple alors autant faire simple .. ;-) non ?

        apart l'utilisation melangée des ' et des " franchement je vois pas ou peut etre l'erreur (et c'est mon job..)

        ton code
        mysql_connect("localhost", "root", "")OR die('Erreur de sélection de la base');
        mysql_select_db("camping")OR die('Erreur de sélection de la base'); 
        

        mon code
        mysql_connect('localhost', 'root' '')OR die('Erreur de sélection de la base');
        mysql_select_db('camping')OR die('Erreur de sélection de la base'); 
        1. les { } n'empêchent pas de marcher.
          Pas besoin de suggérer des manips qui n'ont aucun rapport avec le problème
          Surtout qu'il faudra les remettre après quand il remettra les conditions
          1. <?php
            
            mysql_connect("localhost", "root", "")OR die('Erreur de sélection de la base');
            mysql_select_db("camping")OR die('Erreur de sélection de la base');
            //{ => inutile
            $nom = $_POST['nom'];
            $prenom = $_POST['prenom'];
            $adresse = $_POST['adresse'];
            $codepostal = $_POST['codepostal'];
            $ville = $_POST['ville'];
            $telephone = $_POST['telephone'];
            $mail = $_POST['mail'];
            $message = $_POST['message'];
            
            
            $req=mysql_query('INSERT INTO clients (nom, prenom, adresse, codepostal, ville, telephone, mail, message) VALUES("'.$nom.'", "' .$prenom.'", "'.$adresse.'", "'.$codepostal.'", "'.$ville.'", "'.$telephone.'", "'.$mail.'", "'.$message.'"') or die (mysql_error());
            //} => inutile 
            if($req)
            {
            echo 'enregisttrement reussi';
            }
            else
            {
            echo' un probleme est survenu<br/>'.$req;
            }
            
            
            
            mysql_close (); 


            ca devrais marcher tu lui colle des {} alors qu'il y a plus de conditions
            1. bon jai ajouté ce que tu m'a dit il m'indique ca maintenant mais je vois tjs pas quelle erreur j'aurais pu faire
              Pour ce qui est de la clé j'avai déja mi une clé primaire (5) je vois pas ce que ta voulu me dire

              voici l'erreur :
              You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

              et mon script :
              <?php

              mysql_connect("localhost", "root", "")OR die('Erreur de sélection de la base');
              mysql_select_db("camping")OR die('Erreur de sélection de la base');
              {
              $nom = $_POST['nom'];
              $prenom = $_POST['prenom'];
              $adresse = $_POST['adresse'];
              $codepostal = $_POST['codepostal'];
              $ville = $_POST['ville'];
              $telephone = $_POST['telephone'];
              $mail = $_POST['mail'];
              $message = $_POST['message'];

              $req=mysql_query('INSERT INTO clients (nom, prenom, adresse, codepostal, ville, telephone, mail, message) VALUES("'.$nom.'", "' .$prenom.'", "'.$adresse.'", "'.$codepostal.'", "'.$ville.'", "'.$telephone.'", "'.$mail.'", "'.$message.'"') or die (mysql_error());
              }
              if($req)
              {
              echo 'enregisttrement reussi';
              }
              else
              {
              echo' un probleme est survenu<br/>'.$req;
              }

              mysql_close ();

              ?>
              1. Même pour un débutant, il y a des erreurs grossières dans ta requête, que tu n'avais pas dans ton premier message. Merci à ceux qui t'ont aidé à ajouter des erreurs là où il n'y en avait pas au lieu de t'aider à résoudre le vrai problème.

                Si tu mets les noms des champs dans la requête, il faut qu'ils correspondent aux values. donc pas de '' (qui correspondait à un champ autoincrémenté que tu ne mets pas dans la liste) et une seule fois $mail
                Et à la fin du mysql_query, ajoute un or die (mysql_error()) pour le cas où il y resterait un problème.
                1. oupss c'est exact que dans ma 1ere reponse j'ai rajouté le nom des champs et laisser le '' des values merci ctrlC .. lol !
              2. rajoute deja un champ id type int(11) autoincrement.

                une clef dans ta config de table est nécessaire sinon je t'explique pas le basard pour retrouver un enregistrement.. ;-)

                ensuite :
                place un print_r($_POST) au debut de ta page histoire de voir si tu recupere bien tes valeurs post
                puis
                $req=mysql_query('INSERT INTO clients (nom, prenom, adresse, codepostal, ville, telephone, mail, message) VALUES("'.$nom.'", "' .$prenom.'", "'.$adresse.'", "'.$codepostal.'", "'.$ville.'", "'.$telephone.'", "'.$mail.'", "'.$message.'"') or die (mysql_error()); 
                
                if($req)
                {
                echo 'enregisttrement reussi';
                }
                else
                {
                echo' un probleme est survenu<br/>'.$req;
                }


                comme ça si ca marche ca te le dis et si ca marche pas tu vois ce que tu insere et ou tu l'insere

                et pourquoi tu met une { ici

                mysql_connect("localhost", "root", "")OR die('Erreur de sélection de la base');
                mysql_select_db("camping")OR die('Erreur de sélection de la base');
                {

                si tu a viré ton if isset il faut les enlever
                1. donc j'ai toujours le meme probleme je n'arrive pas a insérer les données de mon formulaire dans ma base mysql
                  j'ai modifié le script au plus simple mais visiblement ca change rien je comprend pas je débute en plus c est la galère! J'ai aucune erreur qui s'affiche et aucune donnée qui s'ajoute!!

                  ma clé primaire de la table c'est l'id autoincrement! ton aide est la bienvenue!

                  voici mon script :

                  <?php

                  mysql_connect("localhost", "root", "")OR die('Erreur de sélection de la base');
                  mysql_select_db("camping")OR die('Erreur de sélection de la base');
                  {
                  $nom = $_POST['nom'];
                  $prenom = $_POST['prenom'];
                  $adresse = $_POST['adresse'];
                  $codepostal = $_POST['codepostal'];
                  $ville = $_POST['ville'];
                  $telephone = $_POST['telephone'];
                  $mail = $_POST['mail'];
                  $message = $_POST['message'];

                  mysql_query("INSERT INTO clients(nom, prenom, adresse, codepostal, ville, telephone, mail, message) VALUES('', '".$nom."', '".$prenom."', '".$adresse."', '".$codepostal."', '".$ville."', '".$telephone."', '".$mail."', '".$mail."', '".$message."')");

                  }

                  mysql_close ();

                  ?>
                  1. Dans quel état est ton code et quels sont les symptômes actuellement ?
                    1. ya plus personne pour maider?? toujours pas résolu mon probleme qui peut m'aider??^^
                      merci à vous
                      1. non pas un simple numéro,un simple champs nommé id entier auto-incrément
                        et ce champs c'est lui qui affecte des numéro a tes enregistrements et dans ton code php tu le signal juste dans ta requete sql avec des '' vide
                        1. jvais essayer de metre un simple numero en clé primaire auto increment mai s doi je le signaler dans ma page php ou juste mettre des cotes dans la requete?
                          1. ben je suis pas fort en sql mais
                            peut être le problème vient du fait que tu n'as pas de clé primaire dans ta table

                            pourquoi tu ne met pas un champ nommé 'id' auto-increment et qui soit t'as clé primaire tu ne va rien perdre
                            1. j'ai plus que huit champs nom prenom adresse codepostal, ville, telephone, mail, message sans clé primaire dans ma table et mon code je l'avai modifié au passage quand j'ai enlevé civilité

                              voici le code modifié :

                              <?php
                              mysql_connect("localhost", "root", "");
                              mysql_select_db("camping");

                              if (isset($_POST['nom'])
                              AND isset($_POST['prenom'])
                              AND isset($_POST['adresse'])
                              AND isset($_POST['codepostal'])
                              AND isset($_POST['ville'])
                              AND isset($_POST['telephone'])
                              AND isset($_POST['mail'])
                              AND isset($_POST['message']))

                              {

                              // On utilise mysql_real_escape_string et htmlspecialchars par mesure de sécurité
                              $nom = mysql_real_escape_string(htmlspecialchars($_POST['nom']));
                              $prenom = mysql_real_escape_string(htmlspecialchars($_POST['prenom']));
                              $adresse = mysql_real_escape_string(htmlspecialchars($_POST['adresse']));
                              $codepostal = mysql_real_escape_string(htmlspecialchars($_POST['codepostal']));
                              $ville = mysql_real_escape_string(htmlspecialchars($_POST['ville']));
                              $telephone = mysql_real_escape_string(htmlspecialchars($_POST['telephone']));
                              $mail = mysql_real_escape_string(htmlspecialchars($_POST['mail']));
                              $message = mysql_real_escape_string(htmlspecialchars($_POST['message']));
                              $message = nl2br($message); // Pour le message, comme on utilise un textarea, il faut remplacer les Entrées par des <br />

                              // On peut enregistrer

                              mysql_query('INSERT INTO clients (nom, prenom, adresse, codepostal, ville, telephone, mail, message) VALUES("'.$nom.'", "' .$prenom.'", "'.$adresse.'", "'.$codepostal.'", "'.$ville.'", "'.$telephone.'", "'.$mail.'", "'.$message.'"') or die (mysql_error());

                              }

                              mysql_close();
                              ?>

                              1. Oui entre temps j'ai enlevé civilité et j'ai pas mi de clé primaire donc ca donne

                                que veut dire sa ?
                                d'après ton code tu as une clé primaire qui est auto-incrément donc:
                                table (id,civilité,nom,prenom,adresse,codepostale,ville,telephone,mail,message)

                                et si vous avez enlever le champs civilité de ta table alors la variable $civilité de ton code
                                • 1
                                • 2