PDO Requêtes préparées

PDO Requêtes préparées - PHP - Programmation

Marsh Posté le 16-04-2010 à 10:19:09    

Bonjour,
Petit soucis avec une requête préparée, un oeil extérieur serait le bienvenue...
Ce code ne fonctionne pas :  

Code :
  1. $req = $bdd->prepare("INSERT INTO commentaires (pseudo,contenu,article_id) VALUES (:pseudo,:comment,:article_id)" ) or die(print_r($bdd->errorInfo()));
  2. $req->execute(array(
  3.  'pseudo'=>$pseudo,
  4.  'comment'=>$comment,
  5.  'article_id'=>$p
  6. ));
  7. $req->closeCursor();


 
Je donne aussi le code de la page entière si besoin, la seule partie qui ne marche pas est celle citée ci-dessus.
 

Code :
  1. <?php
  2. if(empty($_GET))
  3. {
  4. header("Location: index.php" );
  5. }
  6. if(!empty($_GET))
  7. {
  8.  require_once("id_connection.php" );
  9.  extract($_GET);
  10.   $p = strip_tags($p);
  11. }
  12. try
  13. {
  14.  $bdd = new PDO('mysql:host='.$dbhost.';dbname='.$dbname,$dblogin,$dbpass);
  15.     $bdd->exec('SET NAMES utf8');
  16. }
  17. catch (Exeption $e)
  18. {
  19.  die('Erreur :'.$e->getMessage());
  20. }
  21. $req=$bdd->prepare("SELECT titre FROM articles WHERE id=:id" );
  22. $req->execute(array(
  23.  "id"=>$p
  24. ));
  25. if($req->rowCount()==0)
  26. {
  27.  header("Location: index.php" );
  28. }
  29. $data = $req->fetch();
  30. $titre = $data['titre'];
  31. $req->closeCursor();
  32. if(!empty($_POST))
  33. {
  34.  extract($_POST);
  35.  $valid = true;
  36.  if(empty($pseudo))
  37.  {
  38.   $valid = false;
  39.   $erreurpseudo = "Pseudo requis";
  40.  }
  41.  if(empty($comment))
  42.  {
  43.   $valid = false;
  44.   $erreurcomment = "Laissez vos commentaires";
  45.  }
  46.  if($valid)
  47.  {
  48.   $pseudo=strip_tags($pseudo);
  49.   $comment=strip_tags($comment);
  50. try
  51. {
  52.  $bdd = new PDO('mysql:host='.$dbhost.';dbname='.$dbname,$dblogin,$dbpass);
  53.     $bdd->exec('SET NAMES utf8');
  54. }
  55. catch (Exeption $e)
  56. {
  57.  die('Erreur :'.$e->getMessage());
  58. }
  59. //Ne fonctionne pas
  60. $req = $bdd->prepare("INSERT INTO commentaires (pseudo,contenu,article_id) VALUES (:pseudo,:comment,:article_id)" ) or die(print_r($bdd->errorInfo()));
  61. $req->execute(array(
  62.  'pseudo'=>$pseudo,
  63.  'comment'=>$comment,
  64.  'article_id'=>$p
  65. ));
  66. $req->closeCursor();
  67. unset($pseudo);
  68. unset($comment);
  69. }
  70. }
  71. ?>
  72. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  73. <html xmlns="http://www.w3.org/1999/xhtml">
  74. <head>
  75. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  76. <title><?php echo $titre;?></title>
  77. <link rel="stylesheet" type="text/css" href="style.css" media="screen" />
  78. </head>
  79. <body>
  80. <div id="content">
  81. <?php
  82.  
  83.   $req=$bdd->prepare("SELECT * FROM articles WHERE id=:id" );
  84.   $req->execute(array(
  85.                       "id"=>$p));
  86.   $data = $req->fetch();
  87.  
  88.   echo "<h2>".$data['titre']."</h2>";
  89.   echo "<div class=\"articles\">";
  90.   echo "<p>".$data['contenu']."</p>";
  91.   echo "<p class=\"date\">".date('j/n/Y G:i',strtotime($data['date']))."</p>";
  92.  
  93.   $req->closeCursor();
  94.  
  95.  
  96. ?>
  97. <div class="form">
  98. <form name="commenter" action="article.php?p=<?php echo $data['id']; ?>" method="post">
  99. <label for="pseudo">Pseudo :</label>
  100. <input type="text" name="pseudo" value="<?php if(isset($pseudo)) echo $pseudo; ?>" />
  101. <span class="error"><?php if(isset($erreurpseudo)) echo $erreurpseudo; ?></span>
  102. <label for="comment">Commentaires :</label>
  103. <textarea name="comment"><?php if(isset($comment)) echo $comment; ?></textarea>
  104. <span class="error"><?php if(isset($erreurcomment)) echo $erreurcomment; ?></span>
  105. <input type="submit" name="envoyer" value="Envoyer" />
  106. </form>
  107. </div>
  108. <?php
  109. $req=$bdd->prepare("SELECT * FROM commentaires WHERE article_id=:article_id" );
  110.   $req->execute(array(
  111.                       "article_id"=>$p));
  112. while( $data = $req->fetch())
  113. {
  114. echo "<p>".$data['pseudo']."</p>";
  115. echo "<p>".$data['contenu']."</p>";
  116. }
  117. ?>
  118. </div>
  119. </div>
  120. </body>
  121. </html>

