[RESOLU] Lire un fichier dans un sous-répertoire

Avatar du membre
Mammouth du PHP | 1592 Messages

02 févr. 2023, 16:34

Tu utilises une variable $title qui n'est pas définie. Il suffit de la déclarer.
Développeur web depuis + de 20 ans

Avatar du membre
Eléphanteau du PHP | 49 Messages

02 févr. 2023, 16:49

Pour pousser mon exemple et t'expliquer un peu plus, voici le contenu du header.php :
<!DOCTYPE html>
<html lang="fr">
  <head>
    <meta charset="UTF-8">
    <title><?= $title ?></title>
<!-- je te conseil ici de mettre tes liens vers tes ressources avec un lien absolut pour qu'ils aient toujours le chemin correct, même quand tu sera dans un dossier) -->
    <link rel="stylesheet" href="<?= $url_site ?>/style.css">	
  </head>
<body>

et le contenu du footer.
two3d, j'ai suivi ton exemple et la syntaxe au sujet de "$title", sur la page, y a plus d'erreur, par contre, c'est dans l'onglet que ça va pas !
http://qi98.free.fr/temp/erreur title.jpg

J'avais encore du mal à m'y faire entre les fichiers contenant du html et étant nommés .php, et les fichiers php écrits en php.
C'est pour ça que j'ai suivi ton exemple !
D'ailleurs, je me demande pourquoi ne pas l'avoir fait plus tôt !

Avatar du membre
Mammouth du PHP | 1592 Messages

02 févr. 2023, 17:50

Si tu es attentif, tu remarqueras que dans son code, two3d déclare la variable $title avant de faire l'include.
$title = "Me contacter";
Développeur web depuis + de 20 ans

Avatar du membre
Eléphanteau du PHP | 49 Messages

02 févr. 2023, 18:01

Donc, même dans le header.php, il faudrait mettre ça ?
Je comprends pas trop là ! Entre "<title><?php echo $titre; ?></title>" dans le header et
"<<?php $title="Accueil"; ?>
<h3>Accueil</h3>
" dans les pages

Dans chaque page à consulter, j'ai déjà mis cette déclaration, mais rien ne s'affiche.

Je comprends plus là !
Modifié en dernier par jlb59430 le 02 févr. 2023, 18:12, modifié 1 fois.

Avatar du membre
Mammouth du PHP | 1592 Messages

02 févr. 2023, 18:05

Sans voir l'ensemble du code c'est dur de dire ce qui ne va pas mais toujours est-il qu'au moment ou php arrive sur le echo $title, la variable n'est pas définie ou n'est pas accessible pour x ou y raison sinon tu n'obtiendrais pas cette erreur.

Peu importe dans quel fichier se situe le echo du moment que la déclaration est bien faite avant.
Développeur web depuis + de 20 ans

Avatar du membre
Eléphanteau du PHP | 49 Messages

02 févr. 2023, 18:13

C'est pas déclarée dans le header ?

Avatar du membre
Mammouth du PHP | 1592 Messages

02 févr. 2023, 18:22

Si tu te référes au code de two3d tu dois déclarer $title avant l'include.

contact.php
<?php
$title = "Me contacter";
include 'header.php';
?>

Le contenu de la page contact ici.

<?php
include 'footer.php';

header.php
<!DOCTYPE html>
<html lang="fr">
  <head>
    <meta charset="UTF-8">
    <title><?php echo $title ?></title>
    <link rel="stylesheet" href="/style.css">	
  </head>
<body>

footer.php
</body>
</html>

Personnellement je préfère l'autre méthode. Un "layout" contenant tout le code html récurrent (entête, menu, pieds de page) dans lequel on inclut le contenu spécifique de la page, dans le style de ta première version mais elle demande peut être une compréhension un peu plus avancée.
Développeur web depuis + de 20 ans

Avatar du membre
Eléphanteau du PHP | 49 Messages

02 févr. 2023, 19:05

Justement, j'ai fait ça sur les pages, mais si dans le fichier "accueil.php" par exemple, il n'y a que
<?php $title = "Page accueil";
?><h3>Accueil</h3>
rien ne s'affiche ! Dans l'onglet, la variable n'est pas déclarée.

Et je ne peux pas mettre un autre "include header.php" parce qu'il y est déjà !

Je ne vois pas comment est la structure que tu m'as envoyée !

Je comprends de moins en moins, et tout ça, pour une petite variable !

Mammouth du PHP | 2632 Messages

02 févr. 2023, 20:51

"Sans voir l'ensemble du code c'est dur de dire ce qui ne va pas"
pas mieux

Avatar du membre
Eléphanteau du PHP | 49 Messages

03 févr. 2023, 07:51

"Sans voir l'ensemble du code c'est dur de dire ce qui ne va pas"
pas mieux
Ca déjà été mis !

Avatar du membre
Mammouth du PHP | 1488 Messages

03 févr. 2023, 11:15

Justement, j'ai fait ça sur les pages, mais si dans le fichier "accueil.php" par exemple, il n'y a que
<?php $title = "Page accueil";
?><h3>Accueil</h3>
rien ne s'affiche ! Dans l'onglet, la variable n'est pas déclarée.
Le problème, je pense, c'est que t'essaye de suivre mon schéma, tout en utilisant ta méthode GET, c'est soit ma méthode (page en dur avec variables dynamique, comme le titre), soit ta méthode avec des array pour définir les title et autres valeurs dynamique que tu souhaiterais attribuer dans la page demandée (du moins pour commencer, à ton niveau, c'est déjà pas mal) ;)

Donc si tu prends ma méthode, les pages sont appelées : example.com/contact.php
Si tu fait avec ta méthode, les pages sont appelées : example.com/?page=contact

Si tu met la variable $title dans un fichier inclut, c'est normal qu'il la calcule pas car elle est déclarée après l'inclusion du header.php (on ne peut pas mettre une variable n'importe où dans le code en espérant qu'elle soit prise en compte plus haut, ça marche avec les fonctions mais pas les variables), les variables doivent être initialisée avant leur utilisant dans la page.

Avatar du membre
Eléphanteau du PHP | 49 Messages

03 févr. 2023, 11:56

Ca y est, j'ai trouvé comment il fallait faire.
Probablement des fautes de syntaxes.

index.php
(...)
<!-- debut de la page entete_inc.php-->
	<header class="header">
		<?php $title = "QI98 - $nom_page"; ?>
		<?php include("entete_inc.php"); ?> 
	</header>
(...)
Donc, ce problème est résolu, mais certainement qu'il y en aura d'autres, comme par exemple, dans le conteneur, je ne sais pas comment mettre un aside ou un article de manière fixe quand une page est appelée ?
http://qi98.free.fr/temp/exemple.jpg
Mais à mon avis, ça doit se gérer avec du CSS !

Enfin, on verra bien par la suite !
De toute manière, comme le dit le proverbe, "Paris ne s'est pas fait en un jour"

Avatar du membre
Mammouth du PHP | 1488 Messages

03 févr. 2023, 12:05

Oui, c'est avec du CSS.
"Paris ne s'est pas fait en un jour"
Ou Rome, le résultat est le même ^^

Tu peux passer en Résolu.

Avatar du membre
Eléphanteau du PHP | 49 Messages

03 févr. 2023, 14:08

Oui, je vais faire ça.
Merci pour tout

Mammouth du PHP | 2632 Messages

03 févr. 2023, 15:10

<header class="header">
<?php $title = "QI98 - $nom_page"; ?>
<?php include("entete_inc.php"); ?>
</header>
la balise title n'est pas entre <header> et </header>
le résultat passe la validation w3c ?