PHP mysql connexion

Fermé
Ginolattera Messages postés 22 Date d'inscription samedi 14 juin 2014 Statut Membre Dernière intervention 8 septembre 2015 - 16 août 2014 à 20:27
 Utilisateur anonyme - 17 août 2014 à 13:59
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

Bonsoir,

un grand classique ^^

https://openclassrooms.com/forum/sujet/fatal-error-call-to-a-member-function-fetch-74180

Cordialement

ps -> si ton fichier panier.php envoie quoi que ce soit en sortie, HEADER(location ... ne fonctionnera pas. une redirection pareille bouhuoouuuuuu c'est pas beau !

En informatique 99% des problèmes se situent entre le fauteuil et le clavier
0
Utilisateur anonyme
16 août 2014 à 21:02
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
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
Ginolattera Messages postés 22 Date d'inscription samedi 14 juin 2014 Statut Membre Dernière intervention 8 septembre 2015
17 août 2014 à 07:31
@ 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
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
Ginolattera Messages postés 22 Date d'inscription samedi 14 juin 2014 Statut Membre Dernière intervention 8 septembre 2015
17 août 2014 à 09:24
@ 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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
17 août 2014 à 10:03
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
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
Utilisateur anonyme
17 août 2014 à 10:09
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
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
Utilisateur anonyme
17 août 2014 à 11:27
Franchement bizarre, ta remarque. Ginolattera utilise la programmation objet depuis le début.
À moins que tu ne fasses l'amalgame PDO / POO ?
0
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
Ginolattera Messages postés 22 Date d'inscription samedi 14 juin 2014 Statut Membre Dernière intervention 8 septembre 2015
17 août 2014 à 11:40
@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
Ginolattera Messages postés 22 Date d'inscription samedi 14 juin 2014 Statut Membre Dernière intervention 8 septembre 2015
17 août 2014 à 11:41
cette ligne:
public funtion __construct($nom){
donne le même résultat d'erreur
0
Ginolattera Messages postés 22 Date d'inscription samedi 14 juin 2014 Statut Membre Dernière intervention 8 septembre 2015
17 août 2014 à 11:44
@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
Ginolattera Messages postés 22 Date d'inscription samedi 14 juin 2014 Statut Membre Dernière intervention 8 septembre 2015
17 août 2014 à 11:46
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
Utilisateur anonyme
17 août 2014 à 11:47
public funtion

function, pas funtion
0
Utilisateur anonyme
17 août 2014 à 11:51
tu as un oeil de lynx ^^
0
...
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
Utilisateur anonyme
17 août 2014 à 12:02
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
j'essairai ça

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


ou
VAR public $nom;
0
Utilisateur anonyme
17 août 2014 à 13:59
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
Ginolattera Messages postés 22 Date d'inscription samedi 14 juin 2014 Statut Membre Dernière intervention 8 septembre 2015
17 août 2014 à 13:00
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
Ginolattera Messages postés 22 Date d'inscription samedi 14 juin 2014 Statut Membre Dernière intervention 8 septembre 2015
17 août 2014 à 13:09
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