Requête INSERT INTO problème

Résolu
omlaly - 9 févr. 2013 à 17:24
 omlaly - 15 févr. 2013 à 13:52
Bonjour

Ce n'est pas ma première requête INSERT INTO que je fais (les autres fonctionnent) mais celle là ne veut pas marcher :
$villages=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['villages'])));
$categorie=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['categorie'])));
$titre_article=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['titre_article'])));
$texte_article=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['texte_article'])));
$auteur_article=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['auteur_article'])));

// Insertion de l'article dans la base de données
// Enregistrement des valeurs dans la base de données
$query_insertion_articles = mysql_query("INSERT INTO articles VALUES('',".$_POST['villages']."".$_POST['categorie'].", '$titre_article','$texte_article',".$_POST['auteur_article'].")'") or die ('Erreur sur la requête SQL concernant l\'insertion des articles'.$query_insertion_articles.'
'.mysql_error());



A noter que "villages" et "categories" sont des listes déroulantes où je dois choisir un item.

L'erreur est (j'ai mis pour tester comme titre 'Mon premier article' et comme contenu 'nbv' (c'est un éditeur tinymce)) :
Erreur sur la requête SQL concernant l'insertion des articles
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 ' 'Mon premier article','nbv

',)'' at line 1


En attendant vos réponses, je continue mes recherches...
Cordialement
A voir également:

38 réponses

cs_Malkuth Messages postés 268 Date d'inscription samedi 22 février 2003 Statut Membre Dernière intervention 24 avril 2013 4
14 févr. 2013 à 21:48
Dans un premier temps on va voir le HTML,

D'abord, si tu prend le temps de le regarderde pret, tu va voir de petite incohérence :
des <tr> et </tr> manquants,
ensuite, c'est le méli-mélo dans les formulaire, mets tout dans le même, chaque formulaire est indépendant donc là quand tu click pour le soumettre, les select qui ne sont pas dans le même formulaire ne sont pas poster!

voilà à quoi ca devrais ressembler :
<form action= 'article_post.php' method='POST'> 
 

  <center>
    Poster un article 
   

   Catégories :
   <select name ='categorie'>
    <option value= "Monuments_a_visiter">Monuments_a_visiter</option>
    <option value="Musees">Musees</option>
    <option value="Hebergements">Hebergements</option>
    <option value="Cinemas">Cinemas</option>
    <option value="Spectacles_et_fetes_locales">Spectacles_et_fetes_locales</option>
    <option value="Circuits_praticables">Circuits_praticables</option>
    <option value="Boutiques">Boutiques</option>
    <option value="Restaurants">Restaurants</option>
    <option value="Parkings">Parkings</option>
    <option value="Bonnes_adresses_de_visiteurs">Bonnes_adresses_de_visiteurs</option>
    <option value="Evenements_sportifs">Evenements_sportifs</option>
    <option value="Sports_praticables">Sports_praticables</option>
    <option value="Medecine">Medecine</option>
   </select>
   

   Villages :
   <select name='villages'>
    <option value="Aramon">Aramon</option>
   </select>
   


   Titre,
,

----

Article,
<textarea name="texte_article"  rows="15" cols="80" style="width: 80%"></textarea>,

----

Auteur(s)
,
,

----

,


  </center>
 

</form>


Donc ton php devrais ressembler a :
<form action='article_post.php' method='POST'>
 

  <center>
    Poster un article 
   

   Catégories :
   <select name ='categorie'>
    <?php 
$categories = "SELECT nom_categorie FROM categories"; 
$result = mysql_query($categories) or die("Erreur sur la requête SQL concernant les catégories."); 
while ($row=mysql_fetch_array($result)) // mysql_fetch_array = Retourne une ligne de résultat MySQL sous la forme d'un tableau associatif, d'un tableau indexé, ou les deux
{ 
 echo '<option value="'.$row['0'].'">'.$row['0'].'</option>';
}  
?>
   </select>
   

   Villages :
   <select name='villages'>
    <?php 
$villages = "SELECT nom_village FROM villages"; 
$result = mysql_query($villages) or die("Erreur sur la requête SQL concernant les villages.");
while ($row=mysql_fetch_array($result)) // mysql_fetch_array = Retourne une ligne de résultat MySQL sous la forme d'un tableau associatif, d'un tableau indexé, ou les deux
{ 
 echo '<option value="'.$row['0'].'">'.$row['0'].'</option>';
} ?>
   </select>
   


   Titre,
,

----

Article,
<textarea name="texte_article"  rows="15" cols="80" style="width: 80%"></textarea>,

----

Auteur(s)
,
,

----

,


  </center>
 

</form>
3
J'ai réussi en effectuant cette requête mais elle n'insère pas ce que l'utilisateur a choisi depuis les deux listes déroulantes :
$query_insertion_articles = mysql_query("INSERT INTO articles VALUES('', '$villages', '$categorie','','$titre_article', '$texte_article','$auteur_article')") or die ('Erreur sur la requête SQL concernant l\'insertion des articles'.mysql_error());


Les variables des listes déroulantes sont : $villages et $categorie.

En attendant vos réponses, je continue mes recherches...
Cordialement
0
Bonjour,

J'espère que vous avez passé une bonne nuit !

J'ai essayé de récupérer le contenu des listes déroulantes avec *_GET ce qui donne la requête suivante :
$query_insertion_articles = mysql_query("INSERT INTO articles VALUES('',  .".$_GET['villages']."', ".$_GET['categorie'].",'','$titre_article', '$texte_article','$auteur_article')") or die ('Erreur sur la requête SQL concernant l\'insertion des articles'.mysql_error());


ce qui donne l'erreur suivante :
Erreur sur la requête SQL concernant l'insertion des articlesYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '', ,'','Mon premier article', 'le contenu de larticle

','')' at line 1


Toujours le problème des listes déroulantes, je n'arrive pas à sauvegarder dans la base de données l'item sélectionné à partir de la liste déroulante. Si quelqu'un sait, qu'il m'aide !!!

En attendant vos réponses, je continue mes recherches...
Cordialement
0
Pour information, les deux listes déroulantes sont construites comme ça :

Villages :
<?php 
$villages =  "SELECT nom_village FROM  villages"; 
$result = mysql_query($villages) or die("Erreur sur la requête SQL concernant les villages."); 

echo "<form action='article_post.php' method='POST'> 
Villages : 
<select name='villages'>"; 
while ($row=mysql_fetch_array($result))
{ 
echo"<option>$row[0]</option>"; 
} 
echo"</select>
</form>"; 
?>


Catégories :
<?php 
$categories = "SELECT nom_categorie FROM categories"; 
$result = mysql_query($categories) or die("Erreur sur la requête SQL concernant les catégories."); 

echo "<form action='article_post.php' method='POST'> 
 Poster un article 
Catégories :
    <select name ='categorie'>"; 
while ($row=mysql_fetch_array($result))
{ 
echo"<option>$row[0]</option>"; 
} 
echo"</select>"; 
?>

Cordialement
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Juste pour info : avant la requête SQL, j'ai mis ça :
$villages=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST["villages"])));
$categorie=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['categorie'])));
$titre_article=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['titre_article'])));
$texte_article=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['texte_article'])));
$auteur_article=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['auteur_article'])));


