probleme avec switch include

Mr-lova58
Invité n'ayant pas de compte PHPfrance

13 nov. 2012, 01:00

Bonjour,
je maitrise pas encore php je voudrais faire une include sur mon site.
Au départ je me sert de quelque page vide pour le test mais j'ai un message d'erreure et je ne c'est pas si c'est comme cela qu'on fait pour utiliser Include.

<a href="switch_include.php?lien=episode">episode<br>
<a href="switch_include.php?lien=faq">faq<br>
<a href="switch_include.php?lien=news">news</a><br>

<br>
<?php

switch ($_GET['lien'])
{
case "faq": // ouvre la page faq
include ("faq.php");
break;

case "news": // ouvre la page news
include ("news.php");
break;

case "episode";
include ("episode.php");
break;

default:
include ("news.php");
}
?>


enfette le script marche quand je clique sur les lien mais quand je sui dans la page d'index ( switch_include.php ).
sa m'affiche un message d'erreur :

episode
faq
news


( ! ) Notice: Undefined index: lien in C:\wamp\www\tests\condition\switch_include.php on line 8
Call Stack
# Time Memory Function Location
1 0.0003 366984 {main}( ) ..\switch_include.php:0
la page newsssssssss !!!!

ViPHP
AB
ViPHP | 5818 Messages

13 nov. 2012, 02:28

Faut vérifier l'existence de ta variable avant de la tester :
<?php if (isset($_GET['lien']))
{
switch ($_GET['lien'])
{
case "faq": // ouvre la page faq
include ("faq.php");
break;

case "news": // ouvre la page news
include ("news.php");
break;

case "episode":
include ("episode.php");
break;

default:
include ("news.php");
}
}?>
Attention dans ton code tu avais un ';' juste après case "episode"

mr-lova58
Invité n'ayant pas de compte PHPfrance

13 nov. 2012, 03:40

Merciii beaucoup je comprend mieu maintenant.

Mais il y a une dernière chose que je n'arrive pas à faire.

je voudrai que justement dans l'index(switch_include.php) la page news.php soit inclus obliger.
Ensuite une fois cliquer sur les liens on puisse accéder aux pages demandé.

Comment faire STP :(

ViPHP
ViPHP | 2577 Messages

13 nov. 2012, 09:48

Le plus simple est de commencer par calculer la page souhaité :
<?PHP
if (isset($_GET['lien'])) {
   $lien = $_GET['lien'];
} else {
   $lien = 'news';
} 
?>
et de remplacer le $_GET['lien'] par $lien dans le switch.

mr-lova58
Invité n'ayant pas de compte PHPfrance

13 nov. 2012, 22:39

Merci a vous deux !! :)

voici le codage finale qui fonctionne très bien ! :

// ( index = switch_include.php )
<a href="switch_include.php?lien=episode">episode<br>
<a href="switch_include.php?lien=faq">faq<br>
<a href="switch_include.php?lien=news">news</a><br>

<br>
<?php
if (isset($_GET['lien'])) // verifie si $_GET['lien'] existe avec isset
{
$lien = $_GET['lien'];
}
else
{
$lien = false; // si il existe pas alors $lien est egale a faux.
}
switch ($lien)
{
case "faq": // dans le cas ou $note vaut 0
include ("faq.php");
break;

case "news": // dans le cas ou $note vaut 5
include ("news.php");
break;

case "episode": // vaut 10
include ("episode.php");
break;

default:
include ("news.php"); // si $lien égale faux alors on ouvre news.php
}

?>

ViPHP
AB
ViPHP | 5818 Messages

14 nov. 2012, 02:59

if (isset($_GET['lien']))
{
$lien = $_GET['lien'];
}
else 
{
$lien = false; 
}
//...
Pour facilité l'écriture de conditions simples comme celles-ci, php dispose de l'opérateur ternaire.
Tu pourrais donc remplacer ce code par une seule ligne :
$lien = isset($_GET['lien']) ? $_GET['lien'] : false;
Notes bien que cela donne exactement le même résultat, c'est juste histoire d'avoir à écrire moins de code. Si ce sujet t'intéresse tu peux regarder là