Requête INSERT INTO problème [Résolu]

- 9 févr. 2013 à 17:24 - Dernière réponse :  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
Afficher la suite 

Votre réponse

38 réponses

Meilleure réponse
Messages postés
278
Date d'inscription
samedi 22 février 2003
Dernière intervention
24 avril 2013
- 14 févr. 2013 à 21:48
3
Merci
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>

Merci cs_Malkuth 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de cs_Malkuth
0
Merci
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
Commenter la réponse de omlaly
0
Merci
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
Commenter la réponse de omlaly
0
Merci
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
Commenter la réponse de omlaly
0
Merci
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
Commenter la réponse de omlaly
0
Merci
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
Commenter la réponse de omlaly
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Dernière intervention
23 janvier 2016
- 10 févr. 2013 à 21:46
0
Merci
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...
Commenter la réponse de yann_lo_san
0
Merci
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
Commenter la réponse de omlaly
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Dernière intervention
1 août 2013
- 11 févr. 2013 à 10:28
0
Merci
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).
Commenter la réponse de cs_jopop
0
Merci
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
Commenter la réponse de omlaly
0
Merci
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
Commenter la réponse de omlaly
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Dernière intervention
1 août 2013
- 11 févr. 2013 à 21:25
0
Merci
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
Commenter la réponse de cs_jopop
0
Merci
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
Commenter la réponse de omlaly
0
Merci
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
Commenter la réponse de omlaly
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Dernière intervention
1 août 2013
- 13 févr. 2013 à 08:41
0
Merci
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.
Commenter la réponse de cs_jopop
0
Merci
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
Commenter la réponse de omlaly
0
Merci
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
Commenter la réponse de omlaly
0
Merci
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
Commenter la réponse de omlaly
0
Merci
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
Commenter la réponse de omlaly
0
Merci
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 !
Commenter la réponse de JejeScript

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.