Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/11/2011, 23h29   #1
Membre régulier
 
Inscription : février 2007
Messages : 132
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 132
Points : 94
Points : 94
Par défaut page précédente page suivante

Bonjour,
Je rencontre un problème avec a fonction include php.
Dans un premier temps pour réduire les écritures j'ai écrit le fichier pss2.php suivant: (pss pour Précédent, Sommaire, Suivant; pour un journal de 8 pages)
Code :
1
2
3
4
5
6
 
<div align="center">
<a href="page1.php">pr&eacute;c&eacute;dent</a>&nbsp;&nbsp;
<a href="sommaire.php">Sommaire</a>&nbsp;&nbsp;
<a href="page3.php">suivant</a>
</div>
En incluant deux fois ce fichier dans le fichier page2.php, au début et à la fin cela marche bien. Mais cela ne réduit pas beaucoup les écritures car il faut faire autant de fichiers que de pages du journal.
Donc j'ai refait un fichier pss.php comme cela:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
<?php
function url_actuelle()
{
     return $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
}
 
$url = (url_actuelle());
$parties = explode("/", $url);
$page = $parties[3];
$nbpage = substr($page , 4 , 1);
$nbpp = $nbpage - 1;
$nbps = $nbpage + 1; 
$pagep = str_replace($nbpage , $nbpp , "$page");
$pages = str_replace($nbpage , $nbps , "$page");
 
echo '<div align="center">';
echo '<a href=',$pagep, '>pr&eacute;c&eacute;dent</a>&nbsp;&nbsp';
echo '<a href="sommaire.php">Sommaire</a>&nbsp;&nbsp';
echo '<a href=',$pages, '>suivant</a>';
echo '</div>';
Cela marche bien sauf que contrairement à ce que j'ai fait précédemment la deuxième inclusion (en bas de page) ne se fait pas.
Quelqu'un peut-il me dire s'il est possible de faire marcher le deuxième include et si oui comment ?

Si cela fait sourire les experts je précise que je n'en suis pas un et que la seule chose que j'ai pompée c'est la fonction "function url_actuelle", alors pardonnez moi si je ne fait pas des chose académiques
rutabagas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 10h25   #2
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 671
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 671
Points : 5 404
Points : 5 404
Si tu inclus ce fichier 2 fois, tu vas essayer de définir la fonction url_actuelle 2 fois. Du coup, tu devrais logiquement avoir une erreur "function already defined"... Mais si tu fais un simple include, le fait que la 2e inclusion plante ne va pas planter toute la page, juste le morceau inclus. D'où ta 2e inclusion qui donne l'impression de ne pas être faite.
Le plus simple : sortir la définition de url_actuelle de ton fichier pss.php et la mettre dans un fichier à part chargé par un require_once (ou alors l'écrire directement dans les scripts avant la 1ere inclusion de pss.php)
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 15h01   #3
Membre régulier
 
Inscription : février 2007
Messages : 132
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 132
Points : 94
Points : 94
Citation:
Envoyé par Celira Voir le message
Si tu inclus ce fichier 2 fois, tu vas essayer de définir la fonction url_actuelle 2 fois. Du coup, tu devrais logiquement avoir une erreur "function already defined"... Mais si tu fais un simple include, le fait que la 2e inclusion plante ne va pas planter toute la page, juste le morceau inclus. D'où ta 2e inclusion qui donne l'impression de ne pas être faite.
Le plus simple : sortir la définition de url_actuelle de ton fichier pss.php et la mettre dans un fichier à part chargé par un require_once (ou alors l'écrire directement dans les scripts avant la 1ere inclusion de pss.php)
Merci ! Cela marche avec require_once.
Mais le php c'est bizarre car en principe les fonctions sont faites pour éviter d'écrire plusieurs fois le même code et donc pour être appelées plusieurs fois.
Si je comprend bien, require_once fait que à chaque include, les appels à la fonction url_actuelle sont indépendants ? Donc on ne redéfinie pas la même fonction ?
Merci encore
rutabagas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 16h07   #4
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 671
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 671
Points : 5 404
Points : 5 404
Citation:
les fonctions sont faites pour éviter d'écrire plusieurs fois le même code et donc pour être appelées plusieurs fois.
C'est exactement ça. Les fonctions sont faites pour être définies une fois et utilisées plusieurs fois.
Mais ce que faisait ton code, c'était définir la fonction à chaque fois que tu voulais l'utiliser.
D'une part, ça annule tout l'intérêt de la fonction (si tu as besoin de l'écrire à chaque appel, autant ne pas faire de fonction et écrire directement le code)
Et d'autre part ça provoque une erreur (vu qu'on ne peut définir une fonction qu'une seule fois)

Ce que fait require_once (ou include_once) c'est charger le fichier inclus si et seulement si il n'a pas déjà été chargé avant. Or justement, on cherche à définir la fonction si et seulement si elle n'existe pas déjà. Donc, en mettant la définition de la fonction dans un fichier inclus par require_once, on s'assure qu'elle ne sera définie qu'une seule fois.

Si tout fonctionne, un petit clic sur ?
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h17.


 
 
 
 
Partenaires

Hébergement Web