[RESOLU] mes données du formulaire ne s'insèrent pas dans ma table

Petit nouveau ! | 3 Messages

08 août 2012, 14:24

Bonjour,
Je suis débutant et je n'arrive pas à faire en sorte que mon formulaire envoie les données dans ma bdd. J'ai cherché un peu partout depuis 2 jours et toujours pas de solution...
le message d'erreur: Parse error: syntax error, unexpected '{' in /htdocs/public/www/commentaires.php on line 12

// On commence par récupérer les champs
if(isset($_POST['email']))      $email=$_POST['email'];
else      $email="";
if(isset($_POST['nom']))      $nom=$_POST['nom'];
else      $nom="";
if(isset($_POST['commentaire']))      $commentaire=$_POST['commentaire'];
else      $commentaire="";

// On vérifie si les champs sont vides
if(empty($email) OR empty($nom) OR empty($commentaire)
    {
    echo '<font color="red">Attention, tous  les champs doivent être remplis!</font>';
    }
// Aucun champ n'est vide, on peut enregistrer dans la table
else     
    {
	
// connexion à la base
$db = mysql_connect('mon serveur', 'login', 'mot de passe')  or die('Erreur de connexion '.mysql_error());

// sélection de la base  

    mysql_select_db('ma_base_de_données',$db)  or die('Erreur de selection '.mysql_error()); 

 // on écrit la requête sql
    $sql = "INSERT INTO commentaires (id, email, nom, commentaire,) VALUES('','$email','$nom','$commentaire')";
    
    // on insère les informations du formulaire dans la table
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 

// on affiche le résultat pour le visiteur
    echo 'Votre commentaire été envoyé.';

    mysql_close();  // on ferme la connexion
    }  
<form method="post" action="#">
<label for="nom">Votre nom</label>
<input type="text" name="nom">
<label for="email">Votre email</label>
<input type="text" name="email">
<label for="Commentaire">Commentaire</label>
<textarea name="commentaire" cols="50" rows="20"></textarea>
 <input type="submit" name="envoyer" value="envoyer" />
</form>

Eléphant du PHP | 190 Messages

08 août 2012, 14:27

Salut,

Il manque une parenthèse
if(empty($email) OR empty($nom) OR empty($commentaire)) // il manquait une parenthèse ici
    {
    echo '<font color="red">Attention, tous  les champs doivent être remplis!</font>';
    }
;)

Petit nouveau ! | 3 Messages

08 août 2012, 14:46

Cool merci beaucoup!

Be maintenant j'ai une autre 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 ') 'VALUES('','$email','$nom','$commentaire')

Petit nouveau ! | 3 Messages

08 août 2012, 15:00

Ca y est !!!

La solution en ce qui me concerne:

J'avais oublié la condition
if (isset($_POST['envoyer'])) {
et j'ai corrigé la syntaxe de ma requête:
$sql = "INSERT INTO commentaires VALUES ('', '" . $email . "', '" . $nom . "', '" . $commentaire . "')";
Donc le code qui marche est:

// On commence par récupérer les champs
if(isset($_POST['email']))      $email=$_POST['email'];
else      $email="";
if(isset($_POST['nom']))      $nom=$_POST['nom'];
else      $nom="";
if(isset($_POST['commentaire']))      $commentaire=$_POST['commentaire'];
else      $commentaire="";

if (isset($_POST['envoyer'])) //si on envoie
        {

// On vérifie si les champs sont vides
if(empty($email) OR empty($nom) OR empty($commentaire))
    {
    echo '<font color="red">Attention, tous  les champs doivent être remplis!</font>';
    }
// Aucun champ n'est vide, on peut enregistrer dans la table
else     
    {
	
// connexion à la base
$db = mysql_connect('serveur', 'login', 'motdepasse')  or die('Erreur de connexion '.mysql_error());

// sélection de la base  

    mysql_select_db('ma bdd',$db)  or die('Erreur de selection '.mysql_error()); 

 // on écrit la requête sql
    $sql = "INSERT INTO commentaires VALUES ('', '" . $email . "', '" . $nom . "', '" . $commentaire . "')";
    
    // on insère les informations du formulaire dans la table
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 

// on affiche le résultat pour le visiteur
    echo 'Votre commentaire été envoyé.';

    mysql_close();  // on ferme la connexion
    }  
}

Eléphant du PHP | 190 Messages

08 août 2012, 20:29

Ok ;)

Juste pour infos, tu vérifies deux fois tes variables inutilement.

En fait, empty fait le même travail que !isset. Il vérifie si une variable est vide mais aussi son existence.

Donc le code suivant fait pareil que le tien en économisant pas mal de lignes.
if (isset($_POST['envoyer'])) //si on envoie
      {
     // On vérifie si les champs sont vides
     if(empty($_POST['email']) OR empty($_POST['nom']) OR empty($_POST['commentaire']))
          {
          echo '<font color="red">Attention, tous  les champs doivent être remplis!</font>';
          }
     else // Aucun champ n'est vide, on peut enregistrer dans la table 
         {
         $email=$_POST['email'];
         $nom=$_POST['nom'];
         $commentaire=$_POST['commentaire'];
         // connexion à la base
         $db = mysql_connect('serveur', 'login', 'motdepasse')  or die('Erreur de connexion '.mysql_error());
         // sélection de la base  
         mysql_select_db('ma bdd',$db)  or die('Erreur de selection '.mysql_error());
         // on écrit la requête sql
         $sql = "INSERT INTO commentaires VALUES ('', '" . $email . "', '" . $nom . "', '" . $commentaire . "')";
         // on insère les informations du formulaire dans la table
         mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
        // on affiche le résultat pour le visiteur
        echo 'Votre commentaire été envoyé.';
        mysql_close();  // on ferme la connexion
        }  
}
Autre chose, tu insère les données directement issues de ton formulaire dans la base de données sans les protéger.

Regarde du coté des filter_var pour ton email ainsi que mysql_real_escape_string pour l'insertion.

Bonne continuation ;)