[Résolu] Une simple requete SQL ...

Eléphanteau du PHP | 16 Messages

14 mai 2010, 10:30

     <?php

      $connexion = mysql_connect("localhost", "dauvergnej", "dauvergnej");
      $selection_bd = mysql_select_db("web_laboisseraie", $connexion);
      
      
         $titre = $_POST['titre'];
         $jour = $_POST['jour']; 
         $contenu = $_POST['contenu'];
         
         print_r($titre);
         print_r($jour);
         print_r($contenu);
         
          if (empty($_POST['titre']) ){
          echo "Erreur : le champ titre est vide.";
             }else if (empty($_POST['jour']) ){
                echo "Erreur : le champ journée est vide.";
                  }else if (empty($_POST['contenu']) ){
                      echo "Erreur : le champ contenu est vide.";}
                    
                      
                      
      $requete="INSERT INTO `web_laboisseraie`.`ajout_article` (`ajout_article`, `titre`, `jour`, `contenu`) VALUES ('','$titre','$jour','$contenu')";
      $affiche= mysql_query($requete,$connexion) or die(mysql_error($connexion));
      
mysql_close($connexion);    
      ?>
J'ai changé tout ce dont vous aviez parlé. J'ai mis ' ' au lieu de NULL, j'ai changé "date" par "jour" dans PHPmyAdmin ainsi que dans mon code.
Voila ce que me retourne mysql_error : "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 'ISVV (Institut des Sciences de la Vigne et du Vin de l’Université de Bordeaux), ' at line 1"

Quand j'ai vu line 1, j'ai d'abord pensé à la doctype qui était <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> peut être incompatible avec mes requêtes SQL, je l'ai supprimé, mais j'ai toujours le même message d'erreur.
Le passage qu'il cite dans la parenthèse est en fait un passage du contenu du texte envoyé depuis le formulaire dans le champ contenu. Es que cela peut interférer avec mes requêtes ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

14 mai 2010, 18:49

Au moins une de tes variables contient une chaine avec une apostrophe. Du coup si tu l'insères dans ta requête SQL sans la protéger, ta base de données ne sauras pas où commence et où s'arrête ta chaine (qui est justement délimitée par des apostrophes) :)

Pour protéger tes chaines, tu peux utiliser mysql_real_escape_string() :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 16 Messages

20 mai 2010, 17:24

C'est exactement ce qu'il me fallait, merci beaucoup !

Un dernière chose et ça serait parfait, existe t'il une fonction du même genre qui pourrait reconnaître les retours à la ligne et qui les remettrait donc dans l'affichage du contenu ?

Eléphanteau du PHP | 16 Messages

20 mai 2010, 18:05

Je viens de trouver la fonction nl2br()

J'ai essayé
$contenu = nl2br(mysql_real_escape_string($_POST['contenu']));
C'est peut être un peu bourrin ^^v mais pourtant le coloration syntaxique de mon PSPad ne semble pas avoir de problème..

Quelle est la meilleure syntaxe ?

ViPHP
ViPHP | 5462 Messages

20 mai 2010, 18:08

c'est au moment de l'affichage que tu dois faire nl2br et pas a l'insertion dans la base

ViPHP
AB
ViPHP | 5818 Messages

20 mai 2010, 21:59

Juste en passant ...
Le problème est probablement du à ton champ "date". En effet, "date" est un mot clé réservé du langage sql, et il ne devrait donc pas être utilisé comme nom de colonne...
Mysql, dans sa grande tolérance, accepte les colonnes avec le mot date. Je me souviens avoir lu ça lu ça quelque part... Mais effectivement il est très déconseillé de le faire, autrement impossible de transférer ces tables dans un autre sgbd, sauf à renommer cette colonne et modifier toutes les requêtes.

Eléphanteau du PHP | 16 Messages

21 mai 2010, 08:52

C'est bon nl2br marche, merci à vous !

ViPHP
AB
ViPHP | 5818 Messages

21 mai 2010, 16:22

T'as pas vu les tags pour indiquer résolu ?