[Résolu] Pb de retour d'une fonction php dans une balise utilisateur

Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
#1
Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: !1.11.x
#~ Url du site : www.ido-france.org
#~ Hébergeur / Soft : OVH
#~ Informations Système :
#~ ----------------------------------------------
#~ Cms Version: 1.10.3
#~ Installed Modules:
#~ CMSMailer: 2.0.2
#~ CMSPrinting: 1.0
#~ FileManager: 1.2.0
#~ MenuManager: 1.7.7
#~ MicroTiny: 1.1.1
#~ ModuleManager: 1.5.3
#~ News: 2.12.3
#~ Search: 1.7
#~ ThemeManager: 1.1.4
#~ Config Information:
#~ php_memory_limit:
#~ process_whole_template: false
#~ output_compression: false
#~ max_upload_size: 64000000
#~ default_upload_permission: 664
#~ url_rewriting: none
#~ page_extension:
#~ query_var: page
#~ image_manipulation_prog: GD
#~ auto_alias_content: true
#~ locale:
#~ default_encoding: utf-8
#~ admin_encoding: utf-8
#~ set_names: true
#~ Php Information:
#~ phpversion: 5.3.16
#~ md5_function: On (Vrai)
#~ gd_version: 2
#~ tempnam_function: On (Vrai)
#~ magic_quotes_runtime: Off (Faux)
#~ E_STRICT: 0
#~ E_DEPRECATED: 8192
#~ memory_limit: 128M
#~ max_execution_time: 120
#~ output_buffering: 4096
#~ safe_mode: Off (Faux)
#~ file_uploads: On (Vrai)
#~ post_max_size: 64M
#~ upload_max_filesize: 64M
#~ session_save_path: /tmp (1777)
#~ session_use_cookies: On (Vrai)
#~ xml_function: On (Vrai)
#~ Server Information:
#~ Server Api: cgi-fcgi
#~ Server Db Type: MySQL (mysqli)
#~ Server Db Version: 5.1.66
#~ ----------------------------------------------
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~



Ecrivez votre question ici.

Bonjour,

Je suis confronté à un problème de retour d'une fonction php dans une balise utilisateur que je n'arrive pas à résoudre:

Soit {B0} une balise_utilisateur qui contient le code suivant:

require 'PRG.inc';
$smarty = cmsms()->GetSmarty();
$B="toto";
$B=Resultat();
$smarty->assign('C', $B);


Le fichier PRG.inc contient le code suivant:

<?php
$Liste=array("a","b","c");

function Resultat()
{
global $Liste;

$A= $Liste[1];
return $A ;
}

?>

Pourquoi le code <p> {$C} </p> affiche une valeur vide au lieu de la valeur "b" dans une page qui contient la balise utilisateur {B0}?
#1
Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: !1.11.x
#~ Url du site : www.ido-france.org
#~ Hébergeur / Soft : OVH
#~ Informations Système :
#~ ----------------------------------------------
#~ Cms Version: 1.10.3
#~ Installed Modules:
#~ CMSMailer: 2.0.2
#~ CMSPrinting: 1.0
#~ FileManager: 1.2.0
#~ MenuManager: 1.7.7
#~ MicroTiny: 1.1.1
#~ ModuleManager: 1.5.3
#~ News: 2.12.3
#~ Search: 1.7
#~ ThemeManager: 1.1.4
#~ Config Information:
#~ php_memory_limit:
#~ process_whole_template: false
#~ output_compression: false
#~ max_upload_size: 64000000
#~ default_upload_permission: 664
#~ url_rewriting: none
#~ page_extension:
#~ query_var: page
#~ image_manipulation_prog: GD
#~ auto_alias_content: true
#~ locale:
#~ default_encoding: utf-8
#~ admin_encoding: utf-8
#~ set_names: true
#~ Php Information:
#~ phpversion: 5.3.16
#~ md5_function: On (Vrai)
#~ gd_version: 2
#~ tempnam_function: On (Vrai)
#~ magic_quotes_runtime: Off (Faux)
#~ E_STRICT: 0
#~ E_DEPRECATED: 8192
#~ memory_limit: 128M
#~ max_execution_time: 120
#~ output_buffering: 4096
#~ safe_mode: Off (Faux)
#~ file_uploads: On (Vrai)
#~ post_max_size: 64M
#~ upload_max_filesize: 64M
#~ session_save_path: /tmp (1777)
#~ session_use_cookies: On (Vrai)
#~ xml_function: On (Vrai)
#~ Server Information:
#~ Server Api: cgi-fcgi
#~ Server Db Type: MySQL (mysqli)
#~ Server Db Version: 5.1.66
#~ ----------------------------------------------
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~



Ecrivez votre question ici.

Bonjour,

Je suis confronté à un problème de retour d'une fonction php dans une balise utilisateur que je n'arrive pas à résoudre:

Soit {B0} une balise_utilisateur qui contient le code suivant:

require 'PRG.inc';
$smarty = cmsms()->GetSmarty();
$B="toto";
$B=Resultat();
$smarty->assign('C', $B);


Le fichier PRG.inc contient le code suivant:

<?php
$Liste=array("a","b","c");

function Resultat()
{
global $Liste;

$A= $Liste[1];
return $A ;
}

?>

Pourquoi le code <p> {$C} </p> affiche une valeur vide au lieu de la valeur "b" dans une page qui contient la balise utilisateur {B0}?
#2
Bonjour,

Nous ne faisons pas de support pour les sites dont la version de CMS n'est pas à jour. Nous en sommes à là 1.11.7 et tu est toujours en 1.10.3, soit une version vieille de plus d'un an.

Aussi, dans le bloc de contenu global nommé "footer", retire le numéro de version qui indique quelles failles pourraient être utilisées pour nuire à ton site =>

Code :
[== Indéfini ==]
© Copyright 2004-2013 - CMS Made Simple
This site is powered by CMS Made Simple version 1.10.3

Tu peux aussi franciser la mention et modifier le lien CMSMS en utilisant l'adresse .fr au lieu de la .org.

Commence déjà par cela, puis places des traces dans ta balise utilisateur. Des echo avant et après l'appel de la fonction. (echo "---- B=".$B."----")

Pour effectuer la mise à jour, la procédure se trouve dans le Wiki de ce site.

Bon courage !
www.web-ep.be - Développeur Web Freelance - Développeur/Intégrateur CMS Made Simple (création de sites, développement de modules/plugins/templates sur mesure), spécialisé dans les sites pour l'immobilier.
#2
Bonjour,

Nous ne faisons pas de support pour les sites dont la version de CMS n'est pas à jour. Nous en sommes à là 1.11.7 et tu est toujours en 1.10.3, soit une version vieille de plus d'un an.

Aussi, dans le bloc de contenu global nommé "footer", retire le numéro de version qui indique quelles failles pourraient être utilisées pour nuire à ton site =>

Code :
[== Indéfini ==]
© Copyright 2004-2013 - CMS Made Simple
This site is powered by CMS Made Simple version 1.10.3

Tu peux aussi franciser la mention et modifier le lien CMSMS en utilisant l'adresse .fr au lieu de la .org.

Commence déjà par cela, puis places des traces dans ta balise utilisateur. Des echo avant et après l'appel de la fonction. (echo "---- B=".$B."----")

Pour effectuer la mise à jour, la procédure se trouve dans le Wiki de ce site.

Bon courage !
www.web-ep.be - Développeur Web Freelance - Développeur/Intégrateur CMS Made Simple (création de sites, développement de modules/plugins/templates sur mesure), spécialisé dans les sites pour l'immobilier.
#3
require 'PRG.inc'; ne fonctionnera jamais

