Pourquoi ça ne va pas ?

Rechercher

Pourquoi ça ne va pas ?

Par jlb59  -  71 reponses  -  Le 21/01/2023 19:34  -  Editer  - 

Bonjour à tous,

Moi aussi, je suis resté en stagnation de programmation depuis 98.

Je suis maintenant retraité et pour ne pas perdre la main, et faire fonctionner mes neurones, je me remets petit à petit au xhtml, ccs, php, etc., c'est pas évident car ça a beaucoup évolué et c'est assez difficile de suivre !

Bref, mon site actuel et en majeur partie en html et un peu de php.
Je me demande s'il serait pas plus simple de tout faire en php, surtout que maintenant, ce serait nettement plus facile !

J'ai essayé ça :


<?php
/* J'appelle à chaque lancement la page par défaut /
if (!isset($_GET['pages'])) {
$_GET['pages'] = '1';
}
/
J'appelle la page concernée en cliquant sur le N° affiché */
if ($_GET['pages'] === '1') {
include 'pages/accueil.html';
} elseif ($_GET['pages/p1'] === '2') {
include 'pages/p1/p1.html';

} elseif ($_GET['pages/p2'] === '3') {
include 'pages/p2/p2.html';
} else {
exit('Page demandée inexistante');
}
echo '<!DOCTYPE html>';
echo '<html lang="fr">';
echo ' <head>';

(...)

echo ' <li><a href="<?php "pages/p1/p1.html?pages=pages/p1/p1.html?p1=".$page1."" ?>Page1</a> - </li>';
echo ' <li><a href="<?php "pages/p2/p2.html?page2=".$page2."" ?>Page2</a></li>';
(...)

J'ai essayé 2 méthodes pour appeler les pages P1 et P2.html, mais aucune ne fonctionne.

Pourriez-vous me dire pourquoi ça ne va pas et comment y remédier ?

Merci d'avance de vos réponses.

Cordialement,
JLB59

 

Réponses apportées à cette discussion

Par Cyrano  -  Le 28/01/2023 04:07  -  Haut de page  - 

Bonjour, ce la tient plus que probablement au fait que la page appelée est en .html et non en .php.
Du coup, le serveur reçoit une requête qui ne lui demande pas d'interpréter de php.

Alors il faudrait commencer par avoir la page d'entrée, par exemple « index.php » dans lequel le tri est effectué sur le paramètre appelé, p1, p2, etc...

Les urls peuvent alors être simplifiées en index.php?page=p1

Dans ce cas, on simplifie également le code de tri

<?php
/* On définit la valeur par défaut de la page demandée */
$page = null;
/* On vérifie quel paramètre a été envoyé pour sélectionner la bonne page */
if (!isset($_GET['page'])) {
    $page = $_GET['page'];
}

Ensuite, on peut simplement utiliser un switch pour définir la page à inclure

switch($page){
    case 'p1':
        $page = 'p1.html';
        break;
    case 'p2':
        $page = 'p2.html';
        break;
    default:
        $page = '404.html'; // Page d'erreur, à créer.
}
/* Ici on peut maintenant envoyer l'en-tête HTML */
?>
<!DOCTYPE html>
<html lang="fr">
  <head>
    <title>. . . .</title>
  </head>
<?php
/* On peut maintenant include la page à afficher */
include $page;

?>

Et là ça devrait fonctionner. Il y a d'autres méthodes, mais celles-ci pour retrouver la main devrait convenir.

 
Par jlb59  -  Le 28/01/2023 09:46  -  Haut de page  - 

Bonjour,

C'est bien de m'avoir envoyé ce code, et j'en ai essayé d'autres mais le résultat générait toujours un message d'erreur !

J'ai simplement changé le nom des fichiers présents sur mon ordinateur !


Warning: Undefined array key "page" in C:\laragon\www\apprendre-php.com\index.php on line 6

Warning: include(erreur-404.html): Failed to open stream: No such file or directory in C:\laragon\www\apprendre-php.com\index.php on line 34

Warning: include(): Failed opening 'erreur-404.html' for inclusion (include_path='.;C:/laragon/etc/php/pear') in C:\laragon\www\apprendre-php.com\index.php on line 34


Pour mon info, comment mettre dans un cadre ([quote], [code])

 
Par jlb59  -  Le 28/01/2023 11:48  -  Haut de page  - 

Oubli !

"la page appelée est en .html et non en .php.
Du coup, le serveur reçoit une requête qui ne lui demande pas d'interpréter de php."

Le code en question est "index.php" et je fais mes essais en local !

 
Par jlb59  -  Le 30/01/2023 17:05  -  Haut de page  - 

Bonjour,

Pour l'instant, je ne fais que mes essais en local !

A part les fichiers principaux (header, main, etc.) il n'y a pas pas d'importance que des fichiers dans des répertoires et sous-répertoires soient en Php !

Je l'ai lu dans les manuels php et c'est ce qu'on m'a dit dans les forums.

Du moment que l'index est en php, ça doit suffire.
Index.php
Header_inc.php
Menu_inc.php
Footer.php
Voilà les principaux fichiers nécessaires !

On m'a donné plusieurs sortes de code en plus de celui-ci, mais ça ne fonctionne pas correctement.

Déjà pour commencer, comme j'ai mis dans menu_inc.php les liens pour les pages, il est difficile, pour moi en tout cas, pour qu'il réponde au code de l'index.

Je voudrais bien envoyer le code php, mais je ne vois pas comment faire ?

 
Par Cyrano  -  Le 30/01/2023 17:17  -  Haut de page  - 

Ok, alors on va tâcher d'avancer pas à pas.

Partons donc de cette liste de fichiers :
-1- le fichier index.php qui est la porte d'entrée;
-2- Les éléments constitutifs de la page (header, menu et footer)

Il y manquerait le contenu lui-même, mais on peut prévoir un contenu par défaut, d'autant que ce contenu dépendra du paramètre collecté ou non dans l'url.

Je vais partir du principe que dans le fichier header_inc.php, on trouvera quelque chose du style :

<!DOCTYPE html>
<hmtl>
  <head>
    <title>Le titre de la page</title>
    <!-- autres inclusions et méta informations -->
  </head>
  <body>

Dans le fichier menu_inc.php, sûrement du code HTML aussi, et pareil dans le fichier footer.php

Note importante

On est pas obligé d'avoir du code PHP dans un de ces fichiers, mais dans la mesure où ils ont l'extension PHP, ça permet d'inclure des variable qui seront interprétées normalement. Si le code HTML est écrit directement, lors de l'inclusion dans le fichier index, ça reviendra à faire un « echo » de ce code.

Attention

Le nom des fichiers pourrait être écrit tout en minuscule, mais attention, le serveur est sensible à la casse, donc appeler quelque part « Header_inc.php » ne fonctionnera pas si le fichier s'appelle « header_inc.php »

Recommandation

dans la configuration de PHP, dans le fichier php.ini, surtout en local, il faudrait configurer la directive « display_error » à ON et la directive « error_reporting » à « E_ALL » de telle sorte que toutes les erreurs soient affichées à l'écran.

 
Par jlb59  -  Le 31/01/2023 08:02  -  Haut de page  - 

Bonjour cyrano,

J'ai bien pris note de toutes tes recommandations et t'en remercie.

Si j'ai mis header, menu_inc, footer, etc., en php, l'écriture n'a pas de DOCTYPE et je n'ai pas pensé aux variables !

Je vais immédiatement remédier à ça et essayer de faire valider par W3.

Je sais que le serveur fait la distinction entre M et m.
Si dans mon poste, il y a des majuscules pour les fichiers php, c'est machinal quand j'écris un post.
Merci quand même !

Par contre au niveau de la RECOMMANDATION, j'ai pas trop saisi ?
La directive « displau_error » serait pas « display_error » par hasard !

 
Par Cyrano  -  Le 31/01/2023 08:14  -  Haut de page  - 

Pour display_error, effectivement, faute de frappe de ma part, je viens de corriger ma réponse précédente.

Ceci étant, avant de faire valider le code par le W3C, je suggère de procéder de façon plus rationnelle :
-1- Construire la page attendue en HTML;
-2- La faire valider ;
-3- En découper le code pour construire les différentes parties en PHP
-4- Lorsque la page sera alors dynamiquement affichée, vérifier la source et la comparer avec la maquette initialement validée.

De cette manière, il y aura beaucoup moins de perte de temps.

Par ailleurs, dans l'immédiat, je suggère de commencer par faire fonctionner le système, que le html soit valide ou pas, à ce stade ce n'est pas bien dramatique, il s'agit de bien comprendre et faire fonctionner le PHP.

 
Par jlb59  -  Le 31/01/2023 10:13  -  Haut de page  - 

Ok, je te remercie.

J'ai fait un squelette de site, dans index.php, il y a les "include" pour le header, nav, main, footer. Ces derniers sont php parce que c'est codé en php/html.

Qu'est-ce tu entends par "Construire la page attendue en HTML" ?

Si ce sont les pages appelées pour le conteneur, elles sont toutes en html et validées par W3 !

 
Par Cyrano  -  Le 31/01/2023 10:20  -  Haut de page  - 

Quand je parle de « page attendue en HTML », je veux dire qu'il est généralement plus rationnel de commencer par construire des maquettes.

Ces maquettes, on les construit juste en HTML, même si le contenu est complètement bidon, ça n'a aucune importance, l'idée c'est de valider d'une part la mise en forme (CSS entre autres) et d'autre part le code.

