funcion add_comment

superNoob
Invité n'ayant pas de compte PHPfrance

16 août 2020, 15:24

Bonjour,
Je coince pour effectuer un INSERT INTO comments avec PDO.
En effet je débute en php, mais j'avais déjà réussi avec mysqli_query pour faire un livre d'or.
Ici je voudrais récupérer les commentaires sur des photos.
Je réussi à les introduire dans la base de données par phpmyadmin et à les afficher.
Mais je ne réussi pas à le faire depuis la page web.
je n'ai plus de problème avec les requêtes de type SELECT en utilisant ->fetch(); mais je suis largué avec les insert.
C'est surtout la requête préparée que je ne comprends pas.
J'ai ce message d'erreur : Fatal error: Uncaught Error: Call to undefined method Database::prepare() in C:\xampp\htdocs\
Voilà le code de la page Comments.php j'espère que vous pourrez m'aidez.
Je reste à votre disposition pour plus de détails.

Code : Tout sélectionner

<?php class Comments { static public $ADD_COMMENT_URL = "./add_comment.php"; static public function get_all_comments_picture($db, $picid) { $req = $db->query("SELECT `comments`.`user_id` , `comments`.`text` , `comments`.`created_on` , `users`.`login` FROM `comments` , `users` WHERE `picture_id` = ' $picid ' AND `users`.`id` = `comments`.`user_id` ORDER BY created_on DESC;", [$picid])->fetchAll(PDO::FETCH_ASSOC); if ($req) { $row = array(); while ($row = $req) { $req[] = $row; break; } return $row; } else { return False; } } static public function add_comment($db, $text, $userid, $pictureid){ $sql = "INSERT INTO comments (id, text, user_id, picture_id, created_on) VALUES (NULL, '%s', '%d', '%d', NOW())"; $stmt = $db->prepare($sql); $stmt->execute([$text, $userid, $pictureid]); var_dump($text); } }
Merci :D

Mammouth du PHP | 2703 Messages

16 août 2020, 16:10

la classe Database n'a pas de fonction prepare, nous dit le message d'erreur. c'est la classe native PDO qui a cette fonction.

superNoob
Invité n'ayant pas de compte PHPfrance

16 août 2020, 17:10

Hello,
J'ai modifié un peu le code
maintenant j'ai un message "Notice: Undefined property: PDOStatement::$execute in C:\xampp\htdocs\Demo_php_inc_class\class\Comments.php on line 36" dans cette requête :

Code : Tout sélectionner

static public function add_comment($db, $text, $user_id, $pictureid){ $db = new PDO("mysql:dbname=membres;host=localhost", 'root', ''); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $db->prepare("INSERT INTO comments (id, text, user_id, picture_id, created_on) VALUES (NULL, :text, :user_id, :picture_id, NOW())"); $stmt->bindParam(':text', $text); $stmt->bindParam(':user_id', $user_id); $stmt->bindParam(':picture_id', $pictureid); $stmt->execute; }
Je ne sais pas si je vais réussir là, j'essaie de trouver,...
Merci :D

superNoob
Invité n'ayant pas de compte PHPfrance

16 août 2020, 17:22

Je viens de voir que sur le execute c'est $stmt->execute();

Mais j'ai un autre problème avec une erreur, apparemment il ne trouve pas ma variable $user_id
Notice: Trying to access array offset on value of type bool in C:\xampp\htdocs\Demo_php_inc_class\add_comment.php on line 15

Voilà le fichier add_comment.php

Code : Tout sélectionner

if (isset($_POST['text']) && isset($_POST['picid'])) { $cur = Users::current_user(); if (!Comments::add_comment($db, $_POST['text'], $cur['id'], $_POST['picid'])) //voilà la ligne 15, il ne trouve pas $cur['id'] { $error = True; } else { if (!($pic = Pictures::get_picture($db, $_POST['picid']))) { $error = True; } else { $error = False; } } } else { $error = True; } if ($error) { if (isset($_POST['picid'])) { App::redirect(".." . Pictures::$VIEW_PIC_URL . "?picid=" . $_POST['picid']); } else { error_404(); } } ?>
Voilà les fonctions appelées :

Code : Tout sélectionner

static function get_user($db, $user_id) { $req = $db->query("SELECT * from users where id = ' $user_id '", [$user_id])->fetch(PDO::FETCH_ASSOC); if ($req) { $row = array(); while ($row = $req) { $req[] = $row; break; } return $row; } else { return False; } } static function current_user() { if (isset($_SESSION['userid'])) { if (!self::$cur_user) { self::$cur_user = Users::get_user($_SESSION['userid']); } return self::$cur_user; } else { return False; } }
Merci de votre soutien :D

superNoob
Invité n'ayant pas de compte PHPfrance

16 août 2020, 17:26

Code : Tout sélectionner

Notice: Trying to access array offset on value of type bool in C:\xampp\htdocs\Demo_php_inc_class\add_comment.php on line 15

Code : Tout sélectionner

Fatal error: Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'user_id' cannot be null in C:\xampp\htdocs\Demo_php_inc_class\class\Comments.php:36
ça me paraît être la même erreur

Merci :D