met tout ton code PHP dans des balises utilisateurs qui seront appelées en suivant les unes après les autres depuis ton gabarit et tout fonctionnera Smile


et met toi à jour effectivement Wink
#3
require 'PRG.inc'; ne fonctionnera jamais

met tout ton code PHP dans des balises utilisateurs qui seront appelées en suivant les unes après les autres depuis ton gabarit et tout fonctionnera Smile


et met toi à jour effectivement Wink
#4
Merci aux 2 administrateurs pour vos réponses.

1) En attendant de mettre à jour ma version 1.10.3, j'ai retiré le n° de version et remplacé .org par .fr comme vous me l'avez conseillé.

2) L'instruction php require 'PRG.inc'; dans la balise utilisateur fonctionne car si je remplace dans la fonction Resultat() appelée le code $A= $Liste[1]; par $A= "hello"; alors {$C} affiche bien "hello" dans la page contenant la balise utilisateur.

Le retour de la fonction Resultat() dans la balise utilisateur semble ne pas fonctionner lorsque ce retour contient un élément de tableau. Bizarre!

3) Si je mets alors tout le code dans la balise utilisateur, j'ai l'erreur suivante:

Fatal error: Call to undefined function Resultat() in monsite/www/lib/classes/class.usertagoperations.inc.php(260) : eval()'d code on line 5
#4
Merci aux 2 administrateurs pour vos réponses.

1) En attendant de mettre à jour ma version 1.10.3, j'ai retiré le n° de version et remplacé .org par .fr comme vous me l'avez conseillé.

2) L'instruction php require 'PRG.inc'; dans la balise utilisateur fonctionne car si je remplace dans la fonction Resultat() appelée le code $A= $Liste[1]; par $A= "hello"; alors {$C} affiche bien "hello" dans la page contenant la balise utilisateur.

Le retour de la fonction Resultat() dans la balise utilisateur semble ne pas fonctionner lorsque ce retour contient un élément de tableau. Bizarre!

3) Si je mets alors tout le code dans la balise utilisateur, j'ai l'erreur suivante:

Fatal error: Call to undefined function Resultat() in monsite/www/lib/classes/class.usertagoperations.inc.php(260) : eval()'d code on line 5
#5
Y a un truc que je dois encore comprendre : est-ce que tu utilises cette fonction à plusieurs endroits?

L'inclusion de code comme tu le fais n'est pas très propre. Fais plutôt un plugin.

Ton souci me semble plus proche d'un problème de programmation en PHP que d'une difficulté d'utilisation/intégration de CMSMS.
www.web-ep.be - Développeur Web Freelance - Développeur/Intégrateur CMS Made Simple (création de sites, développement de modules/plugins/templates sur mesure), spécialisé dans les sites pour l'immobilier.
#5
Y a un truc que je dois encore comprendre : est-ce que tu utilises cette fonction à plusieurs endroits?

L'inclusion de code comme tu le fais n'est pas très propre. Fais plutôt un plugin.

Ton souci me semble plus proche d'un problème de programmation en PHP que d'une difficulté d'utilisation/intégration de CMSMS.
www.web-ep.be - Développeur Web Freelance - Développeur/Intégrateur CMS Made Simple (création de sites, développement de modules/plugins/templates sur mesure), spécialisé dans les sites pour l'immobilier.
#6
Merci Heriquet pour ta nouvelle réponse.

Evidemment j'ai simplifié au maximum le problème auquel je suis confronté. Mon programme PRG.inc contient en fait une fonction Resultat() assez complexe qui donne la phonétique IPA d'un mot en renvoyant un élément d'un tableau.

Pour te montrer la différence de comportement lorsque je change simplement la valeur de la variable $A dans la fonction Resultat() du code PRG.inc, j'ai créé dans le menu de mon site www.ido-france.org deux nouvelles lignes Test_hello et Test_tableau :

Test_hello correspond à $A="hello"; dans la fonction Resultat() et affiche bien hello.
Test_tableau correspond à $A= $Liste[1]; dans la fonction Resultat() et n'affiche rien.

Possible que ce soit un problème purement php mais pourtant je ne vois aucune anomalie php dans le code de ces exemples.

Ce test serait facile à faire sur un site 1.11.7 mais je n'ai pas le temps de faire ma mise à jour pour l'instant.
#6
Merci Heriquet pour ta nouvelle réponse.

Evidemment j'ai simplifié au maximum le problème auquel je suis confronté. Mon programme PRG.inc contient en fait une fonction Resultat() assez complexe qui donne la phonétique IPA d'un mot en renvoyant un élément d'un tableau.

Pour te montrer la différence de comportement lorsque je change simplement la valeur de la variable $A dans la fonction Resultat() du code PRG.inc, j'ai créé dans le menu de mon site www.ido-france.org deux nouvelles lignes Test_hello et Test_tableau :

Test_hello correspond à $A="hello"; dans la fonction Resultat() et affiche bien hello.
Test_tableau correspond à $A= $Liste[1]; dans la fonction Resultat() et n'affiche rien.

Possible que ce soit un problème purement php mais pourtant je ne vois aucune anomalie php dans le code de ces exemples.

Ce test serait facile à faire sur un site 1.11.7 mais je n'ai pas le temps de faire ma mise à jour pour l'instant.
#7
le faire sur la 1.11.7 ne corrigera certainement pas ton soucis, c'est par pure formalisme et obligation pour obtenir de l'aide sur ce forum Wink
#7
le faire sur la 1.11.7 ne corrigera certainement pas ton soucis, c'est par pure formalisme et obligation pour obtenir de l'aide sur ce forum Wink
#8
Je ne comprend pas pourquoi tu ne passes pas ta liste en paramètre de ta fonction... ca serait plus propre non ?

Ca affiche quoi déjà si tu fais un

print_r($Liste);exit;

dans ta fonction ?
www.web-ep.be - Développeur Web Freelance - Développeur/Intégrateur CMS Made Simple (création de sites, développement de modules/plugins/templates sur mesure), spécialisé dans les sites pour l'immobilier.
#8
Je ne comprend pas pourquoi tu ne passes pas ta liste en paramètre de ta fonction... ca serait plus propre non ?

Ca affiche quoi déjà si tu fais un

print_r($Liste);exit;

dans ta fonction ?
www.web-ep.be - Développeur Web Freelance - Développeur/Intégrateur CMS Made Simple (création de sites, développement de modules/plugins/templates sur mesure), spécialisé dans les sites pour l'immobilier.
#9
Heriquet,
comme je l'ai expliqué dans ma réponse précédente j'ai simplifié ma fonction pour pouvoir expliquer mon problème.

L'instruction global $Liste; dans la fonction rend visible dans la fonction la variable $Liste déclarée en dehors.

print_r($Liste);exit; ou print_r($Liste,true); dans la fonction n'affichent rien.
#9
Heriquet,
comme je l'ai expliqué dans ma réponse précédente j'ai simplifié ma fonction pour pouvoir expliquer mon problème.

L'instruction global $Liste; dans la fonction rend visible dans la fonction la variable $Liste déclarée en dehors.

print_r($Liste);exit; ou print_r($Liste,true); dans la fonction n'affichent rien.
#10
Oui de fait on aura du mal à t'aider plus alors.

A ta place, avec les éléments que tu me donnes, je ferais soit un plugin (y a des exemples très simples fournis avec le CMS), soit un petit module (en partant du module Skeleton qui est à installer depuis la forge).

Bon courage !
www.web-ep.be - Développeur Web Freelance - Développeur/Intégrateur CMS Made Simple (création de sites, développement de modules/plugins/templates sur mesure), spécialisé dans les sites pour l'immobilier.
#10
Oui de fait on aura du mal à t'aider plus alors.

