Fatal error: Call to a member function fetch()...

a marqué ce sujet comme résolu.

Bonjour, bonjour,

Avant que je vous montre mon code, autant vous prévenir je suis vraiment très nulle en programmation. Mais je suis obligée de la pratiquer étant donnée que je suis en DUT MMI. Nous avons un site de e-commerce à rendre, et comme tout site de e-commerce il contient un panier.

Voilà le problème :

Quand je navigue dans catalogue et que je souhaite ajouter un article dans mon panier. Mon site devrait m’envoyer sur une page qui me dit que l’article à bien été ajouter et me proposant de voir on panier, mais il me retourne c’est simple ligne :

Fatal error: Call to a member function fetch() on boolean in /home/etudiants/mmi16e08/public_html/dutaff/add_cart.php on line 95

J’ai donc regardé ligne 95, mais ne m’y connaissant pas du tout, je ne vois pas d’ou vient l’erreur.

Voici le code :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
        @ $bdd = new PDO('mysql:host='.localhost.';dbname='.basemmi16e08.';charset=utf8',mmi16e08,ncYL);

         $requete = 'SELECT * FROM articles WHERE art_id='.$a ;
  $exe = $bdd->query($requete);
  $article = $exe->fetch();
  echo '<p> L\'article '.$article['art_id'].' a bien été ajouter! </p>';
  //On construit un tableau contenant les informations de l'article, qui seront sauvegardées dans le panier

    $tableau = array(
        'nom'      => $article['art_descript'],
        'code'     => $article['art_id'],
        'prix'     => $article['art_prix'],
        'quantite' => 1
    );

    //si le panier existe on ajoute le produit
    if (isset($_SESSION['panier'])) {
      if (isset($_SESSION['panier'][$article['art_id']])) {
        $_SESSION['panier'][$article['art_id']]['quantite']++;
      } else {
        $_SESSION['panier'][$article['art_id']] = $tableau;}
    } else
    {
    //sinon, on initialise le panier et on ajoute le produit.
        $_SESSION['panier'] = array();
        $_SESSION['panier'][$article['art_id']] = $tableau;
    }
  ?>

Merci d’avance pour l’aide que vous pourrez m’apporter.

Contrairement à ce que dit FougereBle, je pense plutôt que ta requête a échoué (d’où le boolean renvoyé par PDO::query() lors d’un échec).

  1. Vérifie que ta requête est valide
  2. Privilégie les requêtes préparées pour injecter des variables, tu éviteras pas mal de problèmes de sécurité
  3. Evite les @ en début de ligne. Ça a l’air pratique pour ne pas afficher d’erreur, mais c’est là tout le problème : ça masque tout, au lieu de te permettre de déboguer

Je suis totalement d’accord avec ce que dit viki53.

Ensuite, de mémoire si tu rajoute la ligne print_r($bdd->errorInfo()); après $exe = $bdd->query($requete); ça devrait t’indiquer l’erreur que tu as.

Et sinon @FougereBle, je doute que tu puisses appelé ->fetch() sur une ligne de texte ;) Je suppose que tu as été trompé par le faites qu’il n’utilise pas de requête préparé.

Et du coup, je te conseil de faire de cette manière-ci plutôt:

1
2
3
4
5
6
7
<?php //J'ajoute ça pour la coloration syntaxique

$requete = $bdd->prepare("SELECT * FROM articles WHERE art_id = :art_id");
$requete->execute(array(
   'art_id' => $a 
));
$article = $requete->fetch();
+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte