PHP mysql connexion

Ginolattera Messages postés 26 Statut Membre -  
 Utilisateur anonyme -
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. Utilisateur anonyme
     
    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'].'"');
    0
    1. Utilisateur anonyme
       
      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
      0
  2. Ginolattera Messages postés 26 Statut Membre
     
    @ 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
    0
    1. Utilisateur anonyme
       
      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
      0
  3. Ginolattera Messages postés 26 Statut Membre
     
    @ 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();
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. Utilisateur anonyme
     
    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);
    0
  6. Utilisateur anonyme
     
    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
    0
    1. Utilisateur anonyme
       
      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.
      0
    2. Utilisateur anonyme
       
      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 : )
      0
    3. Utilisateur anonyme
       
      Franchement bizarre, ta remarque. Ginolattera utilise la programmation objet depuis le début.
      À moins que tu ne fasses l'amalgame PDO / POO ?
      0
    4. Utilisateur anonyme
       
      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 ^^
      0
  7. Ginolattera Messages postés 26 Statut Membre
     
    @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]);
    }
    0
  8. Ginolattera Messages postés 26 Statut Membre
     
    cette ligne:
    public funtion __construct($nom){
    donne le même résultat d'erreur
    0
  9. Ginolattera Messages postés 26 Statut Membre
     
    @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
    0
  10. Ginolattera Messages postés 26 Statut Membre
     
    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
    0
  11. Utilisateur anonyme
     
    public funtion

    function, pas funtion
    0
    1. Utilisateur anonyme
       
      tu as un oeil de lynx ^^
      0
  12. Utilisateur anonyme
     
    ...
    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
    0
    1. Utilisateur anonyme
       
      Euh... Ça voudrait dire quoi, en pratique, que $nom serait typée à l'entrée du constructeur ? J'avoue que je ne vois pas
      0
    2. Utilisateur anonyme
       
      j'essairai ça

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


      ou
      VAR public $nom;
      
      0
    3. Utilisateur anonyme
       
      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.
      0
  13. Ginolattera Messages postés 26 Statut Membre
     
    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');
    ?>
    0
  14. Ginolattera Messages postés 26 Statut Membre
     
    vous m'excusez que je vais travailler pour un moment, pour savoir si je pourrai résoudre moi même, merci comme même
    0