A ta place, avec les éléments que tu me donnes, je ferais soit un plugin (y a des exemples très simples fournis avec le CMS), soit un petit module (en partant du module Skeleton qui est à installer depuis la forge).

Bon courage !
www.web-ep.be - Développeur Web Freelance - Développeur/Intégrateur CMS Made Simple (création de sites, développement de modules/plugins/templates sur mesure), spécialisé dans les sites pour l'immobilier.
#11
Après avoir fait un test, si $Liste est défini après l'instruction global $Liste, cela fonctionne.

<?php

function Resultat()
{
global $Liste;
$Liste=array("a","b","c");
$A= $Liste[1];
return $A ;
}

?>
#11
Après avoir fait un test, si $Liste est défini après l'instruction global $Liste, cela fonctionne.

<?php

function Resultat()
{
global $Liste;
$Liste=array("a","b","c");
$A= $Liste[1];
return $A ;
}

?>
#12
Merci Michel MD pour ton aide, ta modif fonctionne mais je souhaite déclarer le tableau $Liste en dehors de la fonction.

Je viens de trouver la solution. Le code de PRG.inc doit être le suivant

<?php

global $Liste;
$Liste=array("a","b","c");

function Resultat()
{
global $Liste;

$A= $Liste[1];
return $A ;
}

?>

Il fallait aussi déclarer en global la variable $Liste car l'instruction require 'PRG.inc' mise dans la balise ne lui donnait pas une portée globale.


Merci à tous pour votre aide.
Finalement c'était un problème de code php et non pas de version CMS.
#12
Merci Michel MD pour ton aide, ta modif fonctionne mais je souhaite déclarer le tableau $Liste en dehors de la fonction.

Je viens de trouver la solution. Le code de PRG.inc doit être le suivant

<?php

global $Liste;
$Liste=array("a","b","c");

function Resultat()
{
global $Liste;

$A= $Liste[1];
return $A ;
}

?>

Il fallait aussi déclarer en global la variable $Liste car l'instruction require 'PRG.inc' mise dans la balise ne lui donnait pas une portée globale.


Merci à tous pour votre aide.
Finalement c'était un problème de code php et non pas de version CMS.
#13
heriquet a écrit :Ton souci me semble plus proche d'un problème de programmation en PHP que d'une difficulté d'utilisation/intégration de CMSMS.

Oui c'est bien ce que je t'ai dit.

Nous n'avons pas dit que ca pouvait être un problème de version, mais que pour recevoir de l'aide, il est demandé de venir avec un CMS à jour, dans l'intérêt de tout le monde et surtout le tien.

function Resultat()

=> pourquoi ne passes-tu pas ta liste en paramètre de ta fonction comme je l'ai suggéré ?

function Resultat($Liste)

Ca aurait résolu ton souci.

Déformation de coboliste ?
www.web-ep.be - Développeur Web Freelance - Développeur/Intégrateur CMS Made Simple (création de sites, développement de modules/plugins/templates sur mesure), spécialisé dans les sites pour l'immobilier.
#13
heriquet a écrit :Ton souci me semble plus proche d'un problème de programmation en PHP que d'une difficulté d'utilisation/intégration de CMSMS.

Oui c'est bien ce que je t'ai dit.

Nous n'avons pas dit que ca pouvait être un problème de version, mais que pour recevoir de l'aide, il est demandé de venir avec un CMS à jour, dans l'intérêt de tout le monde et surtout le tien.

function Resultat()

=> pourquoi ne passes-tu pas ta liste en paramètre de ta fonction comme je l'ai suggéré ?

function Resultat($Liste)

Ca aurait résolu ton souci.

Déformation de coboliste ?
www.web-ep.be - Développeur Web Freelance - Développeur/Intégrateur CMS Made Simple (création de sites, développement de modules/plugins/templates sur mesure), spécialisé dans les sites pour l'immobilier.


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)