Inclusion selon url

BberXIII81
Invité n'ayant pas de compte PHPfrance

28 mai 2007, 14:13

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)

ViPHP
ViPHP | 5924 Messages

28 mai 2007, 14:51

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]); 
?>

BberXIII81
Invité n'ayant pas de compte PHPfrance

28 mai 2007, 15:37

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.

ViPHP
ViPHP | 928 Messages

28 mai 2007, 16:50

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 ..

ViPHP
ViPHP | 5924 Messages

28 mai 2007, 20:21

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']); 
?>