Reply

Marsh Posté le 16-04-2010 à 10:19:09   

Reply

Marsh Posté le 16-04-2010 à 10:21:12    

faut mettre aussi les ":" dans ton array execute

Reply

Marsh Posté le 16-04-2010 à 10:23:52    

Bonjour stealth, même avec les ":" dans le array execute cela ne fonctionne pas. Une autre piste ?

Reply

Marsh Posté le 16-04-2010 à 11:06:40    

fab1105 a écrit :

Bonjour stealth, même avec les ":" dans le array execute cela ne fonctionne pas. Une autre piste ?


fait un print_r($bdd->errorInfo()) avant ton $req->closeCursor();

Reply

Marsh Posté le 16-04-2010 à 11:08:41    

Ca donne ça : Array ( [0] => 00000 )

Reply

Marsh Posté le 16-04-2010 à 11:09:46    

et  
$req->errorInfo()

Reply

Marsh Posté le 16-04-2010 à 11:11:25    

Array ( [0] => HY000 [1] => 1452 [2] => Cannot add or update a child row: a foreign key constraint fails (`blog`.`commentaires`, CONSTRAINT `commentaires_ibfk_1` FOREIGN KEY (`id`) REFERENCES `articles` (`id`) ON DELETE CASCADE ON UPDATE CASCADE) )  
 
Surement un problème de relation entre tables ?

Reply

Marsh Posté le 16-04-2010 à 11:13:06    

sans doute
sinon pour gerer t'es erreur faut pas faire "or die" (en plus c'est "or exit"  die etant un alias), ca marche par exception, tu peu gerer des warning dans la config
 

Code :
  1. $dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );


 
http://www.php.net/manual/fr/pdo.error-handling.php

Reply

Marsh Posté le 16-04-2010 à 11:40:40    

Mais comment faire avec mes tables ? J'ai une table "articles" et une table "commentaires" , dans gestion des relations sur "commentaires" j'ai :
FOREIGN KEY (INNODB)
id blog.articles.id ON DELETE CASCADE ON UPDATE CASCADE
pseudo   Aucun index n'est défini!
contenu  Aucun index n'est défini!
date  Aucun index n'est défini!
article_id  Aucun index n'est défini!  
Qu'est ce qui fait que je ne peux pas insérer de données dans ma table commentaires ?

Reply

Marsh Posté le 16-04-2010 à 12:54:12    

Stealth t'es plus là ?

Reply

Marsh Posté le 16-04-2010 à 12:54:12   

Reply

Marsh Posté le 16-04-2010 à 15:49:09    

C'est bon j'ai trouvé, j'ai refais ma table "commentaires" mais sans mettre clef primaire à l'id et ça fonctionne.
Merci.

Reply

Sujets relatifs:

Leave a Replay

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