Imbriquer 2 foreach PHP pour Prestashop

WRInaute passionné
Bonjour à tous,

Je sollicite votre aide car je bloque sur l'éxécution du PHP avec Prestashop. J'ai créé un fichier PHP que j'ai mis à la racine du site afin de me générer une liste mise en forme des infos de ma BDD.

J'ai déjà réalisé ce genre de chose sous Prestashop, je met mon fichier PHP à la racine, je me connecte à la BDD, je récupère traite et met en forme les infos dont j'ai besoin, aucun soucis. J'utilise des while, foreach, for etc...

Le problème c'est que sur mon nouveau site en Prestashop 1.5, le PHP n'est pas traité "normalement". Déjà, si je met un while, j'ai une page blanche. Du coup j'ai remplacé mon while par un foreach et là, ça marche. Là où je suis bloqué c'est qu'il faudrait que j'éxécute des foreach à l'intérieur de mon 1er foreach, et là page blanche également. J'ai tout essayé, je ne comprend pas comment il faut écrire les foreach imbriqués et autres.

Dans mon précédent site presta, toutes les fonctions du genre mysql_query, mysql_fetch_array s'éxecutais normalement et je pouvais faire ce que je voulais, en imbriquer à l'infini. Là je suis vraiment perdu, c'est comme si tout ce que je connaissais en PHP ne fonctionnais plus...

J'ai cherché dans la doc de Presta et j'ai trouvé ça http://www.prestashop.com/blog/fr/les-bonnes-pratiques-de-la-classe-db ... ashop-1-5/ concernant les fonctions SQL mais rien sur les fonctions PHP !

Help me please
 
WRInaute impliqué
Si tu as une page blanche c'est qu'il y une erreur php. Tout simplement.
error_reporting + ini set

Rien à voir avec ton while, tu as simplement du mal l'utiliser.
 
WRInaute passionné
@filiiip : Je n'ai pas mis de code PHP ici car c'est vraiment un code tout simple : requete SQL, boucle sur le tableau de résultat et echo... C'est juste que l'exécution parait anormale, si je fait un foreach il s’exécute correctement mais si j'en imbrique un 2ème, page blanche. De même pour la requête SQL, si j'utilise mysql_query cela ne fonctionne pas, il a fallu que je remplace par :
Code:
$product_query = Db::getInstance()->query('
	SELECT p.id_product, p.reference WHERE ....

Pareil pour la boucle, si je fais un while j'ai une page blanche, du coup je l'ai remplacé par un foreach et là ça fonctionne.

En fait il doit y avoir une syntaxe particulière à utiliser, je saurais m'en servir sans problèmes je pense mais je n'ai pas de doc dessus. J'ai quand même trouvé pas mal d'infos ici : http://doc.prestashop.com/pages/viewpage.action?pageId=15171593

Il y a un passage sur le "while" où il semble se déclarer normalement, mais pourtant page blanche.

Ce que je ne comprend pas c'est que c'est un fichier perso à la racine, donc je tape directement dans la BDD et du PHP c'est du PHP, mon serveur devrais l'éxécuter normalement, Prestashop ou pas ?!

Ou alors cela vient d'un des 2 fichiers que je charge au début qui remplace les fonctions de PHP classique ?
Code:
require(dirname(__FILE__).'/config/config.inc.php');
require(dirname(__FILE__).'/init.php');

@nervusdm : Comment doit-on déclarer ça pour voir les erreurs PHP ?
 
Nouveau WRInaute
Je ne connais pas Prestashop, donc j'ignore les contraintes que cela peut poser. Mais à mon humble avis, si foreach fonctionne et que while ne fonctionne pas... c'est qu'il y a un problème dans ton while, ce n'est sûrement pas "la faute à Prestashop". Une boucle infinie par exemple ? Si tu affiches la source de ta page blanche, que vois-tu ? Même tout simple, ça vaudrait le coup de voir ton code PHP, je pense... Bon courage !
 
WRInaute passionné
C'est pour ça que j'ai bien précisé "Prestashop" dans le titre, car le problème vient vraiment de ce système. En fait il faudrait juste une doc avec des exemples. Sinon comme je l'ai déjà dit, j'ai déjà fait ce genre de chose que, sans me vanter, je maitrise largement. Je t'assure qu'après des années à bosser en tant que développeur PHP/MySQL entre autres, je sais faire un while. Par ailleurs, une boucle infinie m'afficherait une infinité de résultats, et non une page blanche.

Sinon page blanche Prestashop = aucun code source. Et j'ai développé exactement la même chose sous Presta 1.4 et ça fonctionne impeccable avec les fonctions PHP classiques. Ici même un mysql_query ne fonctionne pas !

Je vais voir du côté de error_reporting + ini set comme proposé plus haut, si cela m'affiche les erreurs PHP je pourrai surement avancer.

Merci à vous, je reviendrai poster si je ne m'en sors tjrs pas...
 
WRInaute accro
Pour tes foreach, exécute la bonne req: Db::getInstance()->ExecuteS('

Code:
$sql1 = Db::getInstance()->ExecuteS('SELECT * FROM table1');
$sql2 = Db::getInstance()->ExecuteS('SELECT * FROM table2');
foreach($sql1 as $sql1_item) {
  foreach($sql2 as $sql2_item) {

fonctionne très bien ;)
 
WRInaute impliqué
Avant de mettre en cause prestashop, fais ce que t'as dit nervusdm si tu as une page blanche c'est qu'il y a une erreur
(declaration variables, syntaxe ou autres) ton php est configuré en "mode production" c'est à dire qu'il ne t'affiche pas les erreurs.

Si tu dois dev des trucs dessus, le mieux c'est de ré-activer l'affichage des erreurs ainsi tu sauras exactement pourquoi le double foreach ne fonctionne pas et en plus tu gagneras du temps par la suite dans ton dev.
 
WRInaute passionné
Cela fonctionne enfin comme je le voulais, en suivant le schéma proposé par KOogar.

Effectivement la moindre petite erreur d'appel à une variable mal créée ou autre Presta renvoie page blanche sans source !

Du coup j'ai changé pas mal de trucs dans ma procédure et mon traitement donc je ne sais même pas où était précisément l'erreur de départ, mais en tout cas j'ai atteint mon but.

@Koogar : pour ne plus m'embêter j'utilise celle de plus bas niveau, Db::getInstance()->query(', comme ça plus de problèmes. Parce que entre celle qui ne récup que la 1ère ligne, l'autre le 1er résultat de la 1ère ligne etc... Autant faire une query classique !

Merci à tous
 
Discussions similaires
Haut