[PHP] [Résolu] Problème d'include

Bonjour,

J’ai un problème d’include:
j’ai mis les PAGE=accueil, mais dans la page index.php, il n’y affiche rien, tandis que index.php?page=accueil, il affiche le texte que j’ai marqué dans accueil.php.
Voilà la question:
Comment mettre la page ACCUEIL.PHP dans INDEX.PHP ?

Voilà mon code de index.php:


<html><head>
<link rel="stylesheet" media="screen" type="text/css" title="Essai" href="txt.css" >
</head>
<body bgcolor="black" link="#00ccff" vlink="#00ccff">
<TABLE width=800 height=2000 bgcolor=white align="center">
<TR>
<TD colspan=3 style="border: solid; border-width: thin; border-color: #99ccff" width="800" height="148" background="pics/banniere.png"></TD>
</TR>
<TR> <TD width=150 valign=top style="border: dashed; border-width: thin; border-color: #99ccff">

<?php
  include('menu.htm');   // Nous appelons notre menu
?>

</TD> 
<TD width=640 valign=top style="border: dashed; border-width: thin; border-color: #99ccff">
<?php

  // On définit le tableau contenant les pages autorisées
  // ----------------------------------------------------
  $pageOK = array('accueil' => 'accueil.php');                  

  // On teste que le paramètre d'url existe et qu'il est bien autorisé
  // -----------------------------------------------------------------
  if ( (isset($_GET['page'])) && (isset($pageOK[$_GET['page']])) ) {
    include($pageOK[$_GET['page']]);   // Nous appelons le contenu central de la page
  }

?>
<br>
</TD>
</TR>
</TABLE>

Merci d’avance.

Tu veux que par défaut la page accueil.php s’affiche (si rien n’est spécifié) ?

<html><head>
<link rel="stylesheet" media="screen" type="text/css" title="Essai" href="txt.css" >
</head>
<body bgcolor="black" link="#00ccff" vlink="#00ccff">
<TABLE width=800 height=2000 bgcolor=white align="center">
<TR>
<TD colspan=3 style="border: solid; border-width: thin; border-color: #99ccff" width="800" height="148" background="pics/banniere.png"></TD>
</TR>
<TR> <TD width=150 valign=top style="border: dashed; border-width: thin; border-color: #99ccff">

<?php
 include('menu.htm');   // Nous appelons notre menu
?>

</TD>
<TD width=640 valign=top style="border: dashed; border-width: thin; border-color: #99ccff">
<?php

 // Page par défaut
 // ----------------------------------------------------
 define('DEFAULT_PAGE', 'accueil');

 // On définit le tableau contenant les pages autorisées
 // ----------------------------------------------------
 $pageOK = array('accueil' => 'accueil.php');                  

 // On teste que le paramètre d'url existe et qu'il est bien autorisé
 // -----------------------------------------------------------------

 $page = isset($_GET['page']) && isset($pageOK[$_GET['page']]) ? $pageOK[$_GET['page']] : DEFAULT_PAGE;

 include($page);   // Nous appelons le contenu central de la page

?>
<br>
</TD>
</TR>
</TABLE>
</body>
</html>

Ainsi si aucune page n’est spécifiée, ou que la page demandée n’existe pas, la page par défaut sera ouverte :wink: Et tu avais oublié le </body></html> à la fin

Pourrais tu éditer ton message et ajouter le langage dans le titre du sujet ? (genre [php] Includes…) ?

Ok.
Au fait, si je comprend bien, il faut mettre:
// Page par défaut
// ----------------------------------------------------
define(‘DEFAULT_PAGE’, ‘accueil’);

Ca marche pas, ça affiche toujours une page blanche.

Je n’ai pas changé que ça non, tu n’as qu’à tester mon code en entier. define(‘DEFAULT_PAGE’, ‘accueil’) définit une constante, qui dans notre cas nous sert à savoir quelle est la page par défaut… Mais après il faut changer le code pour qu’il utilise cette constante quand la page n’est pas spécifiée ou incorrecte.

C’est bon ! J’avais copié / collé ton code = parse error

C’était juste une accolade de trop, je mets [Résolu] !

Merci !

Déjà :

  1. include(‘menu.htm’) : mal vu. ici le fichier htm va être parsé comme un fichier PHP. Ecrit plutôt :

echo file_get_contents(‘menu.htm’);

Tu iras un petit plus vite puisque PHP ne cherchera pas à parser un document htm (sauf si c’est ce que tu veux).

  1. include c’est une instruction, donc pas de parenthèses ! : include ‘menu.htm’ c’est mieux.

  2. Pour finir, un exemple adapté à ton code d’inclusion par défaut :

<?php

 // On définit le tableau contenant les pages autorisées
 // ----------------------------------------------------
 $pageOK = array('accueil' => 'accueil.php');                  

 // On teste que le paramètre d'url existe et qu'il est bien autorisé
 // -----------------------------------------------------------------
 include isset( $_GET['page'] ) && isset( $pageOK[$_GET['page']] ) ?
   $pageOK[$_GET['page']]:
   reset($pageOK);
?>

reset remet à zéro le pointeur interne du tableau passé en paramètre, et renvoie le premier élément (ici : accueil). Bien sûr, tu peux utiliser une constante ou foutre directement $pageOK[‘accueil’] mais bref.

Exact j’avais oublié de retirer ton accolade :jap:

Toujours un problème:


<TABLE width=800 height=2000 bgcolor=white align="center">
<TR>
<TD colspan=3 style="border: solid; border-width: thin; border-color: #99ccff" width="800" height="148" background="pics/banniere.png"></TD>
</TR>
<TR> <TD width=150 valign=top style="border: dashed; border-width: thin; border-color: #99ccff">

<?php
  include('menu.htm');   // Nous appelons notre menu
?>

</TD> 
<TD width=640 valign=top style="border: dashed; border-width: thin; border-color: #99ccff">
<?php

   // Page par défaut
   // ----------------------------------------------------
  define('DEFAULT_PAGE', 'accueil.php');

  // On définit le tableau contenant les pages autorisées
  // ----------------------------------------------------
  $pageOK = array('accueil' => 'accueil.php');
  $pageOK = array('news' => 'news.php');

  // On teste que le paramètre d'url existe et qu'il est bien autorisé
  // -----------------------------------------------------------------
 $page = isset($_GET['page']) && isset($pageOK[$_GET['page']]) ? $pageOK[$_GET['page']] : DEFAULT_PAGE;

include($page);   // Nous appelons le contenu central de la page



?>
<br>
</TD>
</TR>
</TABLE>

Quand je clique sur NEWS, il affiche toujours ACCUEIL.PHP à la place de NEWS.PHP qui existe.

Remplace

$pageOK = array('accueil' => 'accueil.php');
$pageOK = array('news' => 'news.php');

Par ceci

$pageOK = array(
    'accueil' => 'accueil.php',
    'news'    => 'news.php'
);

Et attention, le code est sensible à la casse, c’est à dire que index.php?page=NEWS ne fonctionnera pas, mais index.php?page=news si :wink:

Merci ! :clap: