Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
792 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Insertion dans une base de données

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Insertion dans une base de données

n°1322734
Melekitto
Posté le 10-03-2006 à 13:49:58  profilanswer
 

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?

mood
Publicité
Posté le 10-03-2006 à 13:49:58  profilanswer
 

n°1322749
anapajari
s/travail/glanding on hfr/gs;
Posté le 10-03-2006 à 14:04:44  profilanswer
 

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];

n°1322750
dwogsi
Défaillance cérébrale...
Posté le 10-03-2006 à 14:04:47  profilanswer
 

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."'

n°1322762
Melekitto
Posté le 10-03-2006 à 14:16:32  profilanswer
 

$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é.

n°1322771
anapajari
s/travail/glanding on hfr/gs;
Posté le 10-03-2006 à 14:20:29  profilanswer
 

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
n°1322892
Djebel1
Nul professionnel
Posté le 10-03-2006 à 16:27:02  profilanswer
 

des binds ? tu entends quoi par là ?

n°1322919
anapajari
s/travail/glanding on hfr/gs;
Posté le 10-03-2006 à 16:37:25  profilanswer
 

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
n°1322922
FlorentG
Posté le 10-03-2006 à 16:39:47  profilanswer
 

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 :'(

n°1322972
Djebel1
Nul professionnel
Posté le 10-03-2006 à 17:15:53  profilanswer
 

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.

n°1322988
anapajari
s/travail/glanding on hfr/gs;
Posté le 10-03-2006 à 17:31:04  profilanswer
 

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 !!!

mood
Publicité
Posté le 10-03-2006 à 17:31:04  profilanswer
 

n°1323007
Djebel1
Nul professionnel
Posté le 10-03-2006 à 18:02:33  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Insertion dans une base de données

 

Sujets relatifs
Modification de données dans un tableau à l'aide d'une macroEnvoyer un mail a toute une liste d'adresse de la base de dommées ?
recuperation de donnees en sql[MySQL] Quel type de champ pour quel type de données ?
mise à jour d'un base avec un txtProblème d'insertion dans base de données
Insertion de données dans une table de base différenteProbleme d'insertion dans ma base de données
probleme insertion base de donnéesProblème d'insertion en base de données
Plus de sujets relatifs à : Insertion dans une base de données


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR