PHP mysql connexion

Bonjour,
j'ai un problème sur mon script, mon serveur indique une erreur sur la ligne:
$produit = $result->fetch_assoc();
l'erreur est: Fatal error: Call to a member function fetch_assoc() on a non-object in C:\wampserver32\www\sale\ajout_panier.php on line 7
je n'arrive pas trouver la cause,
qq'un peut m'aider ? SVP

<?php
session_start();

$mysql = new mysqli('localhost', 'root', '', 'testebase');
$result = $mysql->query('SELECT * FROM trybase WHERE name= '.$_POST['name']);
$produit = $result->fetch_assoc();

require_once 'panier.php';

$valeur = array(
'name'=>$produit['name'],
'price'=>$produit['price'],
'quantity'=>$_POST['quantity']
);
$panier->set($_POST['name'], $valeur);
header('location: votre_panier.php');
?>

14 réponses

  1. vous m'excusez que je vais travailler pour un moment, pour savoir si je pourrai résoudre moi même, merci comme même
    1. vous m'excusez que sur le script: panier.php
      c'est une erreur de frappe sur le mot function, je viens de le corriger,
      ce script n'est plus en question, mtn, ça revient encore une fois sur le script aujout_panier.php,
      que cette ligne ($panier->set($_POST['name'], $valeur);)a deux erreur:
      Undefined variable: panier in C:\wampserver32\www\sale\ajout_panier.php on line 17
      Call to a member function set() on a non-object in C:\wampserver32\www\sale\ajout_panier.php on line 17

      je voudrais répéter ce script (ajout_panier.php), est ce que vous pouvez trouver les causes ?:
      <?php
      session_start();

      $mysql = new mysqli('localhost', 'root', '', 'testebase');

      $result = $mysql->query('SELECT * FROM trybase WHERE name= "'.$_POST['name'].'"') or die ($mysql->error);
      $produit = $result->fetch_assoc();

      require_once 'panier.php';

      $valeur = array(
      'name'=>$produit['name'],
      'price'=>$produit['price'],
      'quantity'=>$_POST['quantity']
      );
      $panier->set($_POST['name'], $valeur);
      header('location: votre_panier.php');
      ?>
      1. ...
        public $nom;
        private static $nbPanier = 0;
        public function _construct($nom){
        $this->nom = $nom; 
        ...
        


        $nom n'est pas typée à l'entrée du constructeur, l'erreur ne viendrait-elle pas de là ?

        cdt
        En informatique 99% des problèmes se situent entre le fauteuil et le clavier
        1. Euh... Ça voudrait dire quoi, en pratique, que $nom serait typée à l'entrée du constructeur ? J'avoue que je ne vois pas
        2. j'essairai ça

          <?php
          class Panier{
          VAR $nom;
          private static $nbPanier = 0;
          public funtion _construct(){
          $this->nom = $nom;
          } 


          ou
          VAR public $nom;
          
        3. 1 - Où est-il question de type dans ta réponse ?
          2 - Quelle différence entre
          public $nom;
          et
          var $nom;
          à l'intérieur d'une classe ? D'après le manuel PHP 5, c'est la même chose
          public $nom;
          étant la nouvelle syntaxe et
          var $nom;
          étant toléré pour garder une certaine compatibilité avec les versions précédentes.
          3 - si tu enlèves le paramètre $nom du contructeur, que sgnifie alors la ligne
          $this->nom = $nom;
          ? Que représente le $nom de droite ?
          4 - Quant à
          VAR public $nom;
          , c'est tout simplement une erreur de syntaxe.
      2. public funtion

        function, pas funtion
        1. tu as un oeil de lynx ^^
      3. j'ai ouyblié de mettre l'erreur de ligne:
        syntax error, unexpected T_STRING, expecting T_VARIABLE in C:\wampserver32\www\sale\panier.php on line 5
        1. @ludobabs
          je crois que l'idée de le père est bonne,
          mtn, le problème se trouve sur l'autre script: panier.php
          1. cette ligne:
            public funtion __construct($nom){
            donne le même résultat d'erreur
            1. @le père
              j'ai mis cette ligne comme tu dis
              $result = $mysql->query('SELECT * FROM trybase WHERE name= "'.$_POST['name'].'"') or die ($mysql->error);

              ça donne erreur sur l'autre script:panier.php line 5 (public funtion _construct($nom){)
              donc, il me semble ta ligne qui marche,
              voici une partie de ce script panier.php:
              <?php
              class Panier{
              public $nom;
              private static $nbPanier = 0;
              public funtion _construct($nom){
              $this->nom = $nom;
              }
              public function set ($key, $value){
              $_SESSION['paniers'][$this->nom][$key] = $value;
              }
              public function get($key){
              if(isset($_SESSION['paniers'][$this->nom][$key]))
              return $_SESSION['paniers'][$this->nom][$key];
              return null;
              }
              public function delet($key){
              if(isset($_SESSION['paniers'][$this->nom][$key]))
              unset($_SESSION['paniers'][$this->nom][$key]);
              }
              1. ou alors ...

                $pdo = new PDO('mysql:host=localhost;dbname=nom_de_ma_base','root','');
                $this->connexion_bd = $pdo; 
                $this->data=$connexion_bd->query("SELECT code_article FROM articles WHERE bla bla bla");
                $this->data_vue = $this->data->fetch();
                echo  $this->data_vue['code_article'];
                


                de tête, à vérifier

                cdt
                En informatique 99% des problèmes se situent entre le fauteuil et le clavier
                1. Tant qu'à le faire passer à PDO, il aurait mieux valu lui faire utiliser les requêtes préparées.
                  Et utiliser le try .. catch dont tu parlais plus haut pour capturer son erreur.

                  Ce que Ginolattera cherche à faire doit pouvoir marcher aussi bien avec mysqli qu'avec PDO, je ne vois aucune raison sérieuse de l'inciter à changer.
                2. Tout a fait d'accord avec toi, c'etait juste pour insidieusement parler de la programmation orientée objet ... plus dans l'air du temps : )
                3. Franchement bizarre, ta remarque. Ginolattera utilise la programmation objet depuis le début.
                  À moins que tu ne fasses l'amalgame PDO / POO ?
                4. non non pas d'amalgame, c'est juste que j'ai l'habitude de programmer en MVC avec PDO pour les bases mysql. J'ai juste marqué cela au regard de l'erreur générée : Fatal error: Call to a member function fetch_assoc() on a non-object ^^
              2. 1 - N'utilise pas LIKE à la place de =, LIKE et = ont des rôles différents.
                2 - ton "unexpected '='" est bizarre, il n'avait pas lieu d'être. D'autant plus qu'il a disparu dans tes interventions suivantes. Tu avais mal recopié, ou il y avait un caractère invisible (par exemple espace insécable).
                3 - dans ton dernier message, où tu as repris la requête que j'avais donnée et qui causait l'erreur unexpected = , il est normal que tu aies l'erreur "Call to a member function fetch_assoc() on a non-object" : tu n'as pas exécuté la requête ! Il te manque le mysql->query.
                4 - donc, c'est cette ligne qui est faux: $produit = $result->fetch_assoc(); Absolument pas, grosse erreur de raisonnement. php détecte une anomalie ici, ça veut dire qu'il y a un problème ici OU AVANT. Dans ton cas, c'est très probablement avant. C'est probablement à l'exécution de la requête.
                essaye
                $result = $mysql->query('SELECT * FROM trybase WHERE name= "'.$_POST['name'].'"') or die ($mysql->error);
                1. @ ludobabs
                  avec ta méthode:
                  $requete = 'SELECT * FROM trybase WHERE name= "'.$_POST['name'].'"';
                  echo $requete;
                  die('faux');

                  le serveur indique: SELECT * FROM trybase WHERE name= "Peter"faux
                  donc, il a l'air que cette ligne est correct,
                  mais quand je fais:
                  $result = 'SELECT * FROM trybase WHERE name= "'.$_POST['name'].'"';
                  $produit = $result->fetch_assoc();
                  echo $produit;
                  die('faux');

                  l'erreur est: Fatal error: Call to a member function fetch_assoc() on a non-object in C:\wampserver32\www\sale\ajout_panier.php on line 8

                  donc, c'est cette ligne qui est faux: $produit = $result->fetch_assoc();
                  1. @ le père
                    j'ai ait ce que vous dites, mais erreur affiche:
                    Parse error: syntax error, unexpected '=' in C:\wampserver32\www\sale\ajout_panier.php on line 7

                    mais je ne pense pas que je peux enlever '=', c'est aucun sens
                    1. Bonjour,

                      tu peux toujours faire

                      $requete = 'SELECT * FROM trybase WHERE name= "'.$_POST['name'].'"';
                      echo $requete;
                      die();


                      ainsi nous aurons la requête formée

                      tu peux utiliser LIKE à la place de =

                      cordialement
                  2. Bonjour

                    Ça marchera peut-être un peu mieux en mettant des quotes autour du nom :
                    $result = $mysql->query('SELECT * FROM trybase WHERE name= "'.$_POST['name'].'"');
                    1. C'est clair, je plussoie bien sur, le jeu d'enregistrement n'existe pas. Moi j'aurai laissé chercher

                      Un petit try et un catch pour gérer les exceptions et il aurait eu la repose de suite

                      Oh que je suis méchant !!!

                      cdt