Cordialement
0
Le pire c'est que sur PHPMyAdmin, la requête fonctionne mais pas depuis la page Internet.
J'ai copié/collé la requête PHP qui marche sur PHPMyAdmin sur ma page ce qui donne :
$query_insertion_articles = mysql_query("INSERT INTO articles (nom_village,nom_categorie,titre_article, texte_article, auteur_article) VALUES (\'$villages\',\'$categorie\',\'$titre_article\', \'$texte_article\', \'$auteur_article\')") or die ('Erreur sur la requête SQL concernant l\'insertion des articles'.mysql_error());


Le message d'erreur est le suivant :
Erreur sur la requête SQL concernant l'insertion des articlesYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\'\',\'\',\'titre\', \'contenu de l\'article

\', \'\')' at line 1



Pourquoi une requête SQL marcherait depuis PHPMyAdmin et pas depuis le site ?

Cordialement
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
10 févr. 2013 à 21:46
Salut,

Apparemment c'est un problème de quote (').
"contenu de l\'article" ?
Essayes avec des données dans les listes qui ne contiennent pas de quote...

bye...
0
Sur cet exemple, c'est parce que j'ai mis comme contenu d'article : contenu de l'article.

Mais, maintenant si j'essaye avec :
comme titre de l'article : Mon premier article
comme contenu de l'article : Contenu du premier article