Par la suite, quand on a validé la maquette, on peut alors passer a la construction en PHP. On va alors isoler dans la maquette chacune des parties de la page qu'on va répartir dans les différents fichiers (head, nav, main, footer) en remplaçant le contenu par des variables qui introduiront le contenu réel.

Et pour finir, dans la page index.php, on va appeler ces fichiers avec des « include » dans l'ordre où le code complet de la page doit être construit pour être renvoyé vers le navigateur.

 
Par jlb59  -  Le 31/01/2023 12:25  -  Haut de page  - 

J'ai très bien compris Cyrano, j'ai fait un squelette et l'ai mis en ligne dans un répertoire temporaire.
J'ai essayé et tout va bien !

Bien que les pages nommées "Php" ne contiennent aucune variable, est-ce que ça va gêner au W3 ?

 
Par Cyrano  -  Le 31/01/2023 12:32  -  Haut de page  - 

La validation du W3C ne prend en compte que le code dit « client », c'est à dire ce que reçoit le navigateur, donc uniquement le HTML, les CSS et éventuellement le Javascript mais ce dernier ne sera pas analysé.
Le code Serveur (PHP, SQL) ne sera pas vu par l'analyseur du W3C puisqu'il ne quitte pas le serveur : il ne sert que coté serveur pour assembler les morceaux de code client pour construire la page qui sera alors retournée au navigateur.

 
Par jlb59  -  Le 31/01/2023 13:37  -  Haut de page  - 

C'est OK cyrano, j'ai compris.

J'ai fait analyser le site, bouh !!!! un nombre d'erreurs incalculable !
Apparemment, si le code html est encadré par "echo", c'est analysé.
Maintenant, il est fort possible que si ce n'était que du pur php, ce ne sera pas analysé.

En tout cas, même qu'avec du html, y a pas mas de choses à corriger.
Je fais tout ça et quand tout sera OK, j'essayerai avec des coddes php.

Merci beaucoup de ton aide.
Je ne manquerai pas de te contacter en cas de problème, parce que tu es nettement plus calé que moi.

Passe une bonne fin de journée.

A+
jlb59430

 
Par jlb59  -  Le 31/01/2023 17:01  -  Haut de page  - 

Cyrano, je voudrais avoir ton avis !

J'ai terminé le squelette html/php et comme tu m'as dit que W3 ne lisait pas le php, j'espère que ça rester valide.

Si tu as le temps, tu peux regarder vite fait
http://qi98.free.fr//temp/site-temporaire-vide/

Bien-sûr, il y aura encore beaucoup à faire, mais ce sera moins compliqué que le code pour appeler les pages.

Et comme tu m'avais dit au début (28/01/23 à 04h07), tu es matinal dis-donc, ça va nettement mieux en renommant les pages en php, tout en restant du html grâce à "echo*

 
Par Cyrano  -  Le 31/01/2023 17:12  -  Haut de page  - 

Je viens de regarder le code HTML : ça ressemble à une construction faite à partir de PHP.

