Se connecter avec
S'enregistrer | Connectez-vous

Probleme Requette sql, PHP/MYSQL

Dernière réponse : dans Programmation
Partagez

Salut à tous, j'ai un petit souci concernant une requette dans un code PHP
j'ai une table "livre" qui contient (idLIVRE,titre,resume,date_acquisition,AUTEUR_idAUTEUR,RAYON_idRAYON,GENRE_idGENRE)
les 3 derniers sont des cles etrangères.
table auteur(idAUTEUR,nom_auteur)
Je veux faire l'ajout d'un livre dans la table "livre" et vu que j'ai des cles etrangères ca me cause des problèmes...
Je recupere le nom_auteur par une liste deroulante et moi j'ai son id dans la table livre
je sais pas comment y faire l'ajout en utilisant une liste deroulante et le fait de recuperer le nom_auteur pas son id dans la requette
$ajout=mysql_query("INSERT INTO livre VALUES('','$titre','$resume','$date3','$req1','32','43')") or die(mysql_error());

  1. <?php
  2. echo"<h1>Ajout d'un livre</h1>";
  3. if(isset($_POST['submit']))
  4. {
  5.  
  6. $titre=htmlspecialchars(trim($_POST['titre']));
  7. $resume=htmlspecialchars(trim($_POST['resume']));
  8. $date3=date("y-m-d");
  9. $choix=($_POST['choix']);
  10.  
  11. if($titre&&$resume&&$choix)
  12. {
  13.  
  14. $connect=mysql_connect('localhost','root','');
  15. if ($connect==false) {
  16. die ("Connexion au serveur a échouée");
  17. }
  18. $base=mysql_select_db('bibliotheque');
  19. if ($base==false) {
  20. die ("Connexion à la base de donnée a échouée");
  21. }
  22. $query=mysql_query("SELECT * FROM livre WHERE titre='$titre'");
  23.  
  24. //$req1=mysql_query("SELECT idAUTEUR FROM auteur WHERE nom_auteur='$choix'");
  25.  
  26.  
  27. $req1=mysql_query("SELECT idAUTEUR
  28. FROM auteur
  29. INNER JOIN livre ON livre.AUTEUR_idAUTEUR=auteur.idAUTEUR
  30. WHERE titre='$titre'
  31. AND nom_auteur='$choix'");
  32.  
  33. $rows=mysql_num_rows($query);
  34. if($rows==0)
  35. {
  36.  
  37. $ajout=mysql_query("INSERT INTO livre VALUES('','$titre','$resume','$date3','$req1','32','43')") or die(mysql_error());
  38.  
  39. if ($ajout==false) {
  40. die('Ajout echou ');
  41. }
  42.  
  43. }else echo"Ce nom du livre existe deja";
  44.  
  45. }else echo "Veuillez saisir tous les champs";
  46. }
  47.  
  48. ?>
  49. <form name="form" method="post" action="#">
  50. <p> </p>
  51. <p>Titre :<br/>
  52. <input type="text" name="titre" id="titre">
  53. <p>Resume : <br/>
  54. <textarea name="resume" rows="8" cols="45">
  55. Votre résumé ici.
  56. </textarea>
  57. </p>
  58. </br>
  59. </br>
  60. Choisissez l'auteur de votre choix :
  61. <select name="choix">
  62. <option value="choix1"></option>
  63. <option value="choix2">claude delannoy</option>
  64. <option value="choix3">victor hugo</option>
  65. <option value="choix4">emile zola</option>
  66.  
  67. </select>
  68. <input name="submit" type="submit" id="valider" value="Ajouter">
  69. </form>


Voila l'erreur qu'il me donne :
Cannot add or update a child row: a foreign key constraint fails (`bibliotheque`.`livre`, CONSTRAINT `fk_LIVRE_AUTEUR1` FOREIGN KEY (`AUTEUR_idAUTEUR`) REFERENCES `auteur` (`idAUTEUR`) ON DELETE NO ACTION ON UPDATE NO ACTION)

Si quelqu'un peut m'aider à resoudre ce probleme s'il vous plait

Autres pages sur : probleme requette sql php mysql

  • zeb a édité ce message

Salut,

Quelques commentaires, après lecture de ton code.

  1. $connect=mysql_connect(...);
  2. if ($connect==false) {
  3. die ("Connexion au serveur a échouée");
  4. }
  5.  
  6. $ajout=mysql_query(..) or die(mysql_error());
  7. if ($ajout==false) {
  8. die('Ajout echou ');
  9. }


D'abord, "Si Truc Égal Faux" ça se dit "Si Non Truc" :kaola: 
  1. if (! $connect) ..
  2. if (! $ajout) ..
Mais, t'as raison, on s'en fout un peu.

Deuxièmement, tu mélanges deux styles d'écriture différents.
Le ".. Or Die()" ou le "if (! ..) .." reviennent au même. Donc choisis-en un et tiens-t-y.

Ça t'évitera de t'emmêler les pinceaux. En cas d'erreur, le Die() de la ligne 6 est exécuté. Donc celui de la ligne 8 ne le sera jamais.
Évite aussi de mettre une clause Else après un exit/die/return.
Ça allègera ton code, et tu le verras mieux.

-----------------------

Bon, ton problème, maintenant.

Relis l'aide sur la fonction mysql_query().
Profites-en pour y découvrir les fonctions mysql_fetch_assoc() et/ou mysql_fetch_array().
C'est ce qui manque à ton programme.
Posez votre question