L'erreur suivante apparait :
Erreur sur la requête SQL concernant l'insertion des articlesYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\'\',\'\',\'Mon premier article\', \'Contenu du premier article</p&g' at line 1


Je te mets la requête SQL que j'ai fait :
$query_insertion_articles = mysql_query("INSERT INTO articles (nom_village,nom_categorie,titre_article, texte_article, auteur_article) VALUES (\'$villages\',\'$categorie\',\'$titre_article\', \'$texte_article\', \'$auteur_article\')") or die ('Erreur sur la requête SQL concernant l\'insertion des articles'.mysql_error());


Cordialement
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
11 févr. 2013 à 10:28
Salut,

tu as un problème sur la génération de ta requête :
- les simples quotes sont obligatoires pour les champs non numériques,
- la simple quote n'a pas besoin de caractère d'échappement dans ton cas,
- tu dois gérer le cas où tu n'as pas de valeur (null/empty string).
0
Bonjour,

Merci de ta réponse mais je ne comprends pas ce qui bug.

Je te mets tous les codes en espérant que tu m'éclaires :

Codes des deux listes déroulantes :

- CATEGORIES :
<?php 
$categories =  "SELECT nom_categorie FROM categories"; 
$result = mysql_query($categories) or die("Erreur sur la requête SQL concernant les catégories."); 

echo "<form action='adresse.php' method='POST'> 
 Poster un article 
Catégories :
    <select name ='categorie'>"; 
while ($row=mysql_fetch_array($result, MYSQL_NUM))
{ 
echo'<option value="'.$row[1].'">'.$row[0].'</option>';
} 
echo"</select>"; 
?>


- VILLAGES :
<?php 
$villages = "SELECT nom_village FROM villages"; 
$result = mysql_query($villages) or die("Erreur sur la requête SQL concernant les villages."); 

echo "<form action='adresse2.php' method='POST'> 
Villages :
<select name='villages'>"; 
while ($row=mysql_fetch_array($result, MYSQL_NUM))
{ 
echo'<option value="'.$row[1].'">'.$row[0].'</option>';
} 
echo"</select>
</form>"; 
?>


Code de la requête INSERT INTO :

$villages=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST["villages"])));
$categorie=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['categorie'])));
$titre_article=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['titre_article'])));
$texte_article=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['texte_article'])));
$auteur_article=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['auteur_article'])));

// Insertion de l'article dans la base de données
// Marche pas à cause des listes déroulantes - ça récupère pas ce qu'on a choisi - à essayer et à réparer
$query_insertion_articles = mysql_query("INSERT INTO articles (nom_village,nom_categorie,titre_article, texte_article, auteur_article) VALUES (\'$villages\',\'$categorie\',\'$titre_article\', \'$texte_article\', \'$auteur_article\')") or die ('Erreur sur la requête SQL concernant l\'insertion des articles'.mysql_error()); // Envoie une requête à un serveur MySQL

echo "Votre article est posté.

";

}


Que remarques-tu ?

Cordialement
0
J'avais oublié le message d'erreur qui apparait, le voici :
Erreur sur la requête SQL concernant l'insertion des articlesYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\'\',\'\',\'nnnb\', \'contenu