Il y a plusieurs balises <html> imbriquées `ça, ce n,est pas du tout valide.

C'est pour ça que je suggère toujours de commencer par construire la page seulement en HTML d'abord, ensuite de découper et de répartir les différentes parties dans des fichiers PHP et ensuite de construire la page à partir du fichier index.php. De cette manière, on reconstruira tel que ça a été conçu sans ce genre d'empilement anormal.

AInsi, après cette ligne-ci :

<h4>Page affichée : pages/par_defaut.html</h4>

On devrait uniquement trouver :

      <div>
        <h2>defaut.html</h2>
      </div>

et non :

<html lang="fr">
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="content-type" />
    <title></title>
</head>
  <body>

    <div>
    <h2>defaut.html</h2>
    </div>
  </body>
</html>

Puisque ce qui précède et ce qui suit est déjà là

 
Par jlb59  -  Le 31/01/2023 17:41  -  Haut de page  - 

J'avais fait un squelette en html, que du html, et quand ça été fini, je l'ai fait testé par W3.
Des erreurs ont été découvertes et j'ai fait toutes les corrections.
Tant et si bien, que W3 n'a trouvé aucune erreur est à tout mis au vert.
Je n'ai pas téléchargé les logos de validation puisque ça ne se fait plus?
Il y a plus de 25 ans, s'aurait été une référence, mais c'est fini tout ça !

Quand tu parles de balises imbriquées, c'est uniquement les pages qui ont été renommées en php mais sont structurées en html grâce à "echo", et les fichiers "defaut.html" et "erreur-404.html" qui sont restés en html.

Comme tout était bon avec W3, j'ai commencer à mettre le code pkp pour appeler les pages !
Si ces dernières sont en php, c'est parce que dans différents forum, on me l'a conseillé, mais au départ, c'était en html et avec W3, j'ai fait les corrections.

Si comme tu dis, je ne mets que <div>...</div>, W3 va détecter une erreur, je l'avais déjà rencontré !

 
Par Cyrano  -  Le 31/01/2023 17:54  -  Haut de page  - 

Il faudrait que je voie le code des différents éléments, mais dans ce qui s'affiche pour l'instant, il y a une erreur et du code html qui ne devrait pas être là

 
Par Cyrano  -  Le 31/01/2023 18:11  -  Haut de page  - 

En résumé : le code en sortie, donc ce qui arrive au navigateur, devrait ressembler à ceci :

<!DOCTYPE html>
<html lang="fr">
  <head>
    <meta charset="UTF-8">
    <title>QI98 | Non de la page</title>
    <link rel="stylesheet" href="style/style.css" />
    <link rel="stylesheet" href="style/entete_inc.css" />
    <link rel="stylesheet" href="style/pied_inc.css" />
  </head>
  <body>
    <header>
      <div>
        <div>
          <h2>Logo et/ou Bannière</h2>
        </div>
      </div>
    </header>
    <nav>
      <div class="menu">
        <a href="?page=accueil">Accueil</a>
        </li>&nbsp|&nbsp;<a href="?page=apropos">A propos</a>
        </li>&nbsp|&nbsp;<a href="?page=faq">FAQ</a>
        </li>&nbsp|&nbsp;<a href="?page=grand-test">Grand Test</a>
        </li>&nbsp|&nbsp;<a href="?page=test-qi">Test de QI</a>
        </li>&nbsp|&nbsp;<a href="?page=sitemap">Sitemap</a>
        </li>&nbsp|&nbsp;<a href="?page=contact">Contact</a>
        </li>&nbsp|&nbsp;
      </div>
    </nav>
    <div id="conteneur">
      Conteneur
      <div>&nbsp;</div>
      <div>&nbsp;</div>
      <h4>Page affichée : pages/par_defaut.html</h4>
      <div>
        <h2>defaut.html</h2>
      </div>
      <section>
        <h4>Section</h4>
      </section>
      <article>
        <h4>Article</h4>
      </article>
      <aside>
        <h4>Aside</h4>
      </aside>
      <div>&nbsp;</div>
    </div>
    <footer>
      <div>&nbsp;</div>
      <table id="pied">
        <tr>
          <th>Sites utiles</th>
          <th>Contact</th>
          <th>Informations</th>
        </tr>
        <tr>
          <td><a href="#">Lien</a></td>
          <td><a href="#">Lien</a></td>
          <td><a href="#">Lien</a></td>
        </tr>
        <tr>
          <td><a href="#">Lien</a></td>
          <td><a href="#">Lien</a></td>
          <td><a href="#">Lien</a></td>
        </tr>
        <tr>
          <td><a href="#">Lien</a></td>
          <td><a href="#">Lien</a></td>
          <td><a href="#">Lien</a></td>
        </tr>
        <tr>
          <td><a href="#">Lien</a></td>
          <td><a href="#">Lien</a></td>
          <td><a href="#">Lien</a></td>
        </tr>
        <tr>
          <td><a href="#">Lien</a></td>
          <td><a href="#">Lien</a></td>
          <td><a href="#">Lien</a></td>
        </tr>
        <tr>
          <td><a href="#">Lien</a></td>
          <td><a href="#">Lien</a></td>
          <td><a href="#">Lien</a></td>
        </tr>
      </table>
      <div>&nbsp;</div>
      <div class=centre>Copyright &copy; 2023 - Tous Droits Révervés.</div>
    </footer>
  </body>
</html>

Partant de là, dans le fichier head.php, on devrait trouver ceci :

<!DOCTYPE html>
<html lang="fr">
  <head>
    <meta charset="UTF-8">
    <title>QI98 | Non de la page</title>
    <link rel="stylesheet" href="style/style.css" />
    <link rel="stylesheet" href="style/entete_inc.css" />
    <link rel="stylesheet" href="style/pied_inc.css" />
  </head>
  <body>
    <header>
      <div>
        <div>
          <h2>Logo et/ou Bannière</h2>
        </div>
      </div>
    </header>

Ensuite le fichier nav.php avec ceci :

    <nav>
      <div class="menu">
        <a href="?page=accueil">Accueil</a>
        </li>&nbsp|&nbsp;<a href="?page=apropos">A propos</a>
        </li>&nbsp|&nbsp;<a href="?page=faq">FAQ</a>
        </li>&nbsp|&nbsp;<a href="?page=grand-test">Grand Test</a>
        </li>&nbsp|&nbsp;<a href="?page=test-qi">Test de QI</a>
        </li>&nbsp|&nbsp;<a href="?page=sitemap">Sitemap</a>
        </li>&nbsp|&nbsp;<a href="?page=contact">Contact</a>
        </li>&nbsp|&nbsp;
      </div>
    </nav>

Puis le contenu de la page :

    <div id="conteneur">
      Conteneur
      <div>&nbsp;</div>
      <div>&nbsp;</div>
      <h4>Page affichée : pages/par_defaut.html</h4>
      <div>
        <h2>defaut.html</h2>
      </div>
      <section>
        <h4>Section</h4>
      </section>
      <article>
        <h4>Article</h4>
      </article>
      <aside>
        <h4>Aside</h4>
      </aside>
      <div>&nbsp;</div>
    </div>

Et enfin le footer.php :

    <footer>
      <div>&nbsp;</div>
      <table id="pied">
        <tr>
          <th>Sites utiles</th>
          <th>Contact</th>
          <th>Informations</th>
        </tr>
        <tr>
          <td><a href="#">Lien</a></td>
          <td><a href="#">Lien</a></td>
          <td><a href="#">Lien</a></td>
        </tr>
        <tr>
          <td><a href="#">Lien</a></td>
          <td><a href="#">Lien</a></td>
          <td><a href="#">Lien</a></td>
        </tr>
        <tr>
          <td><a href="#">Lien</a></td>
          <td><a href="#">Lien</a></td>
          <td><a href="#">Lien</a></td>
        </tr>
        <tr>
          <td><a href="#">Lien</a></td>
          <td><a href="#">Lien</a></td>
          <td><a href="#">Lien</a></td>
        </tr>
        <tr>
          <td><a href="#">Lien</a></td>
          <td><a href="#">Lien</a></td>
          <td><a href="#">Lien</a></td>
        </tr>
        <tr>
          <td><a href="#">Lien</a></td>
          <td><a href="#">Lien</a></td>
          <td><a href="#">Lien</a></td>
        </tr>
      </table>
      <div>&nbsp;</div>
      <div class=centre>Copyright &copy; 2023 - Tous Droits Révervés.</div>
    </footer>
  </body>
</html>

Et dans le fichier index.php, on devrait trouver des « include » dans cet ordre là.

 
Par jlb59  -  Le 31/01/2023 19:16  -  Haut de page  - 

Supers conseils, j'ai regardé la source et j'ai vu qu'il y avait un autre doctype.

J'ai modifié et remis en ligne, cette fois, je ne vois qu'un seul doctype.

Un grand merci.

 
Par Cyrano  -  Le 31/01/2023 19:23  -  Haut de page  - 

Pour s'y repérer facilement, il est aussi utile de bien indenter le code selon le niveau d'imbrication des différentes balises. On retrouve ainsi beaucoup plus rapidement une erreur.

 
Par jlb59  -  Le 01/02/2023 16:06  -  Haut de page  - 

Bonjour cyrano,

Désolé, mais j'ai pas tout compris !

Qu'entends-tu par l'utilité d'indenter le code et niveau d'imbrication des balises ?
Quelles balises ?

 
Par Cyrano  -  Le 01/02/2023 16:19  -  Haut de page  - 

Je parle des balises HTML.
Quant à l'indentation, c'est le retrait qu'on met selon le niveau d'imbrication.

Exemple :

<html>
  <head>
    <title>Titre de la page qui apparaîtra dans l'onglet du navigateur</title>
  <head>
  <body>
    <div>
      <p>Un paragraphe quelconque.</p>
    </div>
    <div>
      <form id="unformulaire" action="#" mathod="post">
        <!-- et ainsi de suite...-->
      </form>
    </div>
  </body>
</html>

On voit ici une indentation de deux espaces, ainsi, la balise « head » est en retrait de deux espaces par rapport à la balise « html »

 
Par jlb59  -  Le 01/02/2023 17:01  -  Haut de page  - 

OK, j'ai bien compris et je vais faire le nécessaire de suite.
Merci de tes explications et de tes conseils.

 
Par jlb59  -  Le 01/02/2023 17:33  -  Haut de page  - 

C'est tout bon maintenant.

Heureusement qu'il n'y a que peu de fichiers !

Je ferai attention à l'avenir.

Et si je mettais un lien vers ton site, et l'autre (C2Script), je trouve que ce serait bien, et même très bien, à ton avis ?

 
Par jlb59  -  Le 02/02/2023 16:29  -  Haut de page  - 

Bonjour cyrano,

J'ai fait au mieux pour les pages.
Le seul problème est au niveau de la variable "$title".

En effet, ça n'engendre pas d'erreur sur la page mais directement dans l'onglet.
"undefined variable $title in etc."

J'ai mis ça dans "entete_inc.php" écrit en html :

<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title><?php echo $titre; ?></title>
<!-- <title><?= $title ?></title> -->

...

Pourquoi j'ai cette erreur, parce qu'apparemment, c'est bien écrit ?

Merci de ton aide.

 
Par Cyrano  -  Le 02/02/2023 18:29  -  Haut de page  - 

Deux possibilités :
-1- Les short open tag n'est pas activé dans le php.ini (<?=)
-2- La variable n'est pas définie avant l'inclusion du fichier.

Pour le premier point, il vaut mieux éviter les short open tag. C'est une petite facilité, mais tous les serveurs des hébergeurs ne l'acceptent pas, donc il faut l'éviter et privilégier le « <?php echo(... »

Dans le second cas : le code est exécuté au fur et à mesure dans lordre où il est écrit et présenté à l'interpréteur PHP. La variable $title n'est de toute évidence pas définie au bon endroit. Il faut la définir avant l'inclusion du fichier qui l'utilise.

 
Par jlb59  -  Le 02/02/2023 18:41  -  Haut de page  - 

C'est noté pour le 1er, mais je ne m'y aventurerais pas !

Pour le 2e, j'ai du mal à suivre, parce que j'ai déclaré dans entete_inc.php, ça n'allait pas.
Dont, je l'ai mis dans l'index.php, juste avant l'include de entete_inc.php, ça n'allait pas non plus !

Je commence à désespérer là !

 
Par Cyrano  -  Le 02/02/2023 18:46  -  Haut de page  - 

Il faudrait me montrer le code des deux fichiers, ça m'éclairera beaucoup plus

 
Par jlb59  -  Le 02/02/2023 18:53  -  Haut de page  - 

Je voudrais bien le faire mais, à part Markdown, je n'en vois pas la possibilité !

 
Par Cyrano  -  Le 02/02/2023 18:57  -  Haut de page  - 

Pour avoir une mise en forme du code, il faut encadrer les blocs de code :
- en ouverture avec trois fois ` (accent grave seul) suivi tu langage, donc par exemple ```php
- en fermeture, ce même triple accent grave et rien d'autre.

Et coller tel quel le code brut entre les deux bien sûr

 
Par Cyrano  -  Le 02/02/2023 19:13  -  Haut de page  - 

Sinon, collez-le code tel quel, je remettrai le post en forme après.

 
Par jlb59  -  Le 02/02/2023 19:18  -  Haut de page  - 

D'accord.

Seulement, lorsque je fais "Alt Gr" + la touche "7", il y a 2 accent à la fois, dont si j'appuie 2x, j'en aurai 4.

Comme tu m'as dit qu'il fallait "3" accents graves, j'en ai enlever un.

J'ai fait ça et j'ai mis le code, ça n'a rien fait du tout !

index.php

<?php
if (isset($_GET['page'])) {
    switch ($_GET['page']) {
        case "accueil" :
            $nom_page="Accueil";
            $url_page="pages/accueil/accueil.php";
            break;

        case "apropos" :
            $nom_page="A propos";
            $url_page="pages/apropos/apropos.php";
            break;

        case "grand-test" :
            $nom_page="Grand test";
            $url_page="pages/grand-test/grand-test.php";
            break;

        case "test-qi" :
            $nom_page="Test de QI";
            $url_page="pages/test-qi/test-qi.php";
            break;

        case "faq" :
            $nom_page="FAQ";
            $url_page="pages/faq/faq.php";
            break;

        case "sitemap" :
            $nom_page="Sitemap";
            $url_page="pages/sitemap/sitemap.php";
            break;

        case "contact" :
            $nom_page="contact";
            $url_page="pages/contact/contact.php";
            break;

        // --------------- Page si case pas connu    
        default :
        $nom_page="Aucune page sélectionnée";
        $url_page="pages/par_defaut.php";
    }
}
else {
    $nom_page="Aucune page sélectionnée";
    $url_page="pages/par_defaut.php";
}
if (!file_exists($url_page)) { $url_page="pages/erreur-404.html"; } // la page 404
?>

<!-- debut de la page index -->
    <header class="header">
     <title><?= $title ?></title>
            <?php include("entete_inc.php"); ?> 
    </header>

    <nav>
        <?php include("menu_inc.php"); ?>
    </nav>

        <div id="conteneur">

                <?php include ($url_page); ?>

            <section class="space-pub"> 
                <h4>Section</h4> 
                <?php include("pages/section_index.php" ) ?>
            </section>    

            <article> 
                    <h4>Article</h4> 
            </article>

            <aside> 
                <h4>Aside</h4> 
            </aside>

            <div>&nbsp;</div>
        </div>

    <footer>
        <?php include("pied_inc.php"); ?> 
    </footer>


entete_inc.php

<!DOCTYPE html>
<html lang="fr">
    <head>
        <meta charset="UTF-8">
<!--        <title></title>-->
 <title><?= $title ?></title> 
        <link rel="stylesheet" href="style/style.css">
        <link rel="stylesheet" href="style/entete_inc.css">    
        <link rel="stylesheet" href="style/pied_inc.css">
</head>
<body>
<div class="centre"><img src="images/banniere/logo_181x161.gif" alt="Page d\'accueil" width="181" height="161">
<img src="images/banniere/banniere_940x156.jpg" alt="" width="" height="">
<img src="images/banniere/logo_181x161.gif" alt="Page d\'accueil" width="181" height="161"></div>

pied_inc.php

    <div>&nbsp;</div>
    <table id="pied">
      <tr>
        <th>Sites utiles</th>
        <th>Contact</th>
      </tr>
      <tr>
        <td><a href="#">Lien</a></td>
        <td><a href="#">Lien</a></td>
        <td><a href="#">Lien</a></td>
      </tr>
      <tr>
        <td><a href="#">Lien</a></td>
        <td><a href="#">Lien</a></td>
        <td><a href="#">Lien</a></td>
      </tr>
    </table>
    <div>&nbsp;</div>

    <div class=centre>Copyright &copy; 2023 - Tous Droits Révervés.</div>

</body>
</html>

J'espère que ça va marché !

 
Par Cyrano  -  Le 02/02/2023 19:47  -  Haut de page  - 

Ok, tout ça manque un peu de simplicité.

La première chose, c'est que dans le fichier index, on ne devrait pas avoir de HTML du tout.

Je vais tâcher de proposer une solution plus claire.

D'abord, on a les fichiers qui constituent les différentes parties de la page HTML. Donc on s'occupe d'abord de ces éléments-là. Et dans l'en-tête, on a une variable qui doit être définie, la variable $title. Celle-ci a une valeur qui va dépendre de la page affichée : donc, il serait logique de la définir dans le switch du fichier index.php.

En-tête :

<!DOCTYPE html>
<html lang="fr">
  <head>
    <meta charset="UTF-8">
    <title><?php echo($title); ?></title> 
    <link rel="stylesheet" href="style/style.css">
    <link rel="stylesheet" href="style/entete_inc.css">    
    <link rel="stylesheet" href="style/pied_inc.css">
  </head>
  <body>
    <div class="centre"><img src="images/banniere/logo_181x161.gif" alt="Page d\'accueil" width="181" height="161">
    <img src="images/banniere/banniere_940x156.jpg" alt="" width="" height="">
    <img src="images/banniere/logo_181x161.gif" alt="Page d\'accueil" width="181" height="161"></div>
    <header class="header">
    <!-- Ici, il manque éventuellement le contenu de l,en-tête de la page, peut-être le menu de navigation ? -->
      <nav>
<?php
include("menu_inc.php");
?>
      </nav>
    </header>

Bolc de navigation et Contenu principal

ici, il faudra éventuellement ajouter le fichier approprié défini toujours dans le switch

Pied

    <footer>
      <div>&nbsp;</div>
      <table id="pied">
        <tr>
          <th>Sites utiles</th>
          <th>Contact</th>
          <th>&nbsp;</th> <!-- Attention, il manquait une balise th, il y a trois colonnes dans les lignes, il en faut trois dans l'en-tête du tableau -->
        </tr>
        <tr>
          <td><a href="#">Lien</a></td>
          <td><a href="#">Lien</a></td>
          <td><a href="#">Lien</a></td>
        </tr>
        <tr>
          <td><a href="#">Lien</a></td>
          <td><a href="#">Lien</a></td>
          <td><a href="#">Lien</a></td>
        </tr>
      </table>
      <div>&nbsp;</div>
      <div class=centre>Copyright &copy; 2023 - Tous Droits Révervés.</div>
    </footer>
  </body>
</html>

INDEX : on assemble les morceaux

<?php
if (isset($_GET['page'])) {
    switch ($_GET['page']) {
        case "accueil" :
            $nom_page="Accueil";
            $title = "Accueil";
            $url_page="pages/accueil/accueil.php";
            break;

        case "apropos" :
            $nom_page="A propos";
            $title = "Accueil";
            $url_page="pages/apropos/apropos.php";
            break;

        case "grand-test" :
            $nom_page="Grand test";
            $title = "Accueil";
            $url_page="pages/grand-test/grand-test.php";
            break;

        case "test-qi" :
            $nom_page="Test de QI";
            $title = "Accueil";
            $url_page="pages/test-qi/test-qi.php";
            break;

        case "faq" :
            $nom_page="FAQ";
            $title = "Accueil";
            $url_page="pages/faq/faq.php";
            break;

        case "sitemap" :
            $nom_page="Sitemap";
            $title = "Accueil";
            $url_page="pages/sitemap/sitemap.php";
            break;

        case "contact" :
            $nom_page="contact";
            $title = "Accueil";
            $url_page="pages/contact/contact.php";
            break;

        // --------------- Page si case pas connu    
        default :
        $nom_page="Aucune page sélectionnée";
        $title = "Page introuvable";
        $url_page="pages/par_defaut.php";
    }
}
else {
    $nom_page="Aucune page sélectionnée";
    $title = "Page introuvable";
    $url_page="pages/par_defaut.php";
}
if (!file_exists($url_page))
{
    $url_page="pages/erreur-404.html";  // la page 404
}
?>

<!-- debut de la page index -->
include entete_inc.php;


<div id="conteneur">

<?php include ($url_page); ?>

<section class="space-pub"> 
<h4>Section</h4> 
<?php include("pages/section_index.php" ) ?>
</section>    

<article> 
<h4>Article</h4> 
</article>

<aside> 
<h4>Aside</h4> 
</aside>

<div>&nbsp;</div>
</div>
<?php
include("pied_inc.php");
?>

Et là, on devrait avoir un résultat qui marche si je n'ai rien oublié

 
Par jlb59  -  Le 03/02/2023 07:02  -  Haut de page  - 

Ca y est, j'ai trouvé comment il fallait faire.

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 ?
(vois un exemple :
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"

 
Par Cyrano  -  Le 03/02/2023 08:37  -  Haut de page  - 

Regardez dans mes correctifs dans index.php, dans le switch, j'ai rajouté la définition de la variable $title

 
Par jlb59  -  Le 03/02/2023 13:41  -  Haut de page  - 

Exact, j'ai zappé ! Désolé !

Après avoir relu ligne/ligne, j'ai vu toutes vos modifs et les ai appliquées.

<div id="conteneur">

<?php include ($url_page); ?>

<section class="space-pub"> 
<h4>Section</h4> 
<?php include("pages/section_index.php" ) ?>
</section>    

<article> 
<h4>Article</h4> 
</article>

Au passage, la bonne syntaxe dans l'index pour afficher le nom des page dans l'onglet (vous aviez oublié le "=" après $title), c'est :

if (!file_exists($url_page)) { $url_page="pages/erreur-404.php"; } // la page 404
?>

<!-- debut de la page index -->
    <header class="header">

<!--     < ?php $title = "QI98 - $nom_page"; ?> -->
<title><?= $title = "qi98 - $nom_page"; ?></title>
            <?php include("entete_inc.php"); ?> 
    </header>

    <nav>
        <?php include("menu_inc.php"); ?>
    </nav>

 
Par Cyrano  -  Le 03/02/2023 13:53  -  Haut de page  - 

Non, je n'ai pas oublié : la variable $title est définie dans le switch, il est donc inutile de la redéfinir dans le fichier d'en-être et en réalité, c'est même une mauvaise idée puisque, si on utilise le même en-tête pour toutes les pages, ça voudrait dire qu'il faudrait créer autant de fichiers d'en-tête qu'il y a de page.

Et bien entendu, l'inclusion de l'en-tête doit être faite après le switch.

 
Par jlb59  -  Le 03/02/2023 14:45  -  Haut de page  - 

C'est compliqué mais je crois avoir compris.

Donc, d'après ce que tu me dit, c'est pas la peine de remettre la variable dans le header ?
Il me semble l'avoir déjà fait, mais sans certitude !
En plus, je n'avais pas déclaré $title au tout début dans l'index.

Je vais me pencher sur la question et faire les modifs, on verra bien !

Vous savez, à force de faire toutes ces modifs, je m'y perds un peu, beaucoup même, et il faut dire que sur chaque forum, il y a toujours une version différente, alors, pour trouver la bonne, c'est pas évident !

 
Par Cyrano  -  Le 03/02/2023 15:08  -  Haut de page  - 

Il faut essayer de simplifier toujours au maximum.

Là, on construit dynamiquement une page. C'est pour ça que je suggérais précédemment de commencer par construire une maquette HTML d'une page complète. De cette maquette, une fois qu'elle est validée bien sûr, on va extraire les différentes parties qui seront alors incluses dans les différents fichiers à inclure. La page index.php va servir à réassembler ces différentes parties, mais en modifiant dynamiquement certains éléments contenus dans ces morceaux.

Habituellement, on construit des maquettes en les remplissant avec des textes bidons juste pour avoir un rendu visuel cohérent par rapport à ce que devra être l'affichage définitif. Le plus souvent, on utilise ce qu'on appelle du Lorem Ipsum, sorte de texte en latin de cuisine qui sert à meubler un contenu.

QUand la maquette est découpée, on remplace alors dans les différents fichiers d'inclusions ce contenu bidon par des variables. Il est bien évident qu'à ce stade, la valeur de ces variable n'est pas définie.

C'est alors dans le fichier index que le gros du travail va se faire : on va d'abord déterminer quelle page est demandée. La structure reste la même, mais le contenu va varier selon que c'est la page d'accueil, la page de contact ou une autre page. Ça, c'est le rôle du Switch qui détermine quelle page est attendue. Dès qu'elle est identifiée, on initialise alors les variables avec les valeurs correspondant à la page considérée.

Et une fois que tout ça est fait, alors seulement on fait les inclusions de fichiers.

Est-ce que c'est plus clair de cette manière ?

 
Par jlb59  -  Le 03/02/2023 15:20  -  Haut de page  - 

Logiquement, d'après ce que vous dites, le seul fait d'avoir déclaré la viable dans l'index est suffisant !*?

        case "contact" :
            $nom_page="contact";
            $url_page="pages/contact/contact.php";
            break;

        // --------------- Page si case pas connu    
        default :
        $title = "Page inexistante";
        $nom_page="Aucune page sélectionnée";
        $url_page="pages/par_defaut.php";
    }

J'ai déclaré la variale dans chaque page.

<?php
$title = "Page accueil";
?>

J'espère que c'est la bonne syntaxe !
Normalement, ça devrait suffire, et bien non !
Si j'enlève dans l'index

<!-- **************************************************** -->
<!-- debut de la page index -->
<!-- **************************************************** -->
    <header class="header">
<!--     <title>< ?php $title = "QI98 - $nom_page"; ?></title> -->
<!--            <title><?= $title = "qi98 - $nom_page"; ?></title> -->
            <?php include("entete_inc.php"); ?> 
    </header>

    <nav>

Aucun nom ne s'affiche dans l'onglet !

 
Par Cyrano  -  Le 03/02/2023 15:39  -  Haut de page  - 

En programmation, il faut toujours de la logique, de la logique et beaucoup de logique.

Le code est lu et interprété dans l'ordre où il est envoyé à l'interpréteur. Si j'inclus dans mon index.php successivement les fichiers A, B et C, le code de l'index sera exécuté en premier, puis le code de A au moment de son inclusion, puis celui de B et enfin celui de C.

Le code des fichiers inclus devient une partie du code de l'index. Donc si avant les inclusions dans l'index on initialise une variable, elle sera vue par les fichiers A, B et C.
Il est donc parfaitement inutile de les réinitialiser dans ces fichiers inclus.

Attention à la syntaxe dans la rédaction du code

Au lieu de faire ceci :

<!-- **************************************************** -->
<!-- debut de la page index -->
<!-- **************************************************** -->
    <header class="header">
<!--     <title>< ?php $title = "QI98 - $nom_page"; ?></title> -->
<!--            <title><?= $title = "qi98 - $nom_page"; ?></title> -->
            <?php include("entete_inc.php"); ?> 
    </header>

    <nav>

Faites ceci :

<!-- **************************************************** -->
<!-- fichier en-tête -->
<!-- **************************************************** -->
    <header class="header">
    <title><?php echo($title); ?></title>
    </header>
    <nav>

Puis, dans l'index :


<!-- **************************************************** --> <!-- debut de la page index --> <!-- **************************************************** --> <?php $page = (isset($_GET['page']) ? $_GET['page'] : 'p404'; switch($page) { case 'accueil': $title = "QI98 - ". $page; break; // ... case 'p404': default : $title = "Page introuvable"; } include("entete_inc.php");

La variable $title étant définie dans le switch de l'index, on ne la redéfinit pas dans le fichier inclus.

J'ai raccourci au maximum bien sûr pour simplifier la lecture :
Quand ce code est exécuté, on détermine la page en assignant une valeur par défaut à une variable $page, par exemple comme ici.
Ensuite, chaque « case » va comparer la valeur ainsi définie avec un des choix possibles jusqu'à ce qu'une correspondance soit trouvée, sinon, ce sera alors le « default » qui sera utilisé.

Est-ce que vous comprenez mieux ? Sinon, je vais vous proposer quelque chose de plus simple encore pour commencer et on avancera pas-à-pas,

 
Par jlb59  -  Le 03/02/2023 16:27  -  Haut de page  - 

J'ai copier/coller votre code sous "case" et voilà ce qui est renvoyé.

<?php
if (isset($_GET['page'])) {
    switch ($_GET['page']) {
        case "accueil" :
/*            $nom_page="Accueil";*/
        $title = "QI98 - ". $page;
            $url_page="pages/accueil/accueil.php";
            break;

Warning: Undefined variable $page in C:\laragon\www\sementic-element-html-vide\index.php on line 6

Pour que le nom s'affiche dans l'onglet, j'ai fait ce qu'on m'a dit

<!-- debut de la page index -->
    <header class="header">
    <title><?php echo($title); ?></title>
<!--     < ?php $title = "QI98 - $nom_page"; ?> -->
            <?php include("entete_inc.php"); ?> 
    </header>

On m'a dit que pour que ça marche, il fallait mettre "<title>...." juste avant l'include !

Je patauge dans la semoule, et complètement !

 
Par Cyrano  -  Le 03/02/2023 16:34  -  Haut de page  - 

MOntrez-moi le code complet de l'index parce que là, ce n'est pas normal

 
Par Cyrano  -  Le 03/02/2023 16:36  -  Haut de page  - 

Autre détail : je ne vous encourage pas à faire du copier-coller mais à comprendre comment ça marche, et je ne sais pas ce qu'il en est : est-ce que mes dernières explications sont claires ou pas encore assez ? Et le cas échéant, où est-ce que ça coince ?

 
Par jlb59  -  Le 03/02/2023 16:55  -  Haut de page  - 

C'est évident que j'ai du mal à comprendre parce qu'à chaque fois, on me donne des choses différentes pour un même résultat attendu, alors comment voulez-vous que je m'en sorte !

 
Par Cyrano  -  Le 03/02/2023 16:59  -  Haut de page  - 

Ok, alors je vais simplifier encore.

Donnez-moi quelques minutes, je vais vous préparer un peu de code pour expliquer, un code que vous pourrez tester.

Je reviens.

 
Par jlb59  -  Le 03/02/2023 17:02  -  Haut de page  - 

Où ça coince, plus j'ai des explications à mettre en pratique et plus j'ai des erreurs !

Donc, en fait, ça coince partout.

D'une part, on m'avait préconisé de déclarer la variable "$title", mais où ?
Alors, le meilleur moyen de déclarer serait de le faire à la source comme vous me l'avez montré dans le "switch", mais comme ça ne va pas, je ne sais plus où il faut allé !

 
Par jlb59  -  Le 03/02/2023 17:11  -  Haut de page  - 

Vous m'avez préconisé de faire ça :

<?php
if (isset($_GET['page'])) {
    switch ($_GET['page']) {
        case "accueil" :
/*            $nom_page="Accueil";*/
        $title = "QI98 - ". $page;
            $url_page="pages/accueil/accueil.php";
            break;

Est-ce que par hasard, ça ne serait pas mieux en mettant "$nom_page" au lieu de "$page" ?
De cette manière, chaque page se verra attribuer la variable "$title" à chaque appel des pages !

 
Par jlb59  -  Le 03/02/2023 17:25  -  Haut de page  - 

Pourquoi, en faisant ça, ça fonctionne.. et dans erreur :

<!-- debut de la page index -->
    <header class="header">
<!--    <title><?php echo($title); ?></title> -->
        <?php $title = "QI98 - $nom_page"; ?>
            <?php include("entete_inc.php"); ?> 
    </header>

Normalement, ça devrait être à peu près pareil !
Je n'ai pas essayé, mais est-ce que la balise "<title></title>" est vraiment nécessaire ?

Peut-être qu'elle devrait se trouver ailleurs ????

 
Par Cyrano  -  Le 03/02/2023 17:37  -  Haut de page  - 

Bien, alors nous allons y aller dans l'ordre.

La maquette

Maquette de la page avec du contenu bidon pour valider la mise en page et le rendu visuel

<!DOCTYPE html>
<html lang="fr">
  <head>
    <meta charset="UTF-8">
    <title>QI98 | Non de la page</title>
    <link rel="stylesheet" href="style/style.css" />
    <link rel="stylesheet" href="style/entete_inc.css" />
    <link rel="stylesheet" href="style/pied_inc.css" />
  </head>
  <body>
    <header>
      <div>
        <div>
          <h2>Logo et/ou Bannière</h2>
        </div>
      </div>
    </header>
    <nav>
      <div class="menu">
        <ul>
          <li><a href="?page=accueil">Accueil</a></li>
          <li><a href="?page=apropos">A propos</a></li>
          <li><a href="?page=contact">Contact</a></li>
        </ul>
      </div>
    </nav>
    <div id="conteneur">
      <h1>Titre de la page</h1>
      <h4>Page affichée : pages/par_defaut.html</h4>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla mollis metus nisi, vel fringilla metus molestie vel. Mauris sit amet diam ut ex convallis pulvinar. Vestibulum eleifend sapien nisl. Fusce eleifend maximus ligula, a euismod ligula posuere eu. Etiam sit amet metus odio. Aenean ultrices ex eu porta cursus. Nam tincidunt turpis eu nunc imperdiet hendrerit. Quisque luctus tincidunt neque commodo vestibulum. Maecenas malesuada justo vitae hendrerit lobortis. Pellentesque maximus tortor quis arcu tristique, vel luctus felis commodo.</p>
      div>
    <footer>
      <div class=centre>Copyright &copy; 2023 - Tous Droits Révervés.</div>
    </footer>
  </body>
</html>

Là, nous pouvons déjà valider ce code éventuellement avec le W3C. On va ensuite procéder à la construction dynamique en quatre parties distinctes : l'en-tête, le menu de navigation, le contenu principal et le pied de page.

L'en-tête

<?php
/**
 * Fichier entete_inc.php
 */
?>
<!DOCTYPE html>
<html lang="fr">
  <head>
    <meta charset="UTF-8">
    <title><?php echo($title); ?></title>
    <link rel="stylesheet" href="./style/style.css" />
    <link rel="stylesheet" href="./style/entete_inc.css" />
    <link rel="stylesheet" href="./style/pied_inc.css" />
  </head>
  <body>
    <header>
      <div>
        <div>
          <img src="<?php echo($logo); ?>" width="100%" height="40px" alt=""/>
        </div>
      </div>
    </header>

Le menu de navigation

<?php
/**
 * Fichier menu_inc.php
 */
?>
    <nav>
      <div class="menu">
        <ul>
          <li><a href="?page=accueil">Accueil</a></li>
          <li><a href="?page=apropos">A propos</a></li>
          <li><a href="?page=contact">Contact</a></li>
        </ul>
      </div>
    </nav>

Le contenu principal

<?php
/**
 * Fichier contenu_inc.php
 */
?>
    <div id="conteneur">
      <h1><?php echo($titrePage); ?></h1>
      <h4>Page affichée : pages/<?php echo($page); ?>.html</h4>
      <p><?php echo($contenupage); ?></p>
    </div>

Le pied de page

<?php
/**
 * Fichier footer_inc.php
 */
?>
    <footer>
      <div class=centre>Copyright &copy; 2023 - Tous Droits Révervés.</div>
    </footer>
  </body>
</html>

Nos éléments sont prêts.

En les lisant un par un, on relève les variables qui doivent être initialisées.

Et on crée le fichier index.php qui est notre porte d'entrée.

<?php
/**
 * Fichier index.php
 */
/* On détermine quelle page est appelée */
$page = (isset($_GET['page'])) ? $_GET['page'] : 'accueil';
/* Pour les beoins de l'execice, on crée du contenu */
$aContenu = array(
    'accueil' => "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla mollis metus nisi, vel fringilla metus molestie vel. Mauris sit amet diam ut ex convallis pulvinar. Vestibulum eleifend sapien nisl. Fusce eleifend maximus ligula, a euismod ligula posuere eu. Etiam sit amet metus odio. Aenean ultrices ex eu porta cursus. Nam tincidunt turpis eu nunc imperdiet hendrerit. Quisque luctus tincidunt neque commodo vestibulum. Maecenas malesuada justo vitae hendrerit lobortis. Pellentesque maximus tortor quis arcu tristique, vel luctus felis commodo.",
    'apropos' => "Sed pulvinar enim vel dolor mollis consequat. Morbi ut justo volutpat, dapibus libero ut, vehicula ex. Maecenas metus ligula, congue in nulla vel, tempus fermentum leo. Vivamus volutpat, lectus id dapibus laoreet, orci purus ultrices neque, semper mollis erat tortor imperdiet turpis. Donec neque ipsum, rhoncus at risus nec, scelerisque dapibus ipsum. Donec pellentesque lorem turpis. Nam vulputate hendrerit ante, nec pretium est luctus id. Pellentesque vulputate tellus vel ex ultrices, a tempor erat pharetra. Maecenas ut libero non massa aliquet commodo vel ut nibh. Morbi tempus ac ligula at pretium. Vestibulum lacinia, ipsum id rutrum venenatis, magna tortor pellentesque justo, id vulputate odio dolor at mauris. Donec at lacus non metus mattis fermentum a et mauris. Nulla turpis metus, ullamcorper in leo quis, facilisis faucibus elit. Morbi interdum est enim, at ornare odio semper in. Aenean maximus nisl eu hendrerit venenatis. Maecenas sagittis ac urna sit amet accumsan.",
    'contact' => "Duis volutpat dolor metus, sit amet condimentum ligula viverra rhoncus. Duis feugiat urna eget mollis aliquet. Etiam quis fermentum erat, ac pellentesque lectus. Aliquam erat volutpat. Nulla facilisi. Morbi eget elementum lacus. Donec consectetur nisi est, vel luctus massa ornare ac. Nam varius justo suscipit, vehicula ex ac, aliquet nulla. Ut eget posuere nibh. Duis tempus, nisl in scelerisque accumsan, odio nisl pharetra magna, placerat mollis mi dolor vel felis. Vivamus dolor leo, mollis eu massa vel, egestas finibus nulla. Vivamus imperdiet pretium egestas. Aenean bibendum semper lorem vel viverra. Morbi vel vestibulum quam. Vivamus semper purus non auctor placerat.",
    'p404'    => "Page introuvable, utilisez le menu de navigation pour trouver la bonne page."
);
/* On peut initialiser ici le logo qui sera le même pour toutes les pages */
$logo = "./images/monlogo.jpeg";
/* On initialise les variables nécessaires dans les fichiers qui seront inclus */
switch ($page)
{
    case 'accueil':
        $title = "Accueil";
        $titrePage = "Bienvenue chez nous";
        break;
    case 'apropos':
        $title = "À propos";
        $titrePage = "À propos de nous";
        break;
    case 'contact':
        $title = "Contact";
        $titrePage = "Contactez-vous";
        break;
    default:
        $page = 'p404';
        $title = "Page introuvable";
        $titrePage = "Page introuvable";
}
$contenupage = $aContenu[$page];

/**
 * À présent, toutes nos variables sont prêtes, on va pouvoir procéder à la 
 * construction du code html complet de la page
 */
/* D'abord l'entete */
include('entete_inc.php');
/* On continue avec le menu de navigation */
include('menu_inc.php');
/* A présent le contenu principal */
include('contenu_inc.php');
/* Enfin le pied de page */
include('footer_inc.php');
?>

Attention aux commentaires, tous sont importants.

Créez les fichiers tels quels et testez ça. Rapportez-moi toute anomalie s'il y a lieu, mais surtout suivez bien le code ligne par ligne pour en comprendre le fonctionnement et faites-moi un retour là-dessus.

 
Par jlb59  -  Le 03/02/2023 18:07  -  Haut de page  - 

Cyrano, je vous remercie vivement d'avoir pris de votre temps pour réaliser cette maquette.

Je vais copier le tout et vais en prendre de la graine.

Je me souviens que vous m'aviez dit au tout début et faire valider.
Ensuite, faire un découpage pour avoir le même résultat.

C'est ce que j'ai fait, mais j'ai dû faire une bourde au niveau du parcellement.
Il y avait certaines balises qui n'étaient pas au bon endroit.

Je vais étudier intensément votre maquette, mais à 1ère vue, c'est totalement différent de ce que j'ai essayé de faire, pas totalement parce que ça ne voudrait rien dire ici, mais différemment !

Je vois de suite la différence entre un pro et un débutant qui essaie de comprendre.

Votre code reprend :

    case 'apropos':
        $title = "À propos";
        $titrePage = "À propos de nous";
        break;

et celui que j'ai :

        case "apropos" :
            $nom_page="A propos";
            $url_page="pages/apropos/apropos.php";
            break;

A 1ère vue, il n'y a que le nom des variables qui change.

J'ai remarqué rapidement que l'organisation est différente de la mienne.

Demain, je vais me pencher sur votre code, et éventuellement l'essayer pour tenter de comprendre comme ça marche.

Je vous tiendrais informé des résultats.

Bonne soirée et merci encore de toute l'aide que vous m'avez apportée.

Jean-Luc

 
Par Cyrano  -  Le 03/02/2023 18:14  -  Haut de page  - 

Voyez ça comme de la cuisine : si vous voulez préparer des crêpes par exemple, vous aller devoir inclure de la farine, des oeufs et du lait.
Ce sont vos fichiers inclus.
La page index, c'est la jatte dans laquelle vous allez inclure chaque ingrédient pour construire ce qui doit être envoyé au client « poële », la pâte à crêpes.

Imaginez que vous deviez définir une variable « sucre vanillé » : vous le définirez dans la jatte uniquement, pas dans la jatte ET dans la farine, ça ferait doublon inutilement en plus de modifier le goût attendu.

La, C'est pareil, ordre et méthode, et logique élémentaire.

 
Par jlb59  -  Le 04/02/2023 06:49  -  Haut de page  - 

Bonjour Cyrano,

Vous m'avez montré un très bon exemple et je comprends mieux la méthode à adoptée, donc pour faire de très bonne crêpes !

Je me demandais aussi pourquoi vous aviez séparé plus encore le fichier html, je commence à comprendre maintenant !

J'ai, à tout hasard, utilisé W3 pour le html en local, et il n'y avait que les slashs en fin de ligne qui n'était pas utiles.

<link rel="stylesheet" href="style/style.css" />

A part ça, tout était au vert ! Chapeau l'artiste !

Je vois me souvenir lors de la version supérieure au Html basic, il était nécessaire de mettre cette barre oblique en fin de certaines commandes, maintenant, je crois que ce n'est plus nécessaire, enfin, je crois.

Par exemple, comme vous l'aviez fait, je mettais une barre oblique à la fin, tout comme pour les <br />.

Tout évolu, et si on laisse passer un certain temps, c'est dur de se remettre à la page, surtout pour un amateur comme moi !

 
Par jlb59  -  Le 04/02/2023 06:57  -  Haut de page  - 

Je suis en train d'étudier votre "recette", parfois j'ai du mal à suivre car c'est nouveau pour moi qui aurais fait ça plus simplement... et pas forcément la bonne méthode.

C'est pas évident pour un néophyte de s'y retrouver avec toutes ces variables.
Je signale au passage que cette marche à suivre est nouvelle pour moi, car je ne me souviens pas avoir travaillé un site avec des variables.

De plus, et ça on me l'avait pas dit, un fichier écrit en "html" et sauvegardé en "php" doit toujours avoir les symboles "<?php ?>" au début.
On m'avait simplement dit qu'un fichier écrit en html pouvait avoir l'extension '.php".

 
Par Cyrano  -  Le 04/02/2023 08:21  -  Haut de page  - 

Pour les les symboles <?php ?> au début, ce n'est en effet pas obligatoire, ça m'a juste permis de mettre un commentaire préalable qui tranche assez avec le reste.

Les variables, il n'y en a pas tant que ça, et chacune a son rôle et son importance.

Quant au découpage, oui, et constatez qu'il n'y a plus du tout de html dans le fichier index.
On sépare donc deux choses : d'un coté le traitement des données dans le fichier index, de l'autre la mise en forme dans les fichiers à inclure. L'intérêt, c'est que si vous voulez modifier la mise en forme de la page, il n'y a que ces derniers fichiers à modifier mais pas le fichier index.

Ce que vous pouvez faire, c'est aussi tester ça et une fois la page affichée, contrôler la source (Ctrl+U dans le navigateur) et comparer avec la maquette, ne serait-ce que pour vérifier que le résultat est conforme à la maquette, et si vous avez bien suivi l'exemple, il n'y a pas de raison pour que des différences majeures apparaissent.

Et pour le slash à la fin de certaines balises, c'est chez moi une vieille habitude datant de l'époque où je construisais mes pages en XHTML strict.

 
Par jlb59  -  Le 04/02/2023 08:41  -  Haut de page  - 

Cela fonctionne très bien.

Par contre, je ne vois pas la nécessité de mettre un logo sur chaque page.
De toute manière, j'ai du mal à percuter comment ça se ferait.

<p>Test de QI</p>
<?php include ($logo); ?>

C'est comme que ça se présenterait sur un page ?

Dans les déclarations de variables, j'ai simplement rajouté celles qui indique le chemin du fichier à consulter.

/* On peut initialiser ici le logo qui sera le même pour toutes les pages */
$logo = "./images/banniere/logo2.jpg";
/* On initialise les variables nécessaires dans les fichiers qui seront inclus */
switch ($page)
{
    case 'accueil':
        $title = "Accueil";
        $titrePage = "Bienvenue chez nous";
        $url_page="pages/accueil/accueil.php";
        break;
    case 'apropos':

<?php
/*
  contenu_inc.php
 */
?>
    <div id="conteneur">
      <?php include ($url_page); ?>
      <h1><?php echo($titrePage); ?></h1>
<!--      <h4>Page affichée : pages/< ?php echo($page); ?>.html</h4> -->
      <p><?php echo($contenupage); ?></p>

    </div>

 
Par Cyrano  -  Le 04/02/2023 08:53  -  Haut de page  - 

Toutes les variantes sont imaginables. Pour le logo, s'il s'agit du bandeau en haut de page, pour l'homogénéité visuelle du site dans son ensemble, il n'est pas incongru qu'on retrouve le logo sur toutes les pages.

Mais si on ne souhaite l'afficher que sur certaines pages, alors on peut régler ça dans le switch, par exemple on définit une variable $logo à « null » avant le switch, et dans le « case » de la page où on veut l'afficher, on affecte une autre valeur.
Enfin je dis ça à froid, mais si la valeur est le chemin vers une image, alors le reste de la balise img devrait être traité autrement. Donc il faudrait procéder autrement, par exemple avec un booléen, défini à « false » avant le switch, et à « true » dans les pages où il doit être affiché. Ensuite dans le fichier inclus qui contient le logo, une condition « if(true === $logo) » et là on affiche ou non la ligne contenant la balise image du logo.

Mais encore une fois, tout part de la maquette de base et de son découpage. Selon le résultat voulu en sortie, ça pourra impliquer un découpage différent de ce que j'ai proposé.

 
Par jlb59  -  Le 04/02/2023 09:21  -  Haut de page  - 

J'ai compris pour le logo dans le switch et c'est peut-être utile en certaines occasions, mais un peu moins pour la condition, c'est vrai que je vais certainement en avoir besoin, mais pour l'instant, je ne fait qu'observer.

C'est vrai que votre maquette est vos informations, sont des sources d'apprentissage très enrichissantes.
Comme je ne m'étais pas penché sur la question auparavant, j'ai un peu, et même beaucoup, négligé l'utilisation presque complète du "Php".

 
Par Cyrano  -  Le 04/02/2023 09:38  -  Haut de page  - 

En fait, quel que soit le langage, c'est d'abord et avant tout une question de logique. On traduit ensuite ce qu'on veut faire dans le langage choisi.

J'explique de temps en temps à des gens qui me disent qu'ils n'y connaissent rien qu'en réalité, ils font de la programmation tous les jours. Ainsi, je leur démontre ça de la manière suivante :
Imaginez que vous vouliez faire des frites. Vous allez définir la liste de ce dont vous avez besoin : pommes de terre, huile, sel, et puis le matériel, donc une friteuse, un couteau pour éplucher et couper les patates, et bien entendu un élément chauffant. Vous allez suivre un ordre précis, et ça revient donc à écrire un programme FaireDesFrites : d'abord mettre l'huile dans le récipient prévu et le mettre à chauffer. Pendant que ça chauffe, vous allez éplucher vos patates, les couper, les rincer et les égoutter. Puis lorsque l'huile est à la bonne température, vous allez y mettre les frites pour les cuire.

Il y a un ordre pour exécuter les différentes fonctions : si vous essayez de cuire vos patates avant de les éplucher, vous n'obtiendrez pas des frites.

En PHP, c'est pareil, mais le langage n'est qu'un outil, c'est le langage dans lequel vous allez traduire ce qui doit être fait. Vous devez donc avoir une bonne idée préalable de ce que vous voulez faire et ensuite seulement le traduire en PHP.

 
Par jlb59  -  Le 04/02/2023 11:07  -  Haut de page  - 

Votre exemple est sensé... comme pour les crêpes, et c'est vrai que ce que l'on fait habituellement, c'est machinal et on ne pose même la question de savoir "pourquoi".

Vous dites que la logique du Php et la même que la logique de la vie courante, j'en suis convaincu, mais encore faut-il apprendre à reconnaître et à manier les outils, je parle du Php.

J'ai appris à une &poque, le html et le css, c'est vrai que c'était compliqué parce que n'avait aucune aide physique ni même des forum, parce que ça n'existait pas encore.
C'est en me renseignant sur des livres et brochures que je suis parvenu à créer mon 1er site, c'était en 1997 je le rappelle !
Bon, il m'a fallu plusieurs mois pour parvenir à mes fins.

Je pense que pour le php, ça va être pareil, mais beaucoup moins long avec des profs comme vous !
Le php était assez méconnu en France, et je me suis contenter que du html.
J'ai négligé ce langage, un peu par fénéantise, et comme ce que j'avais fait en html fonctionnait bien, j'ai pas chercher plus loin !

Je vais vous expliquer dans le message suivant mes préoccupations avec certaines variables.

 
Par jlb59  -  Le 04/02/2023 11:26  -  Haut de page  - 

Alors voilà ce qui se passe dans ma tête :

Je ne vois pas trop l'utilité de cette variable, parce que mes pages sont déjà bien remplies

$aContenu = array(
    'accueil' => "Bienvenue chez QI98.",

et l'utilité de faire ça !

$contenupage = $aContenu[$page];

A moins que ça ne soit plus facile en écriture.
Pour mes pages, je n'en ai pas l'utilité.

< ?php echo($contenupage); ?>

Mais il est certain que cela prouverait l'étendue et les possibilités qu'offre Php.

Donc, si j'ai bien suivi, la variable "$aContenu" est un tableau indexé, et l'autre variable "$aContenu[page]" reprend l'index du 1er avec son intitulé, et la variable "$contenupage" affiche à la fois l'index et le commentaire !

J'ai bien suivi Professeur ? (LoL)

 
Par Cyrano  -  Le 04/02/2023 11:28  -  Haut de page  - 

Je n'ai pas commencé beaucoup plus tard. Je suis essentiellement autodidacte. Et mon premier script, c'était la construction d'un petit forum.

À l'époque (2003), j'avais fait une sorte de petit journal de création. Ce n'était pas quelque chose d'aussi sophistiqué qu'un PhpBB, mais c'était fonctionnel et basique, écrit à ce moment là en PHP 4, on sortait à peine du PHP 3. Et la première chose que j'ai faite, avant même les maquettes, c'était un croquis sur une feuille de papier. Je ne le savais pas à l'époque, mais j'ai dessiné graphique mon algorithme général.

À cette époque, je faisais déjà du HTML et un peu de CSS depuis 3 ou 4 ans. Le reste, je le raconte dans ce petit journal. Le point important à souligner, c'est que quel que soit le site que l'on construit, il faut toujours l'aborder en se mettant à la place de l'utilisateur qui pour sa part n'y connaît peut-être rien et peut dans certains cas à peine savoir se servir d'un ordinateur pour naviguer sur Internet. Quand donc on a déterminé tout ça, la technique et la programmation viennent <u>ensuite</u>.

La création web est une des activités informatique les plus compliquées parce qu'il faut arriver à maîtriser 5 langages : trois langages « client » (HTML, CSS, JavaScript) et deux langages « serveur » (PHP, SQL), et il faut rajouter à ça la conception et la modélisation d'une base de données, avec un petit peu d'architecture logicielle pour couronner tout ça. Il ne faut pas pour autant s'affoler en prenant conscience de ça. On avance une étape à la fois en restant zen et on intègre les morceau un après l'autre.

Les qualités requises : logique, patience et discipline. Un peu d'imagination n'est pas inutile, mais les trois précédentes sont absolument indispensables.

Bon courage.

 
Par Cyrano  -  Le 04/02/2023 11:41  -  Haut de page  - 

Oui, l'idée du tableau indexé est bien celle-ci.

Aujourd'hui, on ferait cela avec une base de données et quelque chose de beaucoup plus complexe, là, il s'agit de comprendre le fonctionnement général. Ultérieurement, il sera toujours temps de complexifier voire d'externaliser certaines lignes de cet index.

Par exemple, on pourrait imaginer de remplacer ce tableau indexé par l'appel d'une fonction qui effectuerait une requête SQL vers une base de données avec la page en paramètre pour récupérer uniquement le contenu que l'on souhaite pour la page demandée qui va être affichée.

L'intérêt de ce tableau indexé est juste une simplification pour illustrer l'exemple. Si vous avez déjà du contenu, alors au lieu de ce tableau contenant du texte, ça pourrait être une liste de fichiers contenant déjà le HTML. Exemple :

$aContenu = array(
    `'accueil' => 'accueil.inc.html',
    `'apropos' => 'apropos.inc.html',
    `'contact' => 'contact.inc.html',
    `'e404' => 'e404.inc.html',
);

Dans ce cas, dans le fichier contenu_inc.php, nous aurions alors ceci :

    <div id="conteneur">
      <h1><?php echo($titrePage); ?></h1>
      <h4>Page affichée : pages/<?php echo($page); ?>.html</h4>
<?php include($contenupage); ?>
    </div>

Nous avons là un « include » au lieu d'un « echo »

 
Par jlb59  -  Le 04/02/2023 12:46  -  Haut de page  - 

J'ai bien compris, merci.

C'est vrai que fût un temps, j'avais créé un espace Free, parce que j'avais fait un logiciel permettant de téléphoner en passant par l'ADSL, donc, pour mes exemples, j'utilisais la BDD.
Mais par la suite, le boitier ADSL avait tendance à disparaitre pour la DSL, je crois, mais c'est assez vague dans mes souvenir.

Bref, j'avais créé une BDD parce qu'il me fallait les noms, les N°, les durées, les dates, etc.,

Mais franchement, je ne parviens pas à faire l'amalgame entre la BBD classique et SQL, surtout en Php.

Avec le 1er exemple que vous me donnez, vous dites "<Si vous avez déjà du contenu, alors au lieu de ce tableau contenant du texte, ça pourrait être une liste de fichiers contenant déjà le HTML>" !
Ca doit être assez complexe contenant des commandes Php, parce qu'il y déjà la page normale "$url_page".

 
Par Cyrano  -  Le 04/02/2023 13:22  -  Haut de page  - 

Il n'y a pas de « page normale » : on construit une page à partir de différents morceaux qui doivent s'emboîter comme des Légos.

Donc on peut imaginer que vous créez un fichier avec le contenu de la page d'accueil, juste en HTML. Pareil pour les autres pages, et ces fichiers s'appelleraient alors 'accueil.inc.html', 'apropos.inc.html', etc...

Et dans ce cas, rien de complexe, l'exemple que j'ai montré précédemment fonctionnerait parfaitement bien.

 
Par jlb59  -  Le 04/02/2023 16:16  -  Haut de page  - 

Quand je disais "normale", je faisais allusion à que du texte, actuellement, et je suppose que si le mets des variables à l'intérieur, elles seront interprétées, quoique, je me demande si je suis dans le vrai !

Si j'ai un texte dans une page et que je veuille y mettre une image, je pourrais le faire avec une variable à la place de "<a href=...</a>" ?


<?php /* apropos.php */ ?> Bla bla bla bla. <?php include('???????????'); ?>

Je mets des "?" parce qu'en fait, je ne connais pas encore le moyen de le faire, mais je pense que c'est possible !

De toutes manière, avec ce que vous m'avez appris, pour l'instant, je n'ai pas besoin de compliquer les choses.

 
Par Cyrano  -  Le 04/02/2023 16:32  -  Haut de page  - 

Non, une variable pour mettre une image tel que je comprends ce que vous imaginez, ça ne marche pas. Enfin c'est surtout se compliquer la vie.

Le point principal, c'est que ce qui doit se passer à terme, c'est que le PHP retourne du HTML. Une variable au milieu du HTML doit avoir une valeur texte.

Un include va inclure un fichier, donc si ce fichier ne contient que du HTML, pourquoi pas, mais à mon avis ça va compliquer plus qu'autre chose.

Pour une image qui pourrait varier selon certains critère, il suffirait de définir la valeur d'une variable pour le nom du fichier-image et avoir par exemple :

<img src="./images/<?php echo($nomImage); ?>" alt="">

Ce qui veut dire qu'on aura préalablement assigné une valeur à cette variable bien évidemment.

 
Par jlb59  -  Le 04/02/2023 17:24  -  Haut de page  - 

D'accord, c'est compris pour les variables dans du HTML.

C'est vrai que faire un "include" d'un fichier texté dans une page HTML, n'aurait pas beaucoup de sens.

Qu'est ce vous entendez par "Pour une image qui pourrait varier selon certains critère" ?
Je ne comprends pas trop bien l'exemple que vous avez mis !

Bon, je vois pour le chemin "image", mais moins pour le PHP qui suit ???
Peut-on affecter une image directement dans un tableau ?


$aContenu = array( `'soleil' => 'soleil.png',

