Page 1 sur 1

Array et Cie

Posté : 17 avr. 2007, 10:23
par Invité
Bonjour à vous tous,

J'aurai un petit problème à vous soumettre :

Je reprend un site de vente en ligne, développé par une autre personne.
A un moment donner sur ces scripts il y a ce code :

Code : Tout sélectionner

<? echo menu_right($d[0], $d[1], $d[2]); ?>
qui fait appel à une fonction (menu_right) qui traite les rubriques.
$d[0] est le nom de la rubrique (ex : Drap)
$d[1] est le nom de la sous-rubrique ( ex : Coton)
$d[2] est le nom du produit (ex : nuits calines) :o)

le problème c'est que au début, lorsque l'on ne clique sur aucune rubrique, les "array" $d[1] et $d[2] ne sont pas renseignés.. .ce qui donne une erreur du type :

Code : Tout sélectionner

Notice: Undefined offset: 1 in index.php on line 60
Alors j'ai pensé à faire un "isset" et de construire mon "echo" de la manière suivante :

Code : Tout sélectionner

$menu_droite= '<? echo menu_right('; // ici j'ouvre le marqueur PHP // rechercher les différentes valeurs if (isset($d[0])) { $menu_droite.='$d[0]'.", ";} // Si elle existe il l'inscrit if (isset($d[1])) { $menu_droite.='$d[1]'.", ";} // Si elle existe il l'inscrit if (isset($d[2])) { $menu_droite.='$d[2]'.", ";} // Si elle existe il l'inscrit $menu_droite=substr($menu_droite,0,-2); // ici j'enlève la virgule finale $menu_droite.= '); ?>'; // ici je ferme le marqueur PHP print_r ($menu_droite); // et la enfin je l'affiche
Au final c'est bien écrit, mais il semble ne pas l'interpreter !? (le fichier à bien l'extention ".php")
Dans le "code source" de la page la balise "<? ... ?>" et bien la mais comme en dur ?
J'ai essayé avec :

Code : Tout sélectionner

printf ($menu_droite); echo $menu_droite; ...
Mais rien à faire !?
Ou me suis-je trompé ?
Suis dans la bonne direction ?
Est ce réalisable ?

Merci de vos réponse.

Posté : 17 avr. 2007, 13:42
par guilt92
Bonjour,

il y a un premier probleme dans
$menu_droite= '<? echo menu_right('; // ici j'ouvre le marqueur PHP 
Si tu ecris $menu_droite c'est que tu es deja en php non ? Aussi je te conseille d'utiliser <?php ?> a la place de <? ?> c'est plus sur...

Sinon pour en revenir a ton probleme il me parait beaucoup plus simple de n'appeler la fonction menu_right que si les variables sont définies et je crois que c est ce que tu voulais faire... Dans ce cas je ferai quelque chose du style :
<?php
if(isset($d[0]) && isset($d[1]) && isset($d[2])) {
echo menu_right($d[0], $d[1], $d[2]); 
}
?>

Posté : 17 avr. 2007, 13:51
par Ultim4T0m
Il existe une fonction permettant d'exécuter le php situé dans une variable, je ne l'ai pas en tête, et n'ai pas le temps de chercher là, mais c'est peut-être cela que tu recherches non ?

Posté : 17 avr. 2007, 14:14
par sadeq
Oui, guilt92 a raison, la solution la plus logique est :
<?php 
if(isset($d[0]) && isset($d[1]) && isset($d[2])) { 
echo menu_right($d[0], $d[1], $d[2]);  
} 
?>
d'autant plus que la fonction menu_right doit exiger les trois paramètes et dans l'ordre (ce que ton code ne respecte pas).

Enfin, si tu tiens à ta solution, c'est la fonction eval() qui permet d'exécuter du code php stocké dans une chaîne.
Enlève alors les <? et ?> de la chaîne $menu_droite et fait un eval($menu_droite)

Comme ça:
$menu_droite= "echo menu_right("; 
// rechercher les différentes valeurs 
if (isset($d[0])) { $menu_droite.="'$d[0]', ";} else $menu_droite.=" null, "; // Si elle existe il l'inscrit sinon vide
if (isset($d[1])) { $menu_droite.="'$d[1]', ";} else $menu_droite.=" null, "; // Si elle existe il l'inscrit  sinon vide
if (isset($d[2])) { $menu_droite.="'$d[2]', ";} else $menu_droite.=" null, "; // Si elle existe il l'inscrit sinon vide

$menu_droite=substr($menu_droite,0,-2); // ici j'enlève la virgule finale 
$menu_droite.="); "; 

eval ($menu_droite); // et la enfin je l'exécute
Mais ceci n'est vrai que si tous les paramètres de la fonction "menu_right" sont facultatifs

Posté : 17 avr. 2007, 17:42
par Invité
Merci !
A vous, effectivement guilt92 a raison...
Ca fonctionne à la perfection.
Encore merci à vous tous
Cordialement