Aller au contenu

Erreur dans ma fonction


theprogrammeur

Sujets conseillés

Bonjour

Je me suis créé un fonction footer que voici:

function footer($validation, $xiti){
echo'<br /><br /><hr />
<!-- Creative Commons License -->
<div align="center">
<font size="2">
<a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/3.0/">
<img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png" />
</a>
<br />Sauf mention contraire, le contenu de cette page est sous licence
<a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/3.0/"> Creative Commons</a>.
</font></div><!--Fin CC--><br />';
//calcul du temps
$execution = microtime();
$execution = explode(' ',$execution);
$execution_fin = $execution[1]+$execution[0];
$temps = $execution_fin-$execution_debut;
$temps = round(($temps),4);
echo'Page générée en '.$temps.' secondes.';
//fin de calcul du temps
echo' <a href="#top">Retour en haut de la page</a>
<br />';
echo'
<!--Début XITI-->
<div id="xiti-logo">
<a href="http://www.xiti.com/xiti.asp?s=301054" title="WebAnalytics">
<script type="text/javascript">
<!--
Xt_param = \'s=28457&p='.$xiti.'\';
try {Xt_r = top.document.referrer;}
catch(e) {Xt_r = document.referrer; }
Xt_h = new Date();
Xt_i = \'<img width="39" height="25" border="0" \';
Xt_i += \'src="http://logv4.xiti.com/hit.xiti?\'+Xt_param;
Xt_i += \'&hl=\'+Xt_h.getHours()+\'x\'+Xt_h.getMinutes()+\'x\'+Xt_h.getSeconds();
if(parseFloat(navigator.appVersion)>=4)
{Xt_s=screen;Xt_i+=\'&r=\'+Xt_s.width+\'x\'+Xt_s.height+\'x\'+Xt_s.pixelDepth+\'x\'+Xt_s.colorDepth;}
document.write(Xt_i+\'&ref=\'+Xt_r.replace(/[<>"]/g, \'\').replace(/&/g, \'$\')+\'">\');
//-->
</script>
<object>
<noscript>
<div id="xiti-logo-noscript">
<img width="39" height="25" src="http://logv4.xiti.com/hit.xiti?s=301054&p=index&" alt="WebAnalytics" />
</div>
</noscript>
</object>
</a>
</div>
<!--Fin XITI-->';
if($validation=="oui"){
echo'<a href="http://validator.w3.org/check?uri=referer"><img
src="http://www.w3.org/Icons/valid-xhtml10"
alt="Valid XHTML 1.0 Transitional" height="31" width="88" /></a>';
}
elseif($validation=="non"){
echo'';
}
else{
echo''
}
echo'
</div>
</body>
</html>';
}

et dans la page, j'ai inclu le fichier où se trouve la fonction et j'ai tapé ceci à la fin du fichier:

footer('non', 'index');

Mais là, il ne sait pas m'afficher la page et je ne sais pas pourquoi. Où se trouve l'erreur?

Merci d'avance.

**EDIT Modérateur (TheRec)** Merci d'utiliser la balise CODEBOX à la place de CODE pour présenter un code long.

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir,

else{
echo''
}

Il te manque un point virgule en fin de ligne pour l'instruction echo. Cette erreur ne peut que s'afficher, c'est une erreur du parseur (avant même qu'une instruction de ton programme soit exécutée).

Mis à part cela, en PHP (comme dans beaucoup de langage), il existe un type booléen (boolean), qui représente une bascule binaire qui peut avoir deux états vrai (true) ou faux (false). Lorsque tu t'apprête à passer une paramètre comme 'oui', 'non' tu devrait te demander s'il ne serait pas préférable d'exploiter ce type de données (je parle en l'occurrence de ta fonction et du paramètre $validation).

Deuxièmement, ton code n'est pas du tout indenté, ce qui le rend illisible et c'est parfois ainsi qu'on ne voit pas ou qu'on laisse de des erreurs dans le code.

Finalement, pour savoir ou se trouve l'erreur il faut parfois afficher le code source envoyé au navigateur car lorsque la page de base (celle contenant l'include de ton fichier où se trouve ta fonction footer) a commencé à envoyer des données au navigateur, le message sera enfoui au millieu du code HTMl déjà envoyé et pourra peut-être se trouver ignoré au moment de l'affichage par le navigateur.

Bonne continuation.

Lien vers le commentaire
Partager sur d’autres sites

Merci mais j'ai un autre problème. Il ne sait pas afficher le temps d'exécution de la page. La fonction affiche un tas de chiffres incompréhensibles. J'ai l'impression qu'il n'a pas su soustraire le timestamp du début; pourtant le code est correct. Voici le code de récupération du temps au début de la page:


<?
function footer($validation, $xiti){
echo'<br /><br /><hr />
<!-- Creative Commons License -->
<div align="center">
<font size="2">
<a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/3.0/">
<img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png" />
</a>
<br />Sauf mention contraire, le contenu de cette page est sous licence
<a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/3.0/"> Creative Commons</a>.
</font></div><!--Fin CC--><br />';
//calcul du temps
$execution = microtime();
$execution = explode(' ',$execution);
$execution_fin = $execution[1]+$execution[0];
$temps = $execution_fin-$execution_debut;
$temps = round(($temps),4);
echo'Page générée en '.$temps.' secondes.';
//fin de calcul du temps
echo' <a href="#top">Retour en haut de la page</a>
<br />';
echo'
<!--Début XITI-->
<div id="xiti-logo">
<a href="http://www.xiti.com/xiti.asp?s=301054" title="WebAnalytics">
<script type="text/javascript">
<!--
Xt_param = \'s=301054&p='.$xiti.'\';
try {Xt_r = top.document.referrer;}
catch(e) {Xt_r = document.referrer; }
Xt_h = new Date();
Xt_i = \'<img width="39" height="25" border="0" \';
Xt_i += \'src="http://logv4.xiti.com/hit.xiti?\'+Xt_param;
Xt_i += \'&hl=\'+Xt_h.getHours()+\'x\'+Xt_h.getMinutes()+\'x\'+Xt_h.getSeconds();
if(parseFloat(navigator.appVersion)>=4)
{Xt_s=screen;Xt_i+=\'&r=\'+Xt_s.width+\'x\'+Xt_s.height+\'x\'+Xt_s.pixelDepth+\'x\'+Xt_s.colorDepth;}
document.write(Xt_i+\'&ref=\'+Xt_r.replace(/[<>"]/g, \'\').replace(/&/g, \'$\')+\'">\');
//-->
</script>
<object>
<noscript>
<div id="xiti-logo-noscript">
<img width="39" height="25" src="http://logv4.xiti.com/hit.xiti?s=301054&p=index&" alt="WebAnalytics" />
</div>
</noscript>
</object>
</a>
</div>
<!--Fin XITI-->';
if($validation=="oui"){
echo'<a href="http://validator.w3.org/check?uri=referer"><img
src="http://www.w3.org/Icons/valid-xhtml10"
alt="Valid XHTML 1.0 Transitional" height="31" width="88" /></a>';
}
elseif($validation=="non"){
echo'';
}
else{
echo'';
}
echo'
</div>
</body>
</html>';
}

C'est tout de même curieux car c'est le même code sur les autres pages (mais sans la fonction car le code est directement inclu dans la page) car là, le temps s'affiche correctement.

Merci.

Lien vers le commentaire
Partager sur d’autres sites

La portées des variables... c'est tout de même une notion fondamentale de la programmation.

Tu déclares la variable $execution_debut au début de ta page, hors de ta fonction elle crée une nouvelle portée qui est inaccessible à la variable tant que tu ne précises pas que cette variable doit être modifiable/accessible depuis cette fonction.

Donc en première ligne de ta fonction (par exemple), tu peux ajouter cette ligne :

global $execution_debut;

Ceci indique à la fonction que cette variable est déclarée hors de la fonction et la rend accessible et modifiable à l'intérieur de celle-ci.

Ou alors, tu peux aussi passer cette variable en paramètre (par référence ou par valeur, à toi de voir l'usage que tu en feras) et l'utiliser sans avoir besoin de la déclarer. Il est plus logique de faire ainsi, car gérer des variables globales ainsi n'est pas conseillé et peut vite mener à de gros problèmes de cohérence difficiles à détecter (preuve en est, tu ne savais pas d'où pouvait venir ce problème).

Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)

Re-bonjour

En plus de la fonction footer, j'ai créé une fonction de header que voici:


function en_tete($titre, $description, $dossier, $menu){
$execution = microtime();
$execution = explode(' ',$execution);
$execution_debut = $execution[1]+$execution[0];
echo'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">';
echo'<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">';
echo'<head>';
echo'<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />';
echo'<title>'.$titre.'</title><meta name="description" content="'.$description.'" />';
//vérification de l'addresse de la page
if($dossier=="dossier"){
echo'<link rel="stylesheet" type="text/css" href="../page.css" />';
include('../geshi/geshi.php');
}
elseif($dossier=="racine"){
echo'<link rel="stylesheet" type="text/css" href="page.css" />';
include('geshi/geshi.php');
}
else{//il y a eu un bug alors on fait comme si c'était un dossier. Il y a plus de chances que ce soit juste
echo'<link rel="stylesheet" type="text/css" href="../page.css" />';
include('../geshi/geshi.php');
}
//fin du if pour la détection de dossier
echo'<head><body>';
//paramètres d'inclusion du menu
$include_menu = $menu.'.php';
include($include_menu);
//fin de l'inclusion du menu
//début du contenu
echo'<div id="contenu"><div id="top"></div>';
//fin du contenu
//fin de la fonction
[size=3][font="Fixedsys"][color="#FF0000"]return $execution_debut;[/color][/font][/size]
}

Comme vous le voyez, j'ai dit à la variable de renvoyer la variable $execution_debut pour qu'elle puisse être utilisée par la fonction footer() qui la prend comme argument. Pourtant, ça ne fonctionne pas. Où est le problème?

Merci

Modifié par theprogrammeur
Lien vers le commentaire
Partager sur d’autres sites

La valeur de $execution_debut est renvoyée par ta fonctions soit, mais la récupères-tu lorsque tu fais appel à cette fonction ?

$temps_intial = en_tete('mon titre', 'ma description', 'mon dossier', 'mon menu');

Ensuite cette variable $temps_intial devra être rendu accessible à ta fonction footer soit par paramètre, soit en tant que variable globale (solution que je te déconseille d'utiliser).

Concernant la fonction en_tete, la solution la plus judicieuse selon moi serait passer cette variable par référence (ajouter un paramètre &$execution_debut), car ce n'est pas vraiment la tâche effectuée par cette fonction que de calculer le temps (la tâche principale étant d'afficher l'en-tête) et donc il n'y a pas vraiment de raison logique pour que cette fonction renvoie le temps initial... mais c'est n'est qu'une question de logique, à toi d'appliquer la tienne.

Au risque de me répéter, tout ceci fait partie des bases de la programmation, pas du PHP, de la majorités des langages de programmation, selon moi tu as plus besoin de te concentrer sur ces fondamentaux pour partir sur une bonne base avant de programmer ton site... Internet regorge de cours gratuits, tires-en profit.

Bonne continuation.

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...