Insertion dans une base de données

Insertion dans une base de données - PHP - Programmation

Marsh Posté le 10-03-2006 à 13:49:58    

Bonjour à tous. Alors voilà j'ai un programme PHP qui récupère des informations dans un formulaire et qui insére dans la base de données. J'ai un petit problème c'est que j'ai des champs texte paragraphe qui apparaissent plusieurs fois (les noms c'est para1,para2,etc) et lors de l'insertion le premier paragraphe n'est pas ajouté et les autres oui. J'ai fait un echo dans ma boucle et les informations s'affichent bien même pour le premier paragraphe.
Voici le code :  
 

Code :
  1. else if ($tab[$k] == "paragraphe" )
  2.  {
  3.  //On insére le paragraphe
  4.  $num_para = $_POST[$numpara];
  5.  $contenupara = $_POST[$para];
  6.  echo $num_para."<br>";
  7.  echo $contenupara."<br>";
  8.  echo $idpart."<br>";
  9.  mysql_query ("insert into paragraphe (ID_PARTIE,CONTENU_PARAGRAPHE,ORDRE_PARAGRAPHE) values ('$idpart','$contenupara','$num_para');" );
  10.  $indpara ++;
  11.  $para = "para".$indpara;
  12.  $numpara = "numpara".$indpara;
  13.  }


la variable $idpart est récupéré dans un if précédent et s'affiche lors de l'écho. Je ne comprends pas du tout pourquoi ça ne fonctionne pas. Est-ce que quelqu'un a une idée?

Reply

Marsh Posté le 10-03-2006 à 13:49:58   

Reply

Marsh Posté le 10-03-2006 à 14:04:44    

a la 1ere itération de ta boucle, ces deux variables ne sont pas initialisées:

Code :
  1. $para = "para".$indpara;
  2. $numpara = "numpara".$indpara;


Il est donc normal que tu ne récupères rien ici:

Code :
  1. $num_para = $_POST[$numpara];
  2. $contenupara = $_POST[$para];

Reply

Marsh Posté le 10-03-2006 à 14:04:47    

Désolé je répond un peu à côté de ta question mais...
...GROSSE FAILLE de SQJ Injection dans ton code.
Utilise mysql_real_escape_string() sur les variables qui passent dans ta requête et la syntaxe suivante : '".$variable."'

Reply

Marsh Posté le 10-03-2006 à 14:16:32    

$num_para et $contenupara sont initialisé au tout début du script.  

Code :
  1. $indpara = 1;
  2. $numpara = "numpara".$indpara;
  3. $para = "para".$indpara;


J'ai le même genre de requêtes pour les chapitres et les parties et ça marche bien mais pour les paragraphes, il ne met pas le premier (le formulaire sert à insérer un cours dans une base de données).
 
dwogsi, je n'ai pas tout compris à ce que tu as dit désolé.

Reply

Marsh Posté le 10-03-2006 à 14:20:29    

Melekitto a écrit :

$num_para et $contenupara sont initialisé au tout début du script.  


bin si tu montres pas tout le code aussi s'pas facile de deviner ce qui manque ou pas !!!  [:pingouino]  
 

Melekitto a écrit :

dwogsi, je n'ai pas tout compris à ce que tu as dit désolé.


Il disait qu'il ne faut jamais inserer directement une variable provenant d'un  formulaire dans une requete.
Il est nécessaire de faire un mysql_real_escape_string() sur celles-ci...  
Ou alors d'utiliser des binds ( perso moi je préfère ...)!
 
edit: d'ailleurs ça me fait penser, t'aurais pas un ' qui traine dans le texte de ton paragraphe1?


Message édité par anapajari le 10-03-2006 à 14:21:50
Reply

Marsh Posté le 10-03-2006 à 16:27:02    

des binds ? tu entends quoi par là ?

Reply

Marsh Posté le 10-03-2006 à 16:37:25    

en php "nature" il faut se servir de mysqli pour ensuite pouvoir utiliser mysqli-stmt-bind-param
mais en gros ça marche vraiment qu'a partir de PHP5.
 
Alors perso, je préfère me servir adoDB qui fait ça très bien mais qui permet aussi de faire abstraction de la base utilisée.  
Note: il n'y a pas que adoDB qui fasse ça... Juste c'est la librairie que je connais le mieux:

Message cité 1 fois
Message édité par anapajari le 10-03-2006 à 16:37:59
Reply

Marsh Posté le 10-03-2006 à 16:39:47    

anapajari a écrit :

en php "nature" il faut se servir de mysqli pour ensuite pouvoir utiliser mysqli-stmt-bind-param
mais en gros ça marche vraiment qu'a partir de PHP5.


Faut voir aussi si l'extension est activé :D Genre chez OVH en php5 y'a toujours mysql normale :'(

Reply

Marsh Posté le 10-03-2006 à 17:15:53    

enfin mysqli, c'est quoi, juste une classe fourre-tout dans laquelle ils ont mis les instruction mysql non ?
je préfère me faire ma propre classe.

Reply

Marsh Posté le 10-03-2006 à 17:31:04    

Djebel1 a écrit :

enfin mysqli, c'est quoi, juste une classe fourre-tout dans laquelle ils ont mis les instruction mysql non ?
je préfère me faire ma propre classe.


Non c'est pas une classe fourre-tout c'est la classe qui permet le support des nouvelles fonctionnalités apportées par mysql 4.1+...
Mais bon si tu penses que ta classe elle r0x0r plus, effectivement mieux vaut ne pas s'en servir :o
D'ailleurs je te conseille également de refaire la classe array, on doit pouvoir l'améliorer !!!

Reply

Marsh Posté le 10-03-2006 à 17:31:04   

Reply

Marsh Posté le 10-03-2006 à 18:02:33    

bah si tu me dis que la classe mysqli permet d'avoir un gestionnaire de transactions, des échappements de caracteres fonction du magic_quote_gpc, qu'elle me renvoie systématiquement le mysql_insert_id quand tu fais un insert, ou le nombre de lignes modifiées lors d'un update, etc, etc, etc, tout en me garantissant une seule instanciation en mémoire avec des appels d'où je veux, évidemment j'y passe de suite. Bizarrement j'y crois pas.
 
Nouvelles fonctionnalités de mysql 4.1+, à savoir ? :)


Message édité par Djebel1 le 10-03-2006 à 18:05:11
Reply

Sujets relatifs:

Leave a Replay

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