Créations de pseudo frames

Faust
Invité n'ayant pas de compte PHPfrance

03 sept. 2005, 01:02

J'ai un problème pour créer des pseudo frames avec une page d'erreur 404.
Avec ce code, quand je clic sur un lien comme index.php?page=lol ou n'importe lequel d'autre, il me renvoit toujours sur une page qui inclut le fichier page_body.php.
<?php include('page_header.php')?>
<?php include('page_menu.php')?>

<?php
if (!isset ($_GET['page'])) {
  $_GET['page']= '';
} elseif ($_GET['page']!= 'news' || $_GET['page']!= 'test') {
  $_GET['page']= 'error';
}
else {
  $_GET['page']= $_GET['page'];
}
switch($page) {
case 'news':
include ('page_body.php');
break;

case 'test':
include ('page_body.php');
break;

case 'error':
include ('page_error.php');
break;

default:
include('page_body.php');
break;
}
?>

<?php include('page_footer.php')?>
[/i]

Eléphant du PHP | 142 Messages

03 sept. 2005, 01:14

Hello,
essaye en utilisant ceci:
<?php include('page_header.php')?>
<?php include('page_menu.php')?>

<?php
if (!isset ($_GET['page'])) {
  $page= '';
} elseif ($_GET['page']!= 'news' || $_GET['page']!= 'test') {
  $page= 'error';
}
else {
 $page= $_GET['page'];
}
switch($page) {
case 'news':
include ('page_body.php');
break;

case 'test':
include ('page_body.php');
break;

case 'error':
include ('page_error.php');
break;

default:
include('page_body.php');
break;
}
?>

<?php include('page_footer.php')?>

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

03 sept. 2005, 01:15

essai avec:
$page=$_GET['page'];
switch($page)

Faust
Invité n'ayant pas de compte PHPfrance

04 sept. 2005, 14:14

Avec ta méthode Grummfy, toutes les pages dans le style index.php?page=unepage me renvoient sur la page d'erreur, même pour index.php?page=news.

Pour ta méthode Truc, tu veux que je code ma page de cette manière?
<?php include('page_header.php')?> 
<?php include('page_menu.php')?> 

<?php 
if (!isset ($_GET['page'])) { 
  $page= ''; 
} elseif ($_GET['page']!= 'news' || $_GET['page']!= 'test') { 
  $page= 'error'; 
} 
else 
$page= $_GET['page']; 

switch($page) { 
case 'news': 
include ('page_body.php'); 
break; 

case 'test': 
include ('page_body.php'); 
break; 

case 'error': 
include ('page_error.php'); 
break; 

default: 
include('page_body.php'); 
break; 
} 
?> 

<?php include('page_footer.php')?> 

Avatar du membre
ViPHP
ViPHP | 3008 Messages

05 sept. 2005, 09:50

Pour ce qui est de pseudo frames, regarde cet article de phpdebutant qui est très bien :
http://www.phpdebutant.org/article68.php

Faust
Invité n'ayant pas de compte PHPfrance

05 sept. 2005, 18:30

Oui, j'ai déjà survolé cet article mais je souhaite pouvoir rediriger les visiteurs sur une page d'erreur 404 si l'adresse entrée est incorrecte.
Le problème de l'article PHP Débutant est qu'il n'explique pas comment faire. J'ai déjà regardé de nombreux tutoriaux que j'ai trouvé sur Internet sur les pseudo-frames, mais aucun d'entre eux ne traîtent de ce point-ci.

Avatar du membre
ViPHP
ViPHP | 3008 Messages

05 sept. 2005, 21:10

Bé si ça existe sur le code de phpdebutant. Il y a une page de redirection si la page n'existe pas dans le tableau.
<div class="entete" >
<?php 
  include('entete.htm');  // Nous appelons l'entete du site
?>
</div>
<div class="colonneGauche" >
<?php 
  include('menu.htm');   // Nous appelons notre menu
?>
</div>
<div class="colonneDroite">
<?php

  // On définit le tableau contenant les pages autorisées
  // ----------------------------------------------------
  $pageOK = array('news' => 'news.php', 
                  '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
  } else {
    include('accueil.php');   // Page par défaut quant elle n'existe pas dans le tableau
  }

?>
</div> <div class="pied">
<?php 
  include('pied.htm');   // Nous appelons le pied de page
?>
</div>
A la place d'accueil, tu peux mettre ta page 404 non ?

Faust
Invité n'ayant pas de compte PHPfrance

06 sept. 2005, 17:40

Mon problème avec cette méthode c'est que si j'entre l'adresse www.monsite.com/index.php, la page affichera également une erreur 404. :?
Je voudrais pouvoir afficher la page d'accueil même si l'adresse n'est que index.php. J'ai déjà vu quelque chose comme ce que je veux faire avec une page d'erreur et tout sur un site, je ne me rappelle plus lequel. :roll:

Avatar du membre
ViPHP
ViPHP | 3008 Messages

07 sept. 2005, 12:00

Je ne sais pas si je vais te dire une bêtise mais si tu essayais de mettre ceci :
$pageOK = array('' => 'index.php',
                  'news' => 'news.php', 
                  'accueil' => 'accueil.php');

Faust
Invité n'ayant pas de compte PHPfrance

31 oct. 2005, 16:15

Bonjour,

J'ai repris mes tests il y a quelques temps seulement.
Mon code est un peu différent des codes précédents mais mon problème est assez étrange : la page se charge indéfiniment.
Je ne comprends pas où est l'erreur.
<?php
$valid = array('news','test','error');

if (isset ($_GET['page'])) {

	if ($_GET['page'] !== $valid{$_GET['page']}) {

		header("Location: index.php?page=error");

	} else {

		$page = $_GET['page'];

	}

} else {

	$page = 'default';

}
?>
<?php include('page_header.php')?>

<?php include('page_menu.php')?>

<?php
switch($page) {

case 'news':
include ('page_body.php');
break;

case 'test':
include ('page_body.php');
break;

case 'error':
include ('page_error.php');
break;

default:
include('page_body.php');
break;
}
?>

<?php include('page_footer.php')?>

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

01 nov. 2005, 03:37

ce test n'est pas bon
if ($_GET['page'] !== $valid{$_GET['page']})
tu compare un chiffre ($_GET['page'],numérique) avec un string (news, pour page=0)
Donc dans tous les cas le test est verifié:
si page = 0 tu compare a "news" hors 0!="news" et INT ! = string

revoi ce test :wink:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Mammouth du PHP | 19672 Messages

01 nov. 2005, 09:56

On va simplifier un peu :
<?php
include('page_header.php');
include('page_menu.php');
/* Récupération du paramètre s'il existe */
$page = isset($_GET['page']) ? $_GET['page'] : "";
/* Gestion de la page d'erreur' */
$pages_valides = array("news", "test");
if(!empty($page) && !in_array($page, $pages_valides))
{
    $page = 'error';
}
/* Affichage */
switch($page)
{
    case 'news':
    include ('page_body.php');
    break;

    case 'test':
    include ('page_body.php');
    break;

    case 'error':
    include ('page_error.php');
    break;

    default:
    include('page_body.php');
    break;
}
include('page_footer.php')
?>
Suivez bien le raisonnement :
  1. On récupère le paramètre s'il existe ;
  2. On crée une liste des pages valides pour gérer le renvoi automatique vers une page erreur : cette liste devra être augmentée au fil de la création de nouvelles pages;
  3. On teste la valeur du paramètre s'il y en a un : s'il n'y en a pas, on ira sur la page par défaut, mais s'il y a un paramètre, on vérifie qu'il est dans la liste, s'il n'y est pas, on renvoie vers la page d'erreur;
  4. On affiche alors la page selon le paramètre prédéfini.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Faust
Invité n'ayant pas de compte PHPfrance

01 nov. 2005, 13:27

Merci pour ton code Cyrano, il fonctionne correctement mais j'ai encore un problème : la page index.php m'affiche également une page d'erreur.
Comment faire pour que si aucune variable page n'est entrée, on inclut la page par défaut?

Voici le code :
<?php
$valid = array('news','test','error');

$page = isset ($_GET['page']) ? $_GET['page'] : 'default';

if (!empty($page) && !in_array($page, $valid))
{
	header("Location: index.php?page=error");
}

?>
<?php include('page_header.php')?>

<?php include('page_menu.php')?>

<?php
switch($page) {

case 'news':
include ('page_body.php');
break;

case 'test':
include ('page_body.php');
break;

case 'error':
include ('page_error.php');
break;

default:
include('page_body.php');
break;
}
?>

<?php include('page_footer.php')?>
Et aussi, que signifie la fonction in_array($var1, $var2)?

!empty($var) veut-il dire que $var n'est pas vide?

Truc, $_GET['page'] ne renvoie pas une valeur littérale? :?

Merci encore pour votre aide. :)

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

01 nov. 2005, 14:14

Truc, $_GET['page'] ne renvoie pas une valeur littérale? :?
Vu la façon dont tu utilisait le tableau ça laissait entndre que tu passait tes pages avec des entiers
$valid{$_GET['page']}
et ton tableau
$valid = array('news','test','error'); 
ici les indexes de ton tableau sont (0 => "news",1 =>" test",2 =>" error")
donc tu comparais des variables "incomparables" :wink:

Donc, pour ton autre probleme puisque tu affecte "default" a $page si la variable n'existe pas tu toi ajouter "default" a ta liste ($valid) de pages qui ne renvoi pas d'erreur.

in_array(), verifi si une valeur est comprise dans un tableau
et pour empty() je te renvois sur la doc :wink:
Pour encore plus de détail regarde ce post

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Faust
Invité n'ayant pas de compte PHPfrance

01 nov. 2005, 15:19

Ah! Tout marche comme je le voulais.

J'aurais dû suivre le code de Cyrano à la lettre :P et mettre
$page = isset ($_GET['page']) ? $_GET['page'] : '';
et non
$page = isset ($_GET['page']) ? $_GET['page'] : 'default';
Pour ce code-ci :
if (!empty($page) && !in_array($page, $valid))
Je crois que j'avais mal compris le code ; il signifie bien que si la variable $page n'est pas nulle ET qu'elle est différente des valeurs du tableau $valid, on renvoit une page d'erreur?

Et encore merci à vous deux pour votre aide. :D