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

  FORUM HardWare.fr
  Programmation
  PHP

  PDO Requêtes préparées

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

PDO Requêtes préparées

n°1984680
fab1105
Posté le 16-04-2010 à 10:19:09  profilanswer
 

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>

mood
Publicité
Posté le 16-04-2010 à 10:19:09  profilanswer
 

n°1984682
stealth35
Posté le 16-04-2010 à 10:21:12  profilanswer
 

faut mettre aussi les ":" dans ton array execute

n°1984687
fab1105
Posté le 16-04-2010 à 10:23:52  profilanswer
 

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

n°1984724
stealth35
Posté le 16-04-2010 à 11:06:40  profilanswer
 

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();

n°1984726
fab1105
Posté le 16-04-2010 à 11:08:41  profilanswer
 

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

n°1984728
stealth35
Posté le 16-04-2010 à 11:09:46  profilanswer
 

et  
$req->errorInfo()

n°1984731
fab1105
Posté le 16-04-2010 à 11:11:25  profilanswer
 

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 ?

n°1984733
stealth35
Posté le 16-04-2010 à 11:13:06  profilanswer
 

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

n°1984757
fab1105
Posté le 16-04-2010 à 11:40:40  profilanswer
 

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 ?

n°1984799
fab1105
Posté le 16-04-2010 à 12:54:12  profilanswer
 

Stealth t'es plus là ?

mood
Publicité
Posté le 16-04-2010 à 12:54:12  profilanswer
 

n°1984937
fab1105
Posté le 16-04-2010 à 15:49:09  profilanswer
 

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


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

  PDO Requêtes préparées

 

Sujets relatifs
Fusion de résultats de requêtes dans une unique TableProblème de requêtes asynchrones
Requêtes HTTP synchrones avec QtArreter les requêtes ayant un temps d'exécution trop long
[Résolu] Faire plusieurs requetes mysql en meme tempsProblème avec requêtes SQL
J2ME + envoi de requetes POST[PDO/SQL] Aide selection et classement (JOIN ??)
Différence entre deux requêtes[PDO] Problèmes avec les requêtes préparées
Plus de sujets relatifs à : PDO Requêtes préparées


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