Page 1 sur 1

Inclusion selon url

Posté : 28 mai 2007, 14:13
par BberXIII81
Bonjour,
Je souhaite créer une page "d'interface" (index.php) dans laquelle viendront s'inclurent des pages html selon l'url renvoyé par des liens composant le menu fixe de ma page index.php. Pour cela j'utilise des url du genre "http://www.monsite.com/index.php?page=1" et le script suivant dans la partie où viendront s'inclurent mes pages :
<?php
$Num = intval($_GET['page']);
switch($Num) {
case 1: // le chiffre est le numéro récupéré de $_GET['page']
$Page = 'page1.html'; // page correspondante
break;
case 2:
$Page = 'page2.html';
break;
case 3:
$Page = 'page3.html';
break;
default:
$Page = 'page4.html';
}
include($Page);
?>
Or en le testant avec "easyphp", lorsque l'url est ".../index.php" (comme lorsque que l'on veut venir sur mon site) ma page par défaut s'inclue en même temps qu'un message d'erreur pour la ligne "x" alors que pour les url .../index?page=1 ; ...=2 ; ...=3 ; et même ...=4 (qui n'a pas de condition associé et pour laquelle la page défaut s'affiche (normale)) tout fonctionne normalement.
Comment remédier à l'apparition de ce message pour ".../index.php"?
Pour échapper cette url, j'ai essayer le script suivant:
<?php
$Num = intval($_GET['page']);
switch($Num) {
case 1: // le chiffre est le numéro récupéré de $_GET['page']
$Page = 'page1.html'; // page correspondante
break;
case 2:
$Page = 'page2.html';
break;
case 3:
$Page = 'page3.html';
break;
default:
header('Location: index.php?page=1'); // page par défaut
exit();
}
include($Page);
?>
Mais ça ne fonctionne pas, où est l'erreur?
P.S. Je parle d'avec easyphp, car avec mon hébergeur rien n'est inclut et aucun message d'erreur n'apparait alors que celui gère le php (mais cela est un autre sujet, pour lequel je me suis dit qu'il fallait d'abord que mon script fonctionne parfaitement)

Posté : 28 mai 2007, 14:51
par Sékiltoyai
Yen a qui se compliquent la vie :
<?php 
$Num = isset($_GET['page'])?intval($_GET['page']):0; // L'erreur venait d'ici, puisque l'index page n'était pas défini, puisque non spécifié dans l'url. Il faut toujours tester ca.
$pages = array(
     0 => 'page1.html', //Page par défaut
     1 => 'page1.html',
     2 => 'page1.html'
);
if( $Num>=count($pages) )
{
     $Num = 0;
}
include($pages[$Num]); 
?>

Posté : 28 mai 2007, 15:37
par BberXIII81
Merveilleux!!! On m'avait suggéré mon script sur un forum de création de site généraliste , peut-être un peut trop!
Bon passons au post suivant
Un grand merci à toi Sékiltoyai.

Posté : 28 mai 2007, 16:50
par Genova
J'utiliserai plutôt des index que des indices pour le tableau, pour faciliter la mise à jour :

Code : Tout sélectionner

<?php $Num = isset($_GET['page'])?intval($_GET['page']):0; // L'erreur venait d'ici, puisque l'index page n'était pas défini, puisque non spécifié dans l'url. Il faut toujours tester ca. $pages = array( 'page1' => 'page1.html', //Page par défaut 'page2' => 'page1.html', 'page3' => 'page1.html' ); if( !isset($pages[$Num]) ) { $Num = 'page1'; } include($pages[$Num]); ?>
Avec des URL du type "http://www.monsite.com/index.php?page=page2" : plus lisible pour les clients, plus lisible pour toi pour le développement, plus facile à mettre à jour, etc ..

Posté : 28 mai 2007, 20:21
par Sékiltoyai
Dans ce cas :
<?php 
$page = isset($_GET['page'])$_GET['page']:'';
$pages = array( 
     'page1' => 'page1.html',
     'page2' => 'page1.html', 
     'page3' => 'page1.html' 
);
include(isset($pages[$page])?$pages[$page]:$pages['page1']); 
?>