Talal Abderrazzak Posted October 2, 2015 Share Posted October 2, 2015 Bonjour à tous, Je reviens vers vous encore une fois: J'ai une requête sql qui m'a posé un petit problème. En fait je souhaite sélectionner la valeur d'une colonne selon la valeur d'un ID: $find_counts = $conn->query('SELECT counts FROM fz_customer WHERE id_customer="{$customer.id}" '); Pour bien m'assurer de la valeur de l'id j'ai fais un echo pour l'afficher: echo '{$customer.id}'; Link to comment Share on other sites More sharing options...
coeos.pro Posted October 2, 2015 Share Posted October 2, 2015 un peu de lecture : https://www.prestashop.com/blog/fr/les-bonnes-pratiques-de-la-classe-db-sur-prestashop-1-5/ c'est valable pour 1.5 et 1.6 {$customer.id} <= ça, c'est du smarty Link to comment Share on other sites More sharing options...
Talal Abderrazzak Posted October 2, 2015 Author Share Posted October 2, 2015 Comment faire alors s'ils vous plait Link to comment Share on other sites More sharing options...
coeos.pro Posted October 2, 2015 Share Posted October 2, 2015 1- pour id_customer essaye avec Context::getContext()->customer->id 2- met (int) devant, c'est une bonne habitude à prendre 3- évite de mettre dans les requetes fz_customer, utilise _DB_PREFIX_ 4- elle fait quoi ta requete dans ton premier post ? qu'est ce que tu veux obtenir ? Link to comment Share on other sites More sharing options...
Talal Abderrazzak Posted October 2, 2015 Author Share Posted October 2, 2015 Je souhaite récupérer la valeur de la colonne "counts". En fait je souhaite récupérer le nombre des pages vue pour les profiles Link to comment Share on other sites More sharing options...
coeos.pro Posted October 2, 2015 Share Posted October 2, 2015 ok, donc tu as une colonne counts (qui n'existe pas par défaut), essaye avec : $find_counts = (int)Db::getInstance()->getValue('SELECT `counts` FROM `'._DB_PREFIX_.'customer` WHERE `id_customer` = '.(int)Context::getContext()->customer->id); Link to comment Share on other sites More sharing options...
Talal Abderrazzak Posted October 2, 2015 Author Share Posted October 2, 2015 Merci pour ton aide,mais il y a une erreur Parse error: syntax error, unexpected T_ECHO Link to comment Share on other sites More sharing options...
coeos.pro Posted October 2, 2015 Share Posted October 2, 2015 active le mode debug : https://www.prestashop.com/forums/topic/232472-que-faire-en-cas-de-page-blanche-ou-partie-blanche-dans-le-shop/ change define('_PS_MODE_DEV_', false); par define('_PS_MODE_DEV_', true); Link to comment Share on other sites More sharing options...
Talal Abderrazzak Posted October 2, 2015 Author Share Posted October 2, 2015 Voila l'erreur Parse error: syntax error, unexpected T_ECHO in /var/www/vhosts/vps143526.ovh.net/my-wall.fr/dev/tools/smarty/SmartyBC.class.php(464) : eval()'d code on line 14 Link to comment Share on other sites More sharing options...
Talal Abderrazzak Posted October 2, 2015 Author Share Posted October 2, 2015 (edited) Il fait un point virgule à la fin de la ligne, J'ai modifié le code. J'ai un problème au niveau de "echo", l'erreur suivante s'affiche: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '56 LIMIT 1' at line 1 try { $conn= new PDO("mysql:dbname=dev;host=localhost" , "dev", "admin987" ,array(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION)); $find_counts = null; //$find_counts = $conn->query('SELECT counts FROM fz_customer WHERE id_customer="{$customer.id}" '); $find_counts = (int)Db::getInstance()->getValue('SELECT `counts` FROM `'._DB_PREFIX_.'customer` WHERE `id_customer` = '.(int)Context::getContext()->customer->id); echo '<br>DEBUT WHILE'; //cas d'un retour vide if (!is_null($find_counts) && $find_counts !== FALSE) { //$row = $find_counts->fetch(); $row = Db::getInstance()->getRow($find_counts); } echo '<br>Cette page a été vue : '.$row['counts']; //$update_count = "UPDATE fz_customer SET counts= counts + 1"; $update_count=' UPDATE `'._DB_PREFIX_.'customer` SET counts= counts+1 '; /*$stmt = $conn->prepare($update_count); if (!$stmt->execute()) { echo '<br>ERREUR'; throw PDOException('ERREUR PDO TUTU',100); } else { echo '<br>Compteur modifie'; }*/ echo '<br>FIN WHILE'; } catch(PDOException $pdoE) { //CATCH ERREURS PDO die('Erreur:' .$pdoE->getMessage()); } catch(Exception $e) { //CATCH TOUTE ERREURS die('Erreur:' .$e->getMessage()); } Edited October 2, 2015 by Talal Abderrazzak (see edit history) Link to comment Share on other sites More sharing options...
Talal Abderrazzak Posted October 3, 2015 Author Share Posted October 3, 2015 Bonsoir, Voila j'ai arrivé à m'adapter mon code : $conn= new PDO("mysql:dbname=dev;host=localhost" , "dev", "mot_passe" ,array(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION)); $find_counts = null; $find_counts='SELECT counts FROM '._DB_PREFIX_.'customer WHERE id_customer = '.(int)Context::getContext()->customer->id; if ($row = Db::getInstance()->getRow($find_counts)) echo '<br>Nombre de visite: '.$row['counts']; $update_count=' UPDATE `'._DB_PREFIX_.'customer` SET counts= counts+1 WHERE id_customer = '.(int)Context::getContext()->customer->id; $results = Db::getInstance()->Execute($update_count); Tout marche bien sauf que la mise à jour de la valeur de 'counts' n'apprend pas en compte la valeur de l'ID Des solutions? Link to comment Share on other sites More sharing options...
Talal Abderrazzak Posted October 3, 2015 Author Share Posted October 3, 2015 En fait ça s'applique pour un seul ID, bizarre ! Link to comment Share on other sites More sharing options...
Talal Abderrazzak Posted October 3, 2015 Author Share Posted October 3, 2015 1- pour id_customer essaye avec Context::getContext()->customer->id 2- met (int) devant, c'est une bonne habitude à prendre 3- évite de mettre dans les requetes fz_customer, utilise _DB_PREFIX_ 4- elle fait quoi ta requete dans ton premier post ? qu'est ce que tu veux obtenir ? L'id que récupéré par cette fonction est statique en fait Link to comment Share on other sites More sharing options...
coeos.pro Posted October 5, 2015 Share Posted October 5, 2015 1- tu mélanges un peu tout 2- oublie PDO 3- $find_counts est un nombre (3, 8, 51...), donc Db::getInstance()->getRow($find_counts); ne peut rien donner 4- relis ça : https://www.prestashop.com/blog/fr/les-bonnes-pratiques-de-la-classe-db-sur-prestashop-1-5/ : Db::getInstance()->getValue renvoi une valeur Db::getInstance()->getRow renvoi une ligne Db::getInstance()->executeS renvoi un tableau avec éventuellement plusieurs lignes Db::getInstance()->delete c'est pour effacer une ligne Db::getInstance()->update c'est pour mettre à jour une ou plusieurs valeurs Db::getInstance()->insert c'est pour ajouter des données (lignes) 1 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now