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

Avatar du membre
Eléphanteau du PHP | 49 Messages

31 janv. 2023, 18:21

On m'a donné un exemple de code pas trop lourd mais qui fonctionne bien.

Bien-sûr, il y avait quelques erreurs mais ça a vite été corrigé.

Avec tous ces codes, je ne sais plus exactement où se situe ce bout que tu m'a donné.

J'avais fait un squelette en html et l'ai fait contrôler par W3.
Il y avait beaucoup d'erreur qui ont été corrigées.
Maintenant, tout est OK, c'est vert partout.

J'ai mis du php, et pour l'instant ça va, comme on m'a dit que W3 n'analysait pas le php, en en mettant, j'espère que àa va toujours rester vert.
Il y a encore beaucoup d'améliorations à apporter, mais ce sera moins contraignent.
http://qi98.free.fr/temp/site-temporaire-vide/

En tout cas, merci beaucoup pour toute l'aide qui m'a été donnée;

Avatar du membre
Mammouth du PHP | 1476 Messages

31 janv. 2023, 19:19

Désolé mais ton code source est pas bon, tes includes (sans doutes) rajoutent des balises de document (regarde ton code source et navigue entre tes pages, tu verra des erreurs surlignées en rouge, du moins avec Firefox ou Chrome).

Image

Avatar du membre
Eléphanteau du PHP | 49 Messages

31 janv. 2023, 19:48

C'est noté two3d, je vais modifier cela.

Franchement, je ne pensais pas que seul l'écriture entre "<div> et <div.>" suffirait !

Donc, si j'ai bien compris, les pages appelées ne doivent pas contenir de doctype ?
Mais alors, si c'est ça, il est inutile de les renommer en php, seul le html devrait suffire ?

J'ai modifié et en regardant la source, je ne vois plus qu'un seul doctype.

Merci beaucoup et bonne soirée.

A bientôt peut-être.

Avatar du membre
Mammouth du PHP | 1476 Messages

31 janv. 2023, 20:47

Franchement, je ne pensais pas que seul l'écriture entre "<div> et <div.>" suffirait !
Même sans <div></div>, t'inclus et la page "maitre" s'occupe de baliser son contenu (ou pas).
Donc, si j'ai bien compris, les pages appelées ne doivent pas contenir de doctype ?
Si ta déjà mis le squelette dans ta page maitre, non.
C'est pas une page qui est destinée à être affichée seule, si c'est le cas (exemple : example.com/page.html) là il te faut définir un squelette.
Mais alors, si c'est ça, il est inutile de les renommer en php, seul le html devrait suffire ?
Si tu mets pas de code PHP dans ton document inclut, le format .html convient mais je te conseil de rester partout en .php, comme la précisé plus haut, si un jour tu viens à vouloir mettre du code PHP dans tes fichiers inclus, tu n'aura pas à modifier tout tes "include 'tonfichier.html'"

Bonne continuation, tu peux passer en résolu si c'est le cas ;)

Avatar du membre
Eléphanteau du PHP | 49 Messages

01 févr. 2023, 17:22

Bonjour two3D,

Test explications sembles claires,
Si j'ai bien tout compris :
Si j'ai une page "php", par exemple, "informations.php", je peux inclure une page "html" , mais pas l'inverse, c'est ça ?
Donc, si la page appelée depuis "information.php" est par exemple :"bon-a-savoir.html", ce dernier fichier doit contenir le doctype et éventuellement le css.

Mais dans la page "bon-a-savoir.html", je ne peux pas faire de inclure php !

C'est ce que j'ai cru comprendre dans tes explications.

--------------------------------------

Une petite question à titre personnel, je vois que ton site (https://www.c2script.com/) appelle des pages "php" mais je ne vois pas très bien comment tu fais !
C'est totalement différent de ce que tu pas donné ?

Avatar du membre
Mammouth du PHP | 1476 Messages

01 févr. 2023, 18:34

Si j'ai une page "php", par exemple, "informations.php", je peux inclure une page "html" , mais pas l'inverse, c'est ça ?
Ta pas compris ^^, dans une page .php on peut inclure le fichier qu'on veut (.html, .txt, .php ...) avec "include" de PHP.

Mais si jamais un jour tu viens à vouloir mettre du code PHP dans ta page .html incluse, déjà ça sera pas possible car il sera pas compilé ( le PHP se compile seulement dans un fichier .php) et deuxièmement tu devra modifier tes "include", en mettant .php à la place de .html.
Donc, si la page appelée depuis "information.php" est par exemple :"bon-a-savoir.html", ce dernier fichier doit contenir le doctype et éventuellement le css.
Ta pas compris non plus, en bref, le DOCTYPE d'une page doit être déclaré qu'un seule fois, dans le fichier que tu veux mais doit OBLIGATOIREMENT être correct et pas inclus en plein milieu :mrgreen: ou plusieurs fois.
Mais dans la page "bon-a-savoir.html", je ne peux pas faire de inclure php !
Exact, les fichiers .html ne compileront pas ton code PHP, ne t'embête pas avec .html, mets .php dès le départ, ça t'évitera de le modifier par la suite.

Une petite question à titre personnel, je vois que ton site (https://www.c2script.com/) appelle des pages "php" mais je ne vois pas très bien comment tu fais !
C'est totalement différent de ce que tu pas donné ?
J'ai tout simplement mes pages à la racine (contact.php, services.php,...) mais par contre j'inclus dynamiquement mon header (qui inclus mon DOCTYPE) et mon footer qui ferme le </body> et le </html>, dans ces pages en question.

Voilà le schéma de mes pages (ici la page contact.php pour l'exemple) :
<?php

//contact.php

//j'inclus le header, qui applique le DOCTYPE, les CSS,...
//tu peux passer des variables à ton header.php, par exemple le titre (<title>) de ta page :
$title = "Me contacter";
//dans ton header.php tu mets <title><?= $title ?></title>, et ton titre devient dynamique
include 'header.php';

?>

Mon formulaire

<?php
//j'inclus le footer, qui applique la fin du DOCTYPE </body> et </html>
include 'footer.php';

Avatar du membre
Eléphanteau du PHP | 49 Messages

02 févr. 2023, 06:25

Ta pas compris ^^, dans une page .php on peut inclure le fichier qu'on veut (.html, .txt, .php ...) avec "include" de PHP.

Mais si jamais un jour tu viens à vouloir mettre du code PHP dans ta page .html incluse, déjà ça sera pas possible car il sera pas compilé ( le PHP se compile seulement dans un fichier .php) et deuxièmement tu devra modifier tes "include", en mettant .php à la place de .html.
Cette fois, je crois avoir compris (quelle patience tu as ! :D ).
Si un fichier était publicite.html par exemple, maintenant, il doit être php parce qu'e j'ai une partie php, et supprimer le doctype ! ! Mais si je fais ça, qu'advient-il de l'intitulé ">title>Publicité>/title> entre HEAD ?
<!DOCTYPE html>
<html lang="fr">
	<head>
		<meta charset="UTF-8">
		<title>Publicité</title>
		<link rel="stylesheet" href="style.css">	
	</head>

<body>

[b][color=#BF0000]<?php
echo '  <h2>Section</h2>';
echo '  <p class="gras">Section_index</p>';
echo '  	<p>Pour mettre ici une petite pub, ou une petite information, etc..</p>';
?>[/color][/b]

</body>
</html>
Ta pas compris non plus, en bref, le DOCTYPE d'une page doit être déclaré qu'un seule fois, dans le fichier que tu veux mais doit OBLIGATOIREMENT être correct et pas inclus en plein milieu :mrgreen: ou plusieurs fois.
Ne t'embête pas avec .html, mets .php dès le départ, ça t'évitera de le modifier par la suite.


Tu as raison, mais mélanger du html dans du php, ça se bouscule dans ma tête, parce que j'e ne connais pas trop les commande, ni même comment ça se passe sans le doctype. ! :cry:

Donc, dans l'exemple ci-dessus, si je mets cette page en php mais avec uniquement du code html, ça pourrait donné :
<?php
     echo '[b][color=#BF0000]';
     echo '  <h2>Section</h2>';
     echo '  <p class="gras">Section_index</p>';
     echo '       <p>Pour mettre ici une petite pub, ou une petite information, etc..</p>';
     echo '[/color][/b]';
?>
C'est un peu comme ça ?
.

---------------------------
J'ai tout simplement mes pages à la racine (contact.php, services.php,...) mais par contre j'inclus dynamiquement mon header (qui inclus mon DOCTYPE) et mon footer qui ferme le </body> et le </html>, dans ces pages en question.

Voilà le schéma de mes pages (ici la page contact.php pour l'exemple) :
<?php

//contact.php

//j'inclus le header, qui applique le DOCTYPE, les CSS,...
//tu peux passer des variables à ton header.php, par exemple le titre (<title>) de ta page :
$title = "Me contacter";
//dans ton header.php tu mets <title><?= $title ?></title>, et ton titre devient dynamique
include 'header.php';

?>

Mon formulaire

<?php
//j'inclus le footer, qui applique la fin du DOCTYPE </body> et </html>
include 'footer.php';
Je vois que c'est moi qui complique tout pensant faite pour un bien !

Un grand merci pour tout... et surtout de ta patience ! =D> :priere:

Avatar du membre
Eléphanteau du PHP | 49 Messages

02 févr. 2023, 08:13

Tu as eu la gentillesse de me montrer comment utiliser une variable dans header (<title><?= $title ?></title>) et même en mettant <?php, c'est pareil, aucun nom de page ne s'affiche dans l'onglet, pourtant dans le header, c'est mis dans la balise (head>.

Peut-être manque-t-il quelque chose ?

En tout cas, c'est une super idée de passer par le header, ça facilite grandement la tâche !.

Merci d'avance.

Avatar du membre
Mammouth du PHP | 1476 Messages

02 févr. 2023, 10:37

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.php est simple :
</body>
</html>
Les balises courtes "<?=" remplace le traditionnel "echo", pas besoin de mettre un ";" à la fin car c'est juste avec une fermeture, donc :
<?php echo $title; ?>
//devient :
<?= $title ?>
//plus sympa et rapide ;)

//ça marche aussi avec du texte seul ou un mélange :
<?= "Mon title est : $title" ?>

//ou :
<?= 'Mon title est : ' . $title ?>
//t'es obligé de concaténer quand t'utilise les simple quote ', mais avec " il compile tes variables
En résumé :

Dans un fichier .php, on est pas obligé de déclaré un DOCTYPE, sauf bien sûr si c'est ce fichier qui produit ton code source final, si c'est un fichier inclus, tu t'en fous, t'en que le fichier maitre affiche bien un DOCTYPE dans le code source final.

Partant du fait que le DOCTYPE correct est :
<!DOCTYPE html>
<html lang="fr">
  <head>
    <meta charset="UTF-8">
    <title></title>
  </head>
<body>
</body>
</html>
Si t'inclus un fichier avec un deuxième DOCTYPE :
<!DOCTYPE html>
<html lang="fr">
  <head>
    <meta charset="UTF-8">
    <title></title>
  </head>
<body>

<?php
include 'ma_page.php'; //contient un DOCTYPE (MAUVAISE PRATIQUE !! Le code source final aura deux DOCTYPE alors qu'il en faut qu'un !)
?>
</body>
</html>
Le résultat sera incorrect (Passe le au validateur d'ailleurs, tu verra ce qu'il te dit ^^ : https://validator.w3.org/#validate_by_input ) :
<!DOCTYPE html>
<html lang="fr">
  <head>
    <meta charset="UTF-8">
    <title></title>
  </head>
<body>
<!DOCTYPE html>
<html lang="fr">
  <head>
    <meta charset="UTF-8">
    <title></title>
  </head>
<body>
</body>
</html>
</body>
</html>

Avatar du membre
Eléphanteau du PHP | 49 Messages

02 févr. 2023, 13:11

Je ne savais pas trop la différence entre "quote" et "guillemet".
Tes explications sont nettes et claires.
Parfois, j'avais des erreurs et je ne voyais pas trop d'où ça pouvait venir !

Je pense avoir compris.

J'ai bien fait de la même manière, mais je n'arrive pas à afficher le titre dans l'onglet !
http://qi98.free.fr/temp/erreur title.jpg

Pourtant, j'ai bien recopié ce que tu m'as donné et examiné, mais je ne vois pas d'erreur !
C'est pas important, mais je trouve très bien ton astuce !
Si je ne mets pas "echo", j'ai un message d'erreur :
Parse error: syntax error, unexpected token "<", expecting end of file in C:\laragon\www\sementic-element-html-vide\entete_inc.php on line 6
<?php
echo '<!DOCTYPE html>';
echo '<html lang="fr">';
echo '	<head>';
echo '		<meta charset="UTF-8">';

echo '		<?= "Mon site - $title" ?>';


echo '		<link rel="stylesheet" href="style/style.css">';
echo '		<link rel="stylesheet" href="style/entete_inc.css">';	
echo '		<link rel="stylesheet" href="style/pied_inc.css">';
echo '	</head>';
echo '<body>';
echo '<div class="centre"><img src="images/banniere/logo_181x161.gif" alt="Page d\'accueil" width="181" height="161">';
echo '<img src="images/banniere/banniere_940x156.jpg" alt="" width="" height="">';
echo '<img src="images/banniere/logo_181x161.gif" alt="Page d\'accueil" width="181" height="161"></div>';

// les balises fermentes sont dans le footer //
?>

Avatar du membre
Mammouth du PHP | 1476 Messages

02 févr. 2023, 14:04

Dans une page PHP tu peux utiliser le HTML, t'es pas obligé de parler en PHP, comme tu fait :
<?php
echo '<!DOCTYPE html>';
echo '<html lang="fr">';
...
Une page .php est identique à .html sauf qu'il comprend le PHP.

Dans ta page.php, tu peux directement mettre :
<!DOCTYPE html>
<html lang="fr">
...
C'est beaucoup plus lisible et plus rapide que de tout mettre dans les echo.

Avatar du membre
Mammouth du PHP | 1582 Messages

02 févr. 2023, 14:29

Déjà comme dit two, pas la peine de tout écrire par echo.

Sinon ici c'est pas bon. Déjà il manque la balise <title></title> et le echo va écrire <?= "Mon site - $title" ?> ce qui ne veut rien dire pour le navigateur.
echo '        <?= "Mon site - $title" ?>';

Comme ça c'est mieux :
echo '        <title>' . $title . '</title>';
// ou
echo "        <title>$title</title>";

Mais c'est encore mieux de pas tout mettre dans un echo :
        <title><?php echo $title ?></title>

Si je ne mets pas "echo", j'ai un message d'erreur :
Forcément si tu mets le html entre les balises <?php ?> sans le mettre dans une chaine avec un echo, bah le php il aime pas...
Développeur web depuis + de 20 ans

Avatar du membre
Eléphanteau du PHP | 49 Messages

02 févr. 2023, 15:31

Dans une page PHP tu peux utiliser le HTML, t'es pas obligé de parler en PHP, comme tu fait :
Ah, ça y est, je comprends maintenant.

Ce sera quand même mieux... pour moi !

J'avais du mal à comprendre parce que je voyais pas mal de pages php où il y avait des "echo" pour pleins de choses, c'est pour ça alors que je m'emmêlais les pinceaux... et beaucoup de message d'erreurs !

Merci de l'astuce.

Avatar du membre
Eléphanteau du PHP | 49 Messages

02 févr. 2023, 15:39

Déjà comme dit two, pas la peine de tout écrire par echo.

Sinon ici c'est pas bon. Déjà il manque la balise <title></title> et le echo va écrire <?= "Mon site - $title" ?> ce qui ne veut rien dire pour le navigateur.
echo '        <?= "Mon site - $title" ?>';

Comme ça c'est mieux :
echo '        <title>' . $title . '</title>';
// ou
echo "        <title>$title</title>";

Mais c'est encore mieux de pas tout mettre dans un echo :
        <title><?php echo $title ?></title>

Si je ne mets pas "echo", j'ai un message d'erreur :
Forcément si tu mets le html entre les balises <?php ?> sans le mettre dans une chaine avec un echo, bah le php il aime pas...
J'ai compris et je vais essayer de faire pour un bien.

Comme me l'a fait two3d, il n'est pas nécessaire d'écrire en php même si la page ne contient que du htm, chose que je ne savais pas, ou presque pas car je pensais que ça engendrait des erreurs si je ne le faisais pas.

Avatar du membre
Eléphanteau du PHP | 49 Messages

02 févr. 2023, 16:26

Je laisse tomber ce moyen de lire la page en cour dans l'onglet.
J'ai essayé beaucoup de solutions... et j'ai toujours cette erreur :
Warning: Undefined variable $title in C:\laragon\www\sementic-element-html-vide\entete_inc.php on line 8
Pourtant, ce que m'avait donné two3d était une très bonne idée.

C'est certainement moi qui m'embrouille !