\nde

\n<p&g' at line 1


Je te mets les CREATE TABLE des tables concernées, les voici :
VILLAGES
 CREATE TABLE `villages` (
  `id_village` int(11) NOT NULL AUTO_INCREMENT,
  `nom_village` varchar(255) NOT NULL,
  PRIMARY KEY (`id_village`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1; 


CATEGORIES
 CREATE TABLE `categories` (
  `id_categorie` int(11) NOT NULL AUTO_INCREMENT,
  `id_village` int(11) NOT NULL,
  `nom_categorie` varchar(255) NOT NULL,
  PRIMARY KEY (`id_categorie`)
) ENGINE=MyISAM AUTO_INCREMENT=14 DEFAULT CHARSET=latin1; 
 


Mais quand j'observe le message d'erreur qu'il m'affiche, je me dis qu'il y a peut-être des erreurs dans les virgules, non ?

Cordialement
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
11 févr. 2013 à 21:25
Si tu suis mes recommandations, voilà à quoi doit ressembler ta string de requête :
$rqt = "INSERT INTO articles (nom_village,nom_categorie,titre_article, texte_article, auteur_article) VALUES ('".$villages."','".$categorie."','".$titre_article."', '".$texte_article."', '".$auteur_article."')";

- les valeurs de VARCHAR sont entre simples-quotes,
- pas de caractère d'échappement pour la simple-quote
0
La requête SQL fonctionne mais n'enregistre pas les deux choix effectués à partir des deux listes déroulantes (catégories et villages).

Cordialement
0
De plus, elle n'enregistre pas l'auteur de l'article (pourtant c'est un champs texte comme le titre). Je ne sais pas pourquoi.

Cordialement
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
13 févr. 2013 à 08:41
Alors plusieurs choses à la volée pour ton HTML :
- je ne vois pas de bouton submit dans ton(tes) form(s),
- tu utilises 2 forms différentes pour chaque dropdownlist, du coup du submitera que la valeur de la ddl située dans la même form que ton bouton submit.
0
Bonjour,

Puisque la requête INSERT INTO ne semble pas poser problème (à part qu'elle n'enregistre pas l'auteur de l'article malgré que ce soit un champs texte basique comme le titre), le problème ne serait-il pas dans le formulaire où il y a les listes déroulantes (pourtant elles marchent très bien, elles vont chercher les données dans la base de données et les affichent sans problème) ?

Quand je sélectionne un item (à partir des deux listes déroulantes), je voudrais l'enregistrer dans la base de données via la requête INSERT INTO (qui, elle, marche à part qu'au lieu d'enregistrer les choix effectués à partir des listes déroulantes, quand je vais voir sur PHPMyAdmin, je vois toutes les données sauf les deux choix que j'ai fait à partir des deux listes déroulantes. Là où il doit y avoir les choix effectués sur les listes déroulantes, il n'y a rien d'enregistrer.

Qu'en pensez-vous ?

Cordialement
0
Bonjour jopop,

Je te mets le code (tout ce qu'il y a dans le body) du formulaire HTML :


  <center>
    <?php 
$categories =  "SELECT nom_categorie FROM categories"; 
$result = mysql_query($categories) or die("Erreur sur la requête SQL concernant les catégories."); 

echo "<form action='adresse.php' method='POST'> 
 Poster un article 
Catégories :
    <select name ='categorie'>"; 
while ($row=mysql_fetch_array($result, MYSQL_NUM)) // mysql_fetch_array = Retourne une ligne de résultat MySQL sous la forme d'un tableau associatif, d'un tableau indexé, ou les deux
{ 
echo'<option value="'.$row[1].'">'.$row[0].'</option>';
} 
echo"</select>"; 
?>
    

    <?php 
$villages = "SELECT nom_village FROM villages"; 
$result = mysql_query($villages) or die("Erreur sur la requête SQL concernant les villages."); 

echo "<form action='adresse.php' method='POST'> 
Villages :
<select name='villages'>"; 
while ($row=mysql_fetch_array($result, MYSQL_NUM)) // mysql_fetch_array = Retourne une ligne de résultat MySQL sous la forme d'un tableau associatif, d'un tableau indexé, ou les deux
{ 
echo'<option value="'.$row[1].'">'.$row[0].'</option>';
} 
echo"</select>
</form>"; 
?>
    <form method="post" onsubmit="signin_article_post(this.titre_article.value,this.texte_article.value);return false" action="">
      


      Titre,
,

Article,
<textarea name="texte_article"  rows="15" cols="80" style="width: 80%"></textarea>,

Auteur(s)
,
,
----

,


    </form>
  </center>



<!-- début du footer --> 
  [adresse mail auteur]

  <script language="javascript" type="text/javascript">   
document.write('
Taille[# Plus<\/a>]Moins<\/a>Réinitialise<\/a><\/p><\/div>');</script>
  <?php
$fin = getmicrotime();
echo "Page exécutée en ".round($fin-$debut, 3) ." seconde(s).
";
?>


<!-- fin du footer -->


Qu'en penses-tu ? Tu vois des erreurs ?

Cordialement
0
Quand je vais voir le code source HTML à partir du navigateur, je vois ça :

Villages :
<select name='villages'><option value="">Mon village</option></select>


Catégories :
    <select name='categorie'><option value="">Monuments_a_visiter</option><option value="">Musees</option><option value="">Hebergements</option><option value="">Cinemas</option><option value="">Spectacles_et_fetes_locales</option><option value="">Circuits_praticables</option><option value="">Boutiques</option><option value="">Restaurants</option><option value="">Parkings</option><option value="">Bonnes_adresses_de_visiteurs</option><option value="">Evenements_sportifs</option><option value="">Sports_praticables</option><option value="">Medecine</option></select>


Dans chaque value de option, il y a une chaîne vide (""). Vous me direz que c'est normal parce qu'il y a des codes PHP à la place (
'.$row[1].'
.

Je suis d'accord mais c'est pas ça qui peut poser problème à votre avis ?

Cordialement
0
Quand je mets ce code :
echo'<option value="'.$row[0].'">'.$row[0].'</option>';


Lorsque je vais voir le code HTML à partir du navigateur, ça met (pour les catégories) :
<select name='categorie'><option value="Monuments_a_visiter">Monuments_a_visiter</option><option value="Musees">Musees</option><option value="Hebergements">Hebergements</option><option value="Cinemas">Cinemas</option><option value="Spectacles_et_fetes_locales">Spectacles_et_fetes_locales</option><option value="Circuits_praticables">Circuits_praticables</option><option value="Boutiques">Boutiques</option><option value="Restaurants">Restaurants</option><option value="Parkings">Parkings</option><option value="Bonnes_adresses_de_visiteurs">Bonnes_adresses_de_visiteurs</option><option value="Evenements_sportifs">Evenements_sportifs</option><option value="Sports_praticables">Sports_praticables</option><option value="Medecine">Medecine</option></select>


Avec ce code, ça met les valeurs ciblées dans les value.

Mais, j'ai refait un essai et ça n'enregistre toujours pas l'item choisi à partir des listes déroulantes.

Avez-vous des idées ?

Cordialement
0
Bonjour omlaly,

Il faut que tu simplifie tes requêtes, utilise PDO cela sera vraiment plus simple, plus sécurisé, car utilise des fonctions qui sont ou seront très bientôt obsolètes.

je te suggères de lire ceci : http://php.net/manual/fr/book.pdo.php
ainsi que ceci : http://www.php.net/manual/fr/class.pdostatement.php
Cordialement,

JéjéScript.

Si on ne réussi pas du premier coup, il faut se rappeler que le grand chêne aussi au début était un gland !
0
Rejoignez-nous