|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Futur Membre du Club
![]() Mamadou Saliou DIALLOAdministrateur systèmes et réseaux Inscription : juillet 2011 Messages : 71 ![]() |
Voilà, je dispose de trois tables en relation avec les champs suivants: cours (id_cours, nom_cours) ; chapitres (id_chapitre, nom_chapitre, num_chapitre, id_cours, id_contenu) ; contenu (id_contenu, text_contenu, date_creation, date_modification) ;
Et je voudrais faire une requête pour insérer les données dans ces trois tables en relation et là suis planté ! Si quelqu’un pouvait m’aider ???? |
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 655 ![]() |
bonjour,
faites 3 insert différents ? |
|
|
00
|
|
|
#3 |
![]() ![]() |
1) Insérer dans la table cours et récupérer l'identifiant auto-incrémenté (mysql_insert_id en PHP).
2) Idem avec la table contenu. 3) Insérer dans la table chapitres en utilisant les identifiants récupérés.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#4 | ||
|
Futur Membre du Club
![]() Mamadou Saliou DIALLOAdministrateur systèmes et réseaux Inscription : juillet 2011 Messages : 71 ![]() |
J'apprécie bien ton aide CinePhil mais j'avoue là suis vraiment planté par ce que je ne sais pas me servir de cette fonction ou propriété (mysql_insert_id en PHP) et un exemple avec les codes pour mon cas m'aidera beaucoup!
Et pour ce qui est de la proposition de punkoff j'y avait pensé mais sa ne ma pas donné le résultat es-conte par ce que les clefs étrangères (id_cours, id_contenu) de la table chapitre étaient tous null (ont pris pour valeur 0) voici mon code: Code :
|
||
|
|
00
|
|
|
#5 | ||
![]() ![]() |
Tu n'es pas très loin de la solution.
Quelques remarques tout de même... 1) Il semble que tes identifiants soient, comme il se doit, des entiers auto-incrémentés. Inutile de vouloir leur donner une valeur, encore moins une chaîne vide puisque ce sont des entiers ! 2) Protège tes variables utilisées dans les requêtes pour éviter les injections SQL avec mysql_real_escape_string et intval. 3) Comme dit dans mon précédent message, utilise mysql_insert_id() pour récupérer la valeur de l'identifiant qui a été créé par l'insertion. 4) Insère d'abord dans cours et dans contenu avant d'insérer dans chapitre puisque chapitre doit accueillir les clés étrangères référençant le cours et le contenu. 5) Aère ton code ; il sera plus agréable à lire quand tu auras à revenir dessus. Code PHP :
Une dernière chose qui m'intrigue quand même dans ton code : à chaque nouvelle association de contenu et de cours pour constituer un chapitre, tu vas ajouter de nouveau le cours et le contenu !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||
|
00
|
|
|
#6 |
|
Futur Membre du Club
![]() Mamadou Saliou DIALLOAdministrateur systèmes et réseaux Inscription : juillet 2011 Messages : 71 ![]() |
Ok! l'utilisation de mysql_insert_id() a bien fonctionner comme je le voulais seulement avec mysql_real_escape_string pour éviter les injections SQL ne fonctionne pas à merveille du tout par ce que sa poste les données mais avec un contenu vide! Et je ne sais pas ce qui manque ou ce qu'il me faut faire!
|
|
|
00
|
|
|
#7 | ||
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 727 ![]() |
Salut
Je serais étonné que ça soit la fonction mysql_real_escape_string() qui provoquerait ces erreur de contenu vide. Quelles sont les données qui présentes des problèmes ? Toutes ? Je verrais plutôt que : Soit les informations ne seraient pas saisies au niveau du formulaire (étape juste avant) Soit le formulaire (toujours l'étape d'avant) contient des erreurs, ce qui fait que le $_POST ne contiendrait pas toutes les données souhaitées. Dans des cas comme ça, il ne faut pas hésiter de faire un peu de débogage afin d'avoir des informations plus précises/pertinentes. Exemple : (dès la 1ère de code de cette page qui effectue les insertions) Code :
Est tu certain de ce bon format de date (datetime) ? Ceci me semble plus standard : (fait un essai, ça ne mange pas d'pain)
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
||
|
|
00
|
|
|
#8 | ||
|
Futur Membre du Club
![]() Mamadou Saliou DIALLOAdministrateur systèmes et réseaux Inscription : juillet 2011 Messages : 71 ![]() |
Voici les données qui me provoquent les erreurs de contenu vide:
Code :
Code :
$contenu =mysql_real_escape_string($_POST['editor1']); Code :
$ncours =mysql_real_escape_string($_POST['ncours']); Code :
$nchapitre =mysql_real_escape_string($_POST['nchapitre']); Et voilà! |
||
|
|
00
|
|
|
#9 | |
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 727 ![]() |
Citation:
Ici, tu parles de contenu vide, certes, mais est-ce vide car comme plus haut elles sont vide dans la Bdd, où est-ce parce que tu l'as remarqué grâce au var_dump() que je t'avais suggérer de faire ? On ne sait, du coup, il existe plein de cas d'erreurs possible. Impossible de toutes les évoqués. Je vais juste donner un exemple typique d'erreur. On fais un var_dump($_POST), ce qui va afficher toutes les données contenu dans ce tableau qui n'est qu'autres que les données renvoyées par l'étape d'avant : le formulaire. On constate (hypothèse toujours) que l'élément "editor1" n'y se trouve pas, cependant, il y a un élément "editor" avec les données saisies. Et bien on peu conclure qu'il y tout simplement erreur sur le nom. -> Soit on corrige cette page en récupérant avec comme nom "editor" -> Soit on renomme le champ "editor" coté formulaire par "editor1". Si dans le var_dump() il y rien qui pourrait correspondre à cet donnée "editor", alors c'est peut être l'intégration de ckeditor qui ne va pas. Faudrait revoir les tutoriels de ce Soft pour tenter de voir où ça ne va pas. Autre hypothèse encore. Toujours est il que tant qu'une données est inexistante dans le var_dump($_POST), c'est au niveau du formulaire où ça ne va pas. Au passage, active la gestion des erreurs Php, car si c'était le cas tu aurais dû obtenir des erreurs renvoyés par Php. Dans le php.ini -> display_error à On
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
|
|
|
10
|
|
|
#10 | ||||
|
Futur Membre du Club
![]() Mamadou Saliou DIALLOAdministrateur systèmes et réseaux Inscription : juillet 2011 Messages : 71 ![]() |
Ok RunCodePhp voilà j'ai suivis vos conseils et j'ai utilisé pour avoir ce ci:
Code :
Code :
|
||||
|
|
00
|
|
|
#11 |
|
Membre du Club
![]() Adeline Consultant informatique Inscription : décembre 2011 Messages : 20 ![]() |
je ne connais pas cette fonction: mysql_real_escape_string mais vu son nom elle ne devrai pas être appelée après la connexion à la base de donnée?
|
|
|
00
|
|
|
#12 | ||
|
Expert Confirmé
![]() ![]() |
PtiteA2 a raison, il faut d'abord se connecter à la base de données et ensuite créer la requête SQL en faisant appel à mysql_real_escape_string() sinon erreur.
Ton code devrait démarrer ainsi : Code :
__________________
# Dans la Création, tout est permis mais tout n'est pas utile... |
||
|
00
|
|
|
#13 | ||||
|
Futur Membre du Club
![]() Mamadou Saliou DIALLOAdministrateur systèmes et réseaux Inscription : juillet 2011 Messages : 71 ![]() |
voilà il y a toujours d'autre code d'erreur comme tu me la suggérer j'ai effectuer le changement pour avoir ce ci:
Code :
Code :
|
||||
|
|
00
|
|
|
#14 | ||
|
Futur Membre du Club
![]() Mamadou Saliou DIALLOAdministrateur systèmes et réseaux Inscription : juillet 2011 Messages : 71 ![]() |
J'ai juste oublier de mettre ces deux signes pour avoir ce ci: et voici le bon code:
Code :
|
||
|
|
00
|
|
|
#15 | ||
|
Membre du Club
![]() Adeline Consultant informatique Inscription : décembre 2011 Messages : 20 ![]() |
pourquoi dans ta requête tu as :
Code php :
Code php :
$ncours =mysql_real_escape_string($_POST['ncours']); Et à mon avis tes erreurs viennent de tes 3 dernières lignes les trois print_r tu n'as pas mis de ' ' autour des noms des variables. |
||
|
|
00
|
|
|
#16 |
|
Futur Membre du Club
![]() Mamadou Saliou DIALLOAdministrateur systèmes et réseaux Inscription : juillet 2011 Messages : 71 ![]() |
Ok PetiteA2 j'ai bien noté!
révenons a nos moutons CinePhil Une dernière chose qui m'intrigue quand même dans ton code : à chaque nouvelle association de contenu et de cours pour constituer un chapitre, tu vas ajouter de nouveau le cours et le contenu ! pour répondre à cette question je dirais bien OUI par ce que j'ai fais de telle sorte que si je veux envoyé un cours dans ma base de données je dois choisir le nom du cours après mettre un chapitre suivis du numéro de chapitre plus le contenu et qu'est ce que tu me suggère de faire pour palier a ce problème???? |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com