Problème code PHP insertion données form dans DB

Problème code PHP insertion données form dans DB - PHP - Programmation

Marsh Posté le 10-06-2010 à 15:24:04    

Je poste pour demander un peu d'aide, je vais devenir fou si ça continue  :pt1cable:  
 
Je cherche à entrer les données d'un simple formulaire dans une base de données pour permettre à un collègue d'ajouter des promotions sur son site.
 
Voici ce que j'ai fait:
 
formulaire:

Code :
  1. <form action="ajout_promo.php" method="post">
  2. Entrer le titre de la promo<br><input type="text" name="titre"><br>
  3. Nom EXACT du fichier pdf uploadé sur le FTP(sans l'extension pdf), attention il ne faut pas d'espace ! <br><input type="text" name="nom_fichier"><br>
  4. Description de la promo:<br>
  5. <textarea cols="50" rows="3"  name="description"></textarea><br>
  6. <input type="submit" value="Envoyer"> <input type="reset" value="Annuler"></form>


 
ajout_promo.php

Code :
  1. $titre = $_POST['titre'];
  2. $description = $_POST['description'];
  3. $nom_fichier = $_POST['nom_fichier'];
  4. mysql_connect("****.serveursdns.net", "xxx", "***" ) or die(mysql_error());
  5. mysql_select_db("qgh559" ) or die(mysql_error());
  6. mysql_query("INSERT INTO `promos` VALUES ('$titre', '$description', '$nom_fichier')" );


 
Table dans la DB:
http://img191.imageshack.us/img191/4836/tablex.jpg
 
Merci d'avance pour toute aide  :jap:


---------------
Best dressed chicken in town
Reply

Marsh Posté le 10-06-2010 à 15:24:04   

Reply

Marsh Posté le 10-06-2010 à 15:27:12    

qu'est ce qui marche pas ? t'as une erreur ?

Reply

Marsh Posté le 10-06-2010 à 15:29:44    

Vue le mode d'insertion, je parie $100 que ça coince du fait qu'il n'a pas échappé certains caractères (l'apostrophe, par ex ou les guillemets) :/
 
edit : _k a o s_, attention aux sql injections!

Message cité 1 fois
Message édité par rufo le 10-06-2010 à 15:30:38

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 10-06-2010 à 15:30:01    

Nan pas d'erreur, mais ça ajoute rien dans ma db  :(


---------------
Best dressed chicken in town
Reply

Marsh Posté le 10-06-2010 à 15:30:57    

rufo a écrit :

Vue le mode d'insertion, je parie $100 que ça coince du fait qu'il n'a pas échappé certains caractères (l'apostrophe, par ex ou les guillemets) :/


 
Quels apostrophes/guillemets? :s


---------------
Best dressed chicken in town
Reply

Marsh Posté le 10-06-2010 à 15:32:16    

ben en même temps, si tu récupères pas l'erreur provenant de mysql_query(), tu risques pas de voir les erreurs remontées par mysql :/ 10 contre 1 qu'il va te mettre un syntax error dans la requête sql que tu tentes de lui faire avaler...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 10-06-2010 à 15:35:45    

_k a o s_ a écrit :


 
Quels apostrophes/guillemets? :s


à ton avis, tes variables php que t'as mises dans ta requête sql, y'a de bonnes chances qu'elles contiennent des apostrophes/guillemets. Donc ta requête "INSERT INTO `promos` VALUES ('$titre', '$description', '$nom_fichier')" va avoir un petit soucis d'interprétation :/
 
Si tu mets dans $titre ça : Je n'y suis pour "rien", n'est-ce pas?... Comment tu crois que php ou mysql vont réagir au moment où $titre va être replacée par son contenu?
 
 


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 10-06-2010 à 15:39:06    

Ah ouai pas bête =S
Comment je peut contourner ce problème?
 
Pour les SQL injections j'essaierai de m'occuper de la sécu une fois que ça marchera  :(
edit: cela dit j'ai mis un password avec session pour accéder à la page d'ajout (on peut pas y aller sans passer par le login)


Message édité par _k a o s_ le 10-06-2010 à 15:39:56

---------------
Best dressed chicken in town
Reply

Marsh Posté le 10-06-2010 à 15:46:50    

_k a o s_ a écrit :

Nan pas d'erreur, mais ça ajoute rien dans ma db  :(

 


faut faire un "or die(mysql_error());"  apres ton mysql_query


Message édité par stealth35 le 10-06-2010 à 15:46:58
Reply

Marsh Posté le 10-06-2010 à 15:49:31    

Il me renvoie ça...  
 

Code :
  1. Column count doesn't match value count at row 1


---------------
Best dressed chicken in town
Reply

Marsh Posté le 10-06-2010 à 15:49:31   

Reply

Marsh Posté le 10-06-2010 à 15:52:27    

Tu peux utiliser cette syntaxe :

Code :
  1. INSERT INTO `promos` SET titre = '$titre', description='$description', nom_fichier='$nom_fichier'


 
Comme dis, attention à "nettoyer" tes chaines (guillements, html, etc...) avant de les insérer ;)


