Bonjour tout le monde, J'ai un petit soucis avec le tuto, j'ai voulu le mettre sur mon site qui utilise sa propre BDD et la page addpanier bug du coup... [url=http://www.hostingpics.net/viewer.php?id=519398errorTT.png][img]http://img11.hostingpics.net/pics/519398errorTT.png[/img][/url] J'ai tout changé les mot panier par basket et la page panier.php s'appel cart.php Voici le code de addbasket.php [code]<?php require '_header.php';
$json = array('error' => true); if(isset($_GET['id'])){ $product = $DB->query('SELECT pID FROM products WHERE pID=:id', array('id' => $_GET['id'])); if(empty($product)){ $json['message'] = "Ce produit n'existe pas"; }else{ $basket->add($product[0]->pID); $json['error'] = false; $json['total'] = number_format($basket->total(),2,',',' '); $json['count'] = $basket->count(); $json['message'] = 'Le produit a bien été ajouté à votre panier'; } }else{ $json['message'] = "Vous n'avez pas sélectionné de produit à ajouter au panier"; } echo json_encode($json); [/code] Et la le code de db.class.php. [code]<?php class DB{
private $host = 'localhost';
private $username = 'root';
private $password = '';
private $database = 'solea';
private $db;
public function __construct($host = null, $username = null, $password = null, $database = null){
if($host != null){
$this->host = $host; $this->username = $username; $this->password = $password; $this->database = $database; } try{ $this->db = new PDO('mysql:host='.$this->host.';dbname='.$this->database, $this->username, $this->password, array( PDO::MYSQL\_ATTR\_INIT\_COMMAND => 'SET NAMES UTF8', PDO::ATTR\_ERRMODE => PDO::ERRMODE\_WARNING )); }catch(PDOException $e){ die('
Impossible de se connecter a la base de donnee
'); } } public function query($sql, $data = array()){ $req =$this->db->prepare($sql); $req->execute($data); return $req->fetchAll(PDO::FETCH_OBJ); } } [/code] Les champs de ma BBD products sont : pID pName pPirce Je comprends pas le message d'erreur et je sais pas trop comment résoudre ce problème même après plusieurs heures de recherche google :/ Quelqu'un aurait une idée ?
Après recherche, il paraît qu'il faut faire un bindParam() ou un bindValue() et de spécifier le type PDO (PDO::PARAM_INT si c'est int etc) parce qu'en faisant de cette manière, des côtes peuvent être insérées si le type de ta variable est un string.
Je l'ai vu sur ce topic :
http://fr2.php.net/fr/pdostatement.execute
Fait CTRL + F et tape 42000, tu vas direct tomber sur le commentaire de la personne en question
Ok je vois un peu prêt et ça donne quoi en ligne de code du coup ? Et je le met où ?
Le code serait qqchose comme ça je pense :
public function query($sql, $data = array()){
$req =$this->db->prepare('SELECT pID FROM products WHERE pID=:id');
$req->bindParam(':id', $data'id'], PDO::PARAM_INT); //PDO::PARAM_INT si c'est un int, sinon autre chose...
$req->execute();
return $req->fetchAll(PDO::FETCH_OBJ);
}
Euh la ça serait pour le cas d'un ajout au panier du coup vu la requête mais si je veux laisser la variable je fais comment ?
public function query($sql, $data = array()){
$req =$this->db->prepare($sql);
$req->bindParam(); //je met quoi dans les ()
$req->execute($data);
return $req->fetchAll(PDO::FETCH_OBJ);
}
Ah oui en effet j'ai oublié de remplacer la requête par $sql dans le code.
De toute façon, vu comment elle est construite, ta méthode est spécifique pour un select. Si tu voudrais y faire un insert, tu n'aurais pas besoin d'un fetchAll par exemple.
Le bindParam tu peux laisser celui que j'ai mis plus haut, ça devrait te remplacer :id par l'id que tu passé en paramètre dans ton tableau $data.
ça donne ceci alors ?
public function query($sql, $data = array()){
$req =$this->db->prepare($sql);
$req->bindParam(':id', $data'id'], PDO::PARAM_INT); //PDO::PARAM_INT si c'est un int, sinon autre chose...
$req->execute($data);
return $req->fetchAll(PDO::FETCH_OBJ);
}
Si oui, ça ne marche pas
D'ailleurs, je suis passé en compte premium... Quand j'utilise le code source de Grafikart, tout est ok mais quand j'adapte sur mon site j'ai cette erreur. Je pense du coup que ça ne vient pas de la :/
Si c'est ok sur le tuto de Grafikart, alors oui l'erreur ne vient pas de là.
C'est assez difficile comme ça de dire où ça ne fonctionne pas.
Essaye de regarder les logs, voir si qqchose de suspect remonte.
Si tu n'y arrive pas, reprends le code d'origine et modifie le petit à petit
J'ai fais ça et toujours la même erreur, tout viens du code source appart la page index mais c'est juste un lien avec l'ID donc ça c'est bon... Du coup, est-ce que ça pourrait venir du faites que mes id ne sont pas des chiffres en auto incr comme 1 2 3 ... mais un truc du genre AS-BL-010712
EDIT : Non j'ai fais un test et c'est pas ça aussi :(