Je suis désolé avec des questions qui peuvent vfous paraitre stupides mais je cherche à comprendre et surtout à bien agencer une variable !

Je sais que le <https://www.w3schools.com/php/default.asp> serait idéal, mais c'est en anglais... et je n'ai gardé que quelques bribes de ce que j'ai appris !

 
Par jlb59  -  Le 04/02/2023 17:45  -  Haut de page  - 

Navré de vous déranger encore, mais il y a des choses que je ne vois pas forcément, et surtout pourquoi ???

J'ai ajouté des 3 pages dans des répertoires appropriés, j'ai bien vérifié index.php et menu_inc.php, l'orthographe est bonne, les chemins d'accès aussi, et sur mon ordinateur, ces fichiers sont dans les répertoires signalés dans "menu_inc.php et ont la même orthographe.

J'ai un message d'arreur disant :

Warning: Undefined array key "nom des pages ajoutées" in C:\laragon\www\Maquette restructurée\index.php on line 89

et la ligne 89 de l'index :

$contenupage = $aContenu[$page];

Pourtant, c'est bien affecté !

Ce que je peux traduire, c'est que la clé dans le table est inexistante, ou quelque chose comme ça.

Avez des yeux nouveaux, ça ira certainement mieux !

Merci d'avance.

 
Par Cyrano  -  Le 04/02/2023 18:03  -  Haut de page  - 

Pour l'image qui pourrait changer, imaginez par exemple que l'image change en fonction du jour de la semaine. Là, ça justifierait ce que je suggérais.

Pour le message de warning, pour que ce message ne s'affiche pas, il faurait fallu qu'existe dans le tableau indexé une clé nommée « nom des pages ajoutées »

Ce qui veut dire que quelque part, vous affectez cette valeur à la variable $page quelque part avant la ligne 89 dans le fichier index.php.

 
Par jlb59  -  Le 04/02/2023 18:28  -  Haut de page  - 

"Pour le message de warning, pour que ce message ne s'affiche pas, il faurait fallu qu'existe dans le tableau indexé une clé nommée « nom des pages ajoutées »"

Là, ça y est je crois avoir compris, beaucoup moins pour l'image par contre.
Je n'avais pas du tout penser à ça. Comme quoi, j'ai beaucoup à apprendre.

J'ai rajouté le nom des fichiers ajoutés comme vous me l'avez préconisé, pour cette erreur disparaisse.

Passez une bonne soirée en espérant ne plus vous embêter dans l'immédiat.

JLB59

 
Par Cyrano  -  Le 04/02/2023 18:39  -  Haut de page  - 

Pour l'image, c'est simple : imaginez que chaque jour de la semaine vous affichiez une image différente selon qu'on est lundi, ou mardi, ou mercredi, etc... je vous laisse deviner a suite.
Bon dimanche.

 

Ajouter une réponse à la discussion

Seuls les membres connectés sont autorisés à poster dans les forums !

Identifiez-vous
Join |  ID/MDP? |