---------------
We deserve everything that's coming...
Reply

Marsh Posté le 10-06-2010 à 15:56:07    

_k a o s_ a écrit :

Il me renvoie ça...  
 

Code :
  1. Column count doesn't match value count at row 1



 
c'est parce que avec ta syntax VALUE il attend l'id aussi, faudrais soit faire
 

Code :
  1. INSERT INTO `promos` VALUES (null, '$titre', '$description', '$nom_fichier')


 
soit  
 

Code :
  1. INSERT INTO `promos` (titre, description, nom_fichier) VALUES ('$titre', '$description', '$nom_fichier')


 
ou mieux ce que dis SICKofitALL  ;)  

Reply

Marsh Posté le 10-06-2010 à 15:59:44    

Exact, avec ta syntaxe ça fonctionne SICKofitALL  :jap:
 
Je me renseigne pour le nettoyage des chaînes


Message édité par _k a o s_ le 10-06-2010 à 16:00:12

---------------
Best dressed chicken in town
Reply

Marsh Posté le 10-06-2010 à 16:15:57    

tu peux commencer par jeter un oeil sur les fonctions mysql_real_escape_string et strip_tags par exemple :)


---------------
We deserve everything that's coming...
Reply

Marsh Posté le 10-06-2010 à 16:19:59    

Ok merci pour l'indication ;)


---------------
Best dressed chicken in town
Reply

Marsh Posté le 10-06-2010 à 17:16:13    

j'ai encore un soucis  :(  
 
J'ai codé l'affichage de la table SQL dans ma page promotions, mais j'ai le champ description qui ne s'affiche pas  :??:  
 
Voilà le code:

Code :
  1. mysql_connect("****.serveursdns.net", "xxxx", "xxxx" );
  2. mysql_select_db(qgh599);
  3. $sql="SELECT * FROM promos";
  4. $req = mysql_query($sql) or die ('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
  5. echo "Promotions en cours:<br><br>";
  6. while($data=mysql_fetch_assoc($req)) {
  7.     $titre=$data["titre"];
  8.     $descr=$data["desciption"];
  9.     $nom_fich=$data["nom_fichier"];
  10.     echo "<u>".$titre."</u>:<br>";
  11.     echo "<i>".$description."</i><br>";
  12.     echo "<b><a href='promos/".$nom_fich.".pdf'>Fichier PDF descriptif</a></b><br><br>";
  13. }


 
Merci pour votre aide  :jap:


---------------
Best dressed chicken in town
Reply

Marsh Posté le 10-06-2010 à 17:22:13    

normale t'as fais une faute a "description"
 
je te conseil de bosser en erreur : E_ALL | E_STRICT

Reply

Marsh Posté le 10-06-2010 à 17:43:20    

C'est bon merci  :jap:


Message édité par _k a o s_ le 10-06-2010 à 17:44:26

---------------
Best dressed chicken in town
Reply

Marsh Posté le 11-06-2010 à 09:41:14    

Et merci d'apprendre le html avant le php :/ Remplace ce bout de code

Code :
  1. while($data=mysql_fetch_assoc($req)) {
  2.      $titre=$data["titre"];
  3.      $descr=$data["desciption"];
  4.      $nom_fich=$data["nom_fichier"];
  5.      echo "<u>".$titre."</u>:<br>";
  6.      echo "<i>".$description."</i><br>";
  7.      echo "<b><a href='promos/".$nom_fich.".pdf'>Fichier PDF descriptif</a></b><br><br>";
  8. }


 
par  

Code :
  1. echo "<dl>";
  2. while($data=mysql_fetch_assoc($req)) {
  3.      $titre=$data["titre"];
  4.      $descr=$data["desciption"];
  5.      $nom_fich=$data["nom_fichier"];
  6.      echo "<dt>$titre :</dr>";
  7.      echo "<dd class=\"description\">$description</dd>";
  8.      echo "<dd class=\"lien\"><a href=\"promos/$nom_fich.pdf\">Fichier PDF descriptif</a></dd>";
  9. }
  10. echo "</dl>";



---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed