Les fonctions et les includes
geoffreyvp
-
geoffreyvp -
geoffreyvp -
Bonjour a tous,
voila je reprend le codage php recemment après un long temps d'absence , et je dois avouer que ca fait du bien de reprendre un peu les codes en main
Par contre , créant un nouveau site web , je tombe sur une erreur qui me semble particulière. En tout cas, je n'ai jamais eu ca avant ...
Voila le soucis en bref :
J'ai une page "index.php" qui a une variable "$newstitle[$valuetraduction]"
J'ai une autre page "fonctions.php" qui contient l'ensemble de mes fonctions crées
et une page "traduction.php" qui contient l'ensemble des traductions pour mon site
Le problème est le suivant :
J'ai dans ma page "traduction.php" un tableau sous la variable "$newstitle" qui contient des données.
Ma page fonctions.php contient elle la valeur de "$valuetraduction" dans une fonction "up" qui me sert a ne pas retaper l'entete constamment. (la variable est obtenue en fonction du lien avec un $_GET). Dans cette fonction up , un "include" pour la page traduction.php est fait.
Essayant de recuperer ces variables, j'appelle donc simplement la fonction up (en ayant bien inclus la page fonctions.php), et là, magie, mais je me retrouve avec les 2 variables non assignées ...
Alors que si je deplace la requete de la page index.php à fonctions.php , la ca marche...
Est ce que la fonction "include" aurait une portée ?
Merci d'avance pour vos réponses :)
geof
ps : voici certains codes qui peuvent surement etre utiles
la fonction "up"
la page index.php
la page traduction.php
2ème PS : faites pas attention a certaines erreurs de structure, je corrige ca plus tard (le session_start après le include par exemple ^^)
voila je reprend le codage php recemment après un long temps d'absence , et je dois avouer que ca fait du bien de reprendre un peu les codes en main
Par contre , créant un nouveau site web , je tombe sur une erreur qui me semble particulière. En tout cas, je n'ai jamais eu ca avant ...
Voila le soucis en bref :
J'ai une page "index.php" qui a une variable "$newstitle[$valuetraduction]"
J'ai une autre page "fonctions.php" qui contient l'ensemble de mes fonctions crées
et une page "traduction.php" qui contient l'ensemble des traductions pour mon site
Le problème est le suivant :
J'ai dans ma page "traduction.php" un tableau sous la variable "$newstitle" qui contient des données.
Ma page fonctions.php contient elle la valeur de "$valuetraduction" dans une fonction "up" qui me sert a ne pas retaper l'entete constamment. (la variable est obtenue en fonction du lien avec un $_GET). Dans cette fonction up , un "include" pour la page traduction.php est fait.
Essayant de recuperer ces variables, j'appelle donc simplement la fonction up (en ayant bien inclus la page fonctions.php), et là, magie, mais je me retrouve avec les 2 variables non assignées ...
Alors que si je deplace la requete de la page index.php à fonctions.php , la ca marche...
Est ce que la fonction "include" aurait une portée ?
Merci d'avance pour vos réponses :)
geof
ps : voici certains codes qui peuvent surement etre utiles
la fonction "up"
function up()
{
session_start();
include('include/traduction.php');
$currentpage = $_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'];
if(isset($_GET['lang']))
{
$lang = strtoupper($_GET['lang']);
}
else
{
$lang = 'FR';
}
if($lang == 'FR' OR $lang == 'fr')
{
$valuetraduction = 1;
}
elseif($lang == 'AN' OR $lang == 'an')
{
$valuetraduction = 2;
}
elseif($lang == 'NL' OR $lang == 'nl')
{
$valuetraduction = 3;
}
else
{
echo '<head><meta charset="utf-8"></head>
<body>Nous avons eu un problème , Cliquez ici pour rafraichir votre page -> <a href="index.php?lang=FR">Ici</a><br />
We hebben een probleem gehad, click hier om te updaten the pagina -> <a href="index.php?lang=NL">Hier</a><br />
We got a problem, click here for refresh the page -> <a href="index.php?lang=AN">Here</a></body>';
exit();
}
echo '<!DOCTYPE html>
<html lang="'.$lang.'">
<head>
<meta charset="utf-8">
<title>**** - '.$lang.'</title>
<link rel="stylesheet" href="design.css" />
</head>
<body>
<div id="page">
<div id="entete">
<div id="choicelanguage" onmouseover="getElementById(\'choicelanguagefull\').style.display = \'block\';" onmouseout="getElementById(\'choicelanguagefull\').style.display = \'none\';">? '.$lang.'</div>
<div id="choicelanguagefull" onmouseover="getElementById(\'choicelanguagefull\').style.display = \'block\';" onmouseout="getElementById(\'choicelanguagefull\').style.display = \'none\';"><a href="http://'.$currentpage.'?lang=FR"><img src="img/language/fr.png" width="50" height="25" /> FR</a><br /><a href="http://'.$currentpage.'?lang=NL"><img src="img/language/nl.png" width="50" height="25" /> NL<br /><a href="http://'.$currentpage.'?lang=AN"><img src="img/language/an.png" width="50" height="25" /> AN<br /></div>
</div>
<div id="menuline"><div id="menuaccueil"><a href="index.php?lang='.$lang.'"><input id="buttonlink" type="button" value="'.$menu1[$valuetraduction].'"/></a></div><div id="magasinmenu"><a href="shop.php?lang='.$lang.'"><input id="buttonlink" type="button" value="'.$menu2[$valuetraduction].'" /></a></div><div id="contactmenu"><a href="contact.php?lang='.$lang.'"><input id="buttonlink" type="button" value="'.$menu3[$valuetraduction].'" /></a></div><div id="wheremenu"><a href="where.php?lang='.$lang.'"><input id="buttonlink" type="button" value="'.$menu4[$valuetraduction].'" /></a></div><div id="sectionrestante"><a href="index.php?lang='.$lang.'"><input id="buttonlink" type="button" value="'.$menu5[$valuetraduction].'" /></a></div></div>
';
la page index.php
<?php
include('functions.php');
up();
?>
<div id="defil">
</div>
<div id="news">
<div id="titlenews"><?php echo $newstitle[$valuetraduction]; ?></div>
</div>
<?php
down();
?>
la page traduction.php
<?php
//General
$menu1 = array('Accueil','Accueil','Home','Home');
$menu2 = array('Catalogue','Le Catalogue','The Catalogue','De Webcataloog');
$menu3 = array('Contact','Contactez nous','Contact us','Contacteer Ons');
$menu4 = array('endroit','Où nous trouver ?','How To Find Us ?','Waar Vindt U Ons ?');
$menu5 = array('Soldes','Soldes','Sales','Promoties');
//index
$newstitle = array('titre','Tenez vous au courant','Stay informed','blijf op de hoogte');
//Catalogue
//Emplacement
//Contact
//Reste
?>
2ème PS : faites pas attention a certaines erreurs de structure, je corrige ca plus tard (le session_start après le include par exemple ^^)
A voir également:
- Les fonctions et les includes
- Fonction si et - Guide
- Codes secrets Android : accéder aux fonctions cachées - Guide
- Les fonctions excel en anglais - Guide
- Fonctions excel - Guide
- Libreoffice calc fonction si et ou - Forum Bureautique
2 réponses
Bonsoir
Je ne suis pas sûr d'avoir tout compris de tes explications, mais si ton tableau $newstitle est défini dans traduction.php, et que traduction.php est inclus à l'intérieur de la fonction up(), alors sans le mot-clé global, $newstitle est une variable locale à la fonction up. Donc rien d'étonnant à ce que $newstitle ne soit pas connu en dehors de la fonction up(), que ce soit sans fonctions.php ou index.php.
Même chose pour ta variable $valuetraduction qui est elle aussi locale à up().
Il suffit d'ajouter une déclaration
2ème PS : Qu'est-ce qui empêche un session_start d'être après un include ?
Je ne suis pas sûr d'avoir tout compris de tes explications, mais si ton tableau $newstitle est défini dans traduction.php, et que traduction.php est inclus à l'intérieur de la fonction up(), alors sans le mot-clé global, $newstitle est une variable locale à la fonction up. Donc rien d'étonnant à ce que $newstitle ne soit pas connu en dehors de la fonction up(), que ce soit sans fonctions.php ou index.php.
Même chose pour ta variable $valuetraduction qui est elle aussi locale à up().
Il suffit d'ajouter une déclaration
global $valuetraduction,$newstitle;dans up() et ça devrait mieux marcher.
2ème PS : Qu'est-ce qui empêche un session_start d'être après un include ?
normalement un session start se met avant tout code
Non, non et archi non.
Le session_start() fait appel aux en-têtes HTTP et doit donc être utilisé avant l'envoi des données. Mais on peut exécuter tout le code php qu'on veut avant, tant qu'il n'envoie pas de données.
Il faut donc en particulier l'appeler avant <!doctype><html> etc, comme toutes les fonctions qui font appel aux en-têtes : header('location'), fonctions sur les cookies...
Non, non et archi non.
Le session_start() fait appel aux en-têtes HTTP et doit donc être utilisé avant l'envoi des données. Mais on peut exécuter tout le code php qu'on veut avant, tant qu'il n'envoie pas de données.
Il faut donc en particulier l'appeler avant <!doctype><html> etc, comme toutes les fonctions qui font appel aux en-têtes : header('location'), fonctions sur les cookies...
Pour le ps , normalement un session start se met avant tout code , hors la ce n'est pas le cas :-)
C'est pas une erreur mais ca ne se rapporte pas aux regles de codage