if et include: où est mon erreur ?

Petit nouveau ! | 6 Messages

15 juin 2005, 18:20

Bonjour !

Voilà, après 5 h d'essais infructueux, je rends les armes et vous demande audience...

Je suis un tout jeune novice du php, et je suis en plein problème !

Je voudrais faire une page php; avec inclusion d'autres pages suivant la valeur d'une variable $mod.

Pour 1 -> biologie

Pour 2 -> biochimie

Pour 3 -> physiologie

Par défaut: accueil.

Voici mon code:
<?php 
if($mod = 1)
{
include("biologie.php");
} 
else if($mod = 2) 
{
include("biochimie.php");
} 
else if($mod = 3)
{
include("physiologie.php");
} 
else
{
include("accueil.php");
} 
?> 
Je l'ai inséré dans mon index donc; mais il m'inclut toujours biologie.php !

Que faire ? Voyez-vous l'erreur du script ?

Je vous remercie d'avance pour votre aide, et désolé si la question est "idiote" ou trop souvent répétée !

Guillmot

Eléphant du PHP | 199 Messages

15 juin 2005, 18:40

utilise include_once("page.php"); pour évter les inclusions multiple du même fichier
Les 2 font la paire : coder ET commenter :wink:

Petit nouveau ! | 6 Messages

15 juin 2005, 18:41

Salut !

Merci du tuyau; mais je dois avoir un autre problème parce que ça n'a pas résolu l'affaire ... :?

Guillmot

Mammouth du PHP | 19672 Messages

15 juin 2005, 18:47

Essaye avec ça:
<?php
switch ($mod)
{
    case 1 : include_once("biologie.php"); break;
    case 2 : include_once("biochimie.php"); break;
    case 3 : include_once("physiologie.php"); break;
    default: include_once("accueil.php");
}
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 219 Messages

15 juin 2005, 18:53

oui et sinon, le test d'égalité c'est avec "==" et non "="

a+ ;)
daoud

ViPHP
ViPHP | 2144 Messages

15 juin 2005, 18:56

La solution de Cyrano est la meilleure, surtout si iil y a beaucoup de possibilités.
Mais juste pour information dans ton premier code, tu utilise un = dans ta condition, un test d'égalité se fait avec == un égale simple correspond à une affectation...

[Edit ] grillé par Daoud... :D :D

Petit nouveau ! | 6 Messages

15 juin 2005, 19:03

Merci pour ces précisions sur les tests d'égalité !

J'ai testé le code (merci Cyrano !). Mais il y a un petit souci qui bloque tout:

Pour la ligne:
switch ($mod) 
Mon ordi m'indique:

Notice: Undefined variable: mod in c:\program files\easyphp1-8\www\biologie\index.php on line 25

Je ne comprends pas trop pourquoi ?

Merci de votre aide ! Désolé si les questions sont basiques, mais commencer le php tout seul qd on n'est pas dans l'informatique, c'est dur :cry:

Guillmot.

ViPHP
ViPHP | 2144 Messages

15 juin 2005, 19:04

Il ne trouve nulle part la variable mod, si elle provient d'un formulaire ou de l'url de la page, il faut la recuperer respectivement par $_POST['mod '] et $_GET['mod']

Mammouth du PHP | 19672 Messages

15 juin 2005, 19:07

"undefined variable" ça veut dire que la variable n'a pas été initialisée, il n'y a donc dedans pas de valeur ou plutôt elle vaut NULL. donc ce que tu peux faire pour corriger le problème:
<?php
if(isset($mod))
{
    switch ($mod)
    {
        case 1 : include_once("biologie.php"); break;
        case 2 : include_once("biochimie.php"); break;
        case 3 : include_once("physiologie.php"); break;
        default: include_once("accueil.php");
    }
}
else
{
    include_once("accueil.php");
}
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Petit nouveau ! | 6 Messages

15 juin 2005, 19:07

Ok...

Pour moi c'est donc $_GET['mod'] que j'introduis de la sorte:
switch ($_GET['mod']) 
Si tout va bien, ça devrait régler le problème !

Edit: désolé Cyrano j'ai pas vu ta réponse, t'es allé + vite que moi ! Mais je la teste aussi merci !

Mammouth du PHP | 19672 Messages

15 juin 2005, 19:09

presque, tu risques une erreur à la première ouverture, modifie donc comme ceci:
<?php
$mod = isset($_GET['mod'])?$_GET['mod']:"";
    switch ($mod)
    {
        case 1 : include_once("biologie.php"); break;
        case 2 : include_once("biochimie.php"); break;
        case 3 : include_once("physiologie.php"); break;
        default: include_once("accueil.php");
    }
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 2144 Messages

15 juin 2005, 19:09

Oui, mais il vaudrait mieux combiner avec la solution de Cyrano:
Imagine qu'un utilisateur accède directement à la page, sans placer de variable mod dans l'url ?
Tu peux donc faire isset($_GET['mod']) comme dans le code que t'a passé Cyrano, ainsi pas d'erreur possible

Petit nouveau ! | 6 Messages

15 juin 2005, 19:24

Résolu !!!

Voici le code final qui tourne impec' :
<?php 
if(isset($_GET['mod'])) 
{ 
    switch ($_GET['mod']) 
    { 
        case 1 : include_once("biologie.php"); break; 
        case 2 : include_once("biochimie.php"); break; 
        case 3 : include_once("physiologie.php"); break; 
        default: include_once("accueil.php"); 
    } 
} 
else 
{ 
    include_once("accueil.php"); 
} 
?> 
Merci à tous de votre aide !!! Et à bientôt :wink:

Guillmot

Mammouth du PHP | 19672 Messages

15 juin 2005, 19:37

Hum hum, regarde donc deux/trois messages plus haut..... la même en plus court et tout aussi efficace...
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Petit nouveau ! | 6 Messages

15 juin 2005, 19:58

:oops: Désolé; mais tu m'as bel et bien grillé :P

Bah ça montre que le forum est très actif c'est génial ! Et aussi que j'ai compris ce que vous m'avez montré, c'est également très important pour moi :wink: Encore merci !

Guillmot