Securite PHP/SQL

WRInaute occasionnel
Salutations à tous, dans le cadre d'un projet pour mes études je créer un site étant relativement novice en sécurité j'aurai aimé savoir si mes codes sont "sécurisés".

J'utilise ce code pour rendre dynamique le changement de page sur le site, il n'est pour le moment pas en ligne je test en local, j'ai volontairement changé le nom des variables, logs et autres donc ne vous étonnez pas de certains noms :wink:

Merci à ceux qui prendront le temps de me lire !

Cordialement

PS: Je précise que je suis étudiant donc si mon code vous parait archaïque c'est que j'ai appris, vos conseils seront précieux pour améliorer celui ci :)

Code:
 if (!isset($_GET["page"]))
                {
                    include ("content/content.php");
                } 
                else
                {
                    include ("content/" . $_GET["page"] . ".php ");
                    if (isset($_POST["id"]))
                    {
                       $_SESSION['id']  =  $_POST["id"];
                        
                    }
                }

Mon formulaire avec ma page d'identification vient compléter la partie " base de donnée"

Code:
<?php

if (!isset($_POST['nomcarte'])) {
    $nomcarte = 'NULL';
} else {
    $nomcarte = $_POST['nomcarte'];
}
if (!isset($_POST['qualite'])) {
    $qualite = 'NULL';
} else {
    $qualite = $_POST['qualite'];
}
if (!isset($_POST['manablanc'])) {
    $manablanc = 'NULL';
} else {
    $manablanc = $_POST['manablanc'];
}
if (!isset($_POST['manableu'])) {
    $manableu = 'NULL';
} else {
    $manableu = $_POST['manableu'];
}
if (!isset($_POST['mananoir'])) {
    $mananoir = 'NULL';
} else {
    $mananoir = $_POST['mananoir'];
}
if (!isset($_POST['manarouge'])) {
    $manarouge = 'NULL';
} else {
    $manarouge = $_POST['manarouge'];
}
if (!isset($_POST['manavert'])) {
    $manavert = 'NULL';
} else {
    $manavert = $_POST['manavert'];
}
if (!isset($_POST['manaincolore'])) {
    $manaincolore = 'NULL';
} else {
    $manaincolore = $_POST['manaincolore'];
}
if (!isset($_POST['genre'])) {
    $genre = 'NULL';
} else {
    $genre = $_POST['genre'];
}
if (!isset($_POST['lien'])) {
    $lien = 'NULL';
} else {
    $lien = $_POST['lien'];
}
if (!isset($_POST['image'])) {
    $image = 'NULL';
} else {
    $image = $_POST['image'];
}
include ("../cfg/connect_sql.php");
$textSQL = "INSERT INTO caras
(id, nomcarte, qualite, manablanc, manableu, mananoir, manarouge, manavert, manaincolore, genre, lien, image)
VALUES
('', '$nomcarte', '$qualite',  '$manablanc', '$manableu', '$mananoir', '$manarouge', '$manavert', '$manaincolore', '$genre', '$lien', '$image')";

mysql_query($textSQL);
mysql_close();
header('location:../../index.php?page=lapagedelenfer');

?>

à ceci le formulaire d'identification :

Code:
 <form action="index.php?page=action/action_identification" method=POST>
        <input type="text" name="login" value="Login"></input>
        <input type="password" name="pwd" value="Mot de pass"></input>
        <input type="submit" value="Connexion">
        <INPUT TYPE="reset" NAME="nom" VALUE="Annuler">
        </form>

Avec la page action d'identification :

Code:
  <?php
$connexion = mysql_connect("localhost","login","motdepassedesql");
if (!$connexion)
{
die('Connexion impossible : ' . mysql_error());
}
mysql_select_db("dblocal", $connexion);
$login =$_POST['login'];
$pwd=$_POST['pwd'];
$sql = "SELECT id, login, mdp FROM compte WHERE login='" . $login . "' AND mdp='" . $pwd . "';";
$resultat = mysql_query($sql);
$ligne = mysql_fetch_array($resultat, MYSQL_ASSOC);
$login_valide = $ligne['login'];
$pwd_valide = $ligne['mdp'];

	  
   if (isset($_POST['login']) && isset($_POST['pwd'])) { 
     
          if ($login_valide == $login && $pwd_valide == $pwd) { 
                session_start (); 
                $_SESSION['login'] = $_POST['login']; 
                $_SESSION['pwd'] = $_POST['pwd'];
		$_SESSION['id']	= $ligne['id'];
                $_SESSION['auth'] = "ok";
		header("Location: index.php?page=raremagic");
          } 
          else { 
             echo 'Erreur de login';
          }  
    }  
    else { 
          echo 'Connexion impossible';  
    }  
    ?
>

Et la page deconnection :

Code:
<?php
session_start();
unset($_SESSION);
session_destroy();
header("Location: index.php?page=lapagedelenfer");
?>
 
WRInaute accro
Belles failles dans ton formulaire, tu fais juste des tests sur isset() et aucun contrôle des données, et pas non plus de mysql_real_escape_string()
 
WRInaute occasionnel
spout a dit:
Belles failles dans ton formulaire, tu fais juste des tests sur isset() et aucun contrôle des données, et pas non plus de mysql_real_escape_string()


Tu veux dire des test via expressions régulières ?

Après recherche, j'ai appliqué mysql_real_escape_string() pour contrôler les entrées sur mes $_POST, $_GET c'est bien de cela que tu parlais ?
 
WRInaute accro
Des tests style is_int(), filter_var(), ...

Oui mysql_real_escape_string() pour construire tes requêtes SQL.
 
WRInaute accro
Je suis pas expert en secu ... phprank1 .. mais il me semble que le minimum syndical serait deaj d'ajouter un

strip_tags

sur tes $_POST :roll:
 
WRInaute impliqué
Zecat a dit:
Je suis pas expert en secu ... phprank1 .. mais il me semble que le minimum syndical serait deaj d'ajouter un

strip_tags

sur tes $_POST :roll:

Et pourquoi ?

Si je veux mon pseudo de ce style : "<tag pseudo="Blount" />", j'en ai bien le droit ;)

Je me demande toujours pourquoi vous vous butez à toujours vouloir utiliser ces fonctions pour « protéger » (en fait, ça ne protège rien du tout). Les données entrées par l'utilisateur ne doivent pas être modifiées.
Bien entendu, il ne faut pas confondre « protéger » avec « interdire », ce qui n'est pas du tout pareil.

Par exemple, je ne veux pas de majuscule dans le texte entré par l'utilisateur. En théorie, il faudrait l'avertir de son erreur :
PHP:
<span class="syntaxdefault"><br />if </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$_POST</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'pseudo'</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">!=</span><span class="syntaxdefault"> mb_strtolower</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$_POST</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'pseudo'</span><span class="syntaxkeyword">]))</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">    $erreur</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'pseudo'</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">'Attention, vous ne pouvez pas utiliser des majuscules dans votre pseudo.'</span><span class="syntaxkeyword">;<br />}<br /></span><span class="syntaxdefault"> </span>

C'est un exemple.


Pour revenir au sujet, une seule fonction doit être utilisée : mysql_real_escape_string (et oubliez les htmlentities, htmlspecialchars, etc. avant enregistrement en base de données).
 
WRInaute passionné
@Blount : pourquoi oublier certaines fonctions sur les chaines de caractères telle que stripcslashes et htmlspecialchars ?
 
WRInaute impliqué
Parce que ces fonctions sont à faire à l'affichage et non à l'enregistrement des données. J'ai pour habitude de conserver les données tel que l'utilisateur les a entrés. Si je veux qu'il les entre dans un certain format, je lui indique et contrôle ce qu'il entre (comme une adresse E-Mail).

Il n'est pas à exclure que les données de la base soit traitées exclusivement par PHP. Faire des "html_entity_decode" (par exemple) dans un autre langage pourrait devenir très vite compliqué.
 
WRInaute impliqué
mysql_real_escape_string a une faille, il ne gère pas le #, le commentaire en sql, pour régler ça, passes par pdo.

Je te conseille de faire un htmlentities de toutes les données donné par l'utilisateur, sa prendra plus de place das la bdd mais tu ne te fera pas chier a l'affichage.
 
WRInaute accro
_Soul a dit:
Je te conseille de faire un htmlentities de toutes les données donné par l'utilisateur, sa prendra plus de place das la bdd mais tu ne te fera pas chier a l'affichage.
Mauvais conseil, comme Blount l'a souligné, c'est à l'affichage qu'il faut faire ce genre de traitement.
 
WRInaute passionné
Je ne pige pas ...

Si vous ne faites pas de traitement des données au niveau du formulaire, donc avant insertion en bd, vous n'êtes pas emmerdé avec par exemple des antislash suite à des mots contenant des apostrophes ?

Exemple :
Code:
$ma_variable = stripcslashes(htmlspecialchars($_POST["toto"]));
//Insertion
'".mysql_real_escape_string($ma_variable)."'
 
WRInaute accro
tryan a dit:
vous n'êtes pas emmerdé avec par exemple des antislash suite à des mots contenant des apostrophes ?
Si les magic quotes sont désactivées: non.
C'est mysql_real_escape_string() qui se charge de ça.
 
WRInaute impliqué
spout a dit:
_Soul a dit:
Je te conseille de faire un htmlentities de toutes les données donné par l'utilisateur, sa prendra plus de place das la bdd mais tu ne te fera pas chier a l'affichage.
Mauvais conseil, comme Blount l'a souligné, c'est à l'affichage qu'il faut faire ce genre de traitement.
Et t'oublie combien de fois de le faire à l'affichage?
 
WRInaute passionné
Excuse si je suis un peut lourd mais j'aime bien comprendre :mrgreen: .

Donc si get_magic_quotes_gpc() retourne 1 c'est que c'est activé et donc ça insère des slash ..c'est bien ça ?
Dans ce cas il faut alors testé au préalable si magic_quote est activé pour effectuer un traitement si nécessaire ..?
Code:
if (get_magic_quotes_gpc()){ //retourne 1
$ma_variable = stripcslashes($_POST["toto"]);
}
else
{
$ma_variable = $_POST["toto"];
}
 
WRInaute impliqué
C'est ça Tryan.

_Soul, tu peux autant oublier à l'affichage qu'à l'insertion. Personnellement, j'oublie rarement, parce que ça devient une habitude.
Tu peux aussi mettre un base64_encode tant que tu y es, tu es sur de n'avoir que des caractères alpha …

Faites ce que vous voulez, mais n'empêche que pourrir une base de données avec des valeurs à la con, c'est aller droit dans le mur. Et c'est par expérience que j'en parle.

Un truc débile : si je modifie la base de données directement à la main (ça arrive plus souvent que l'on ne le pense), et que j'y insère des balises HTML (censées s'afficher comme du texte), ça donne quoi à l'affichage ? Il faut appliquer un « htmlspecialchars » pour l'afficher. Dans ce cas, toutes tes entités précédemment enregistrées vont devenir erronées à cause du passage de & en &nbsp;.
 
WRInaute impliqué
L'htmlentities me sert pour éviter les injections de codes, c'est pas moi qui vais me pourrir tout seul, fin bon c'est une habitude. Je préfère juste faire les vérifications une fois que 36.

$plop = htmlentities($_POST['plop']); se torche en une ligne et on se pose plus de questions après. Fin bon chacun fait comme il veut, je préfère mettre plus de données dans la bdd et coder comme sa vient après.
 
WRInaute passionné
Blount a dit:
C'est ça Tryan.
Cool, vive moi :mrgreen: du coup ça m'amène à une autre question ..sorry.
C'est quand même plus simple et plus rapide de traité la variable au préalable que de testé si magic_quote est activé ..non ?

7 lignes ici :
Code:
if (get_magic_quotes_gpc()){ //retourne 1
$ma_variable = stripcslashes($_POST["toto"]);
}
else
{
$ma_variable = $_POST["toto"];
}
Contre une seule :
Code:
$ma_variable = stripcslashes($_POST["toto"]);
Il se passe quoi si magic_quote est désactivé et que l'on utilise stripcslashes ?
 
WRInaute occasionnel
Je continu dans ma lancée ! J'ai mis en application ce que j'ai lus plus haut, un petit soucis viens sur mes else dans mes fichiers action, quant je lance un

Code:
else {
    $qualite = $_POST['qualite'];
}

Devient logiquement

Code:
else {
    $qualite = mysql_real_escape_string($_POST['qualite']);

Ca m'indique une erreur de syntaxe. Ai je raté quelque chose ? :?
 
WRInaute passionné
mysql_real_escape_string est me semble t'il utilisé pour une commande sql et non dans une variable.
 
WRInaute discret
@user2home en complément aux conseils qui t'ont été données:
En ce qui concerne la sécurité d'un formulaire et d'un insert SQL, il existe 2 types de mesures à prendre en compte:
- éviter les intrusions:
Un formulaire dans une page HTML ouvre une porte vers une injection SQL ou de fichier. Les fonctions mysql_real_escape_string et des filtres regex éloignent la plupart des injections,

- veillez à l'intégrité des données:
Pour veiller à la cohérence des données, je te conseille de vérifier également la qualité des données avant de les ajouter dans ta base. De plus, cette précaution élimine 3/4 des tentatives d'intrusion.
Exemple:
Supposons que dans la base, $_POST['nomcarte'] est inséré dans un champs varchar(16). On peut vérifier la valeur de $_POST['nomcarte'] avec substr($_POST['nomcarte'], 0,16); puis preg_match('`^([a-z])$`')
Ou encore utiliser le résultat de intval() avant d'insérer une valeur numérique dans la base.
 
WRInaute impliqué
@user2home, montre nous la partie concernée. Sinon, une connexion à MySQL doit être effectuée avec l'utilisation de cette fonction.

@tryan, la configuration « magic_quote » est obselète depuis PHP 5.3.
Pour bien faire, il faut vérifier si la fonction « get_magic_quotes_gpc » existe (je ne sais pas si elle a été supprimée). Si oui, tu vérifies si le serveur est configuré avec les « magic_quote » activées. Tu fais ton strip (slashes, pas tease ;) ) si c'est le cas.
 
WRInaute occasionnel
fobec a dit:
@user2home en complément aux conseils qui t'ont été données:
En ce qui concerne la sécurité d'un formulaire et d'un insert SQL, il existe 2 types de mesures à prendre en compte:
- éviter les intrusions:
Un formulaire dans une page HTML ouvre une porte vers une injection SQL ou de fichier. Les fonctions mysql_real_escape_string et des filtres regex éloignent la plupart des injections,

- veillez à l'intégrité des données:
Pour veiller à la cohérence des données, je te conseille de vérifier également la qualité des données avant de les ajouter dans ta base. De plus, cette précaution élimine 3/4 des tentatives d'intrusion.
Exemple:
Supposons que dans la base, $_POST['nomcarte'] est inséré dans un champs varchar(16). On peut vérifier la valeur de $_POST['nomcarte'] avec substr($_POST['nomcarte'], 0,16); puis preg_match('`^([a-z])$`')
Ou encore utiliser le résultat de intval() avant d'insérer une valeur numérique dans la base.

Je prend bien en compte tes remarques, ma question peut paraître stupide, mais .... j'utilise un fichier ou se situe mon FORM (form_ajout.php ) qui lors de la validation du formulaire me dirige vers une page "action.php" ou je traitre les $_POST et éventuellement l'insertion dans la base de donnée.

J'ai quelque peut modifier mon code d'origine mais je bute sur ceci, je voudrai intègrer à présent le hash MD5 comme ceci.

Je passe le $_POST['pwd'] en MD5, ai je besoin d'ajouter mysql_real_escape_string ? Dois je le faire en deux étapes ?

1: $pwd= mysql_real_escape_string($_POST['pwd']);
2: $pwd = md5($pwd);

Merci par avance !
 
WRInaute impliqué
Non, sinon ton mot de passe sera erroné.
MD5 retourne une chaîne de caractères ne contenant que des caractères alphanumérique (a-z0-9). Tu n'as donc pas besoin d'utiliser « mysql_real_escape_string ».

PHP:
<span class="syntaxdefault">$pwd </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> md5</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$_POST</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'pwd'</span><span class="syntaxkeyword">]);</span><span class="syntaxdefault"> </span>
 
WRInaute occasionnel
Blount a dit:
Non, sinon ton mot de passe sera erroné.
MD5 retourne une chaîne de caractères ne contenant que des caractères alphanumérique (a-z0-9). Tu n'as donc pas besoin d'utiliser « mysql_real_escape_string ».

PHP:
<span class="syntaxdefault">$pwd </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> md5</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$_POST</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'pwd'</span><span class="syntaxkeyword">]);</span><span class="syntaxdefault"> </span>

Je te remercie :wink:
 
WRInaute passionné
Blount a dit:
@tryan, la configuration « magic_quote » est obselète depuis PHP 5.3.
Pour bien faire, il faut vérifier si la fonction « get_magic_quotes_gpc » existe (je ne sais pas si elle a été supprimée). Si oui, tu vérifies si le serveur est configuré avec les « magic_quote » activées. Tu fais ton strip (slashes, pas tease ;) ) si c'est le cas.
Merci pour tes explications et j'arrête de "pourrir" le poste user2home :wink:
 
WRInaute occasionnel
Rebonjour je relance le sujet, je voudrai savoir comment sécuriser mes pages ( fameuse faille d'include )

J'ai pour le moment ceci

<?php

if (!isset($_GET["page"]))
{
include ("content/content.php");
}
else
{
include ("content/" . $_GET["page"] . ".php ");
if (isset($_POST["id"]))
{
$_SESSION['id'] = $_POST["id"];

}
}
?>
 
WRInaute impliqué
Je pense que la meilleur démarche (en gardant ton système) est de contrôler chaque page. Par exemple, avec la fonction « in_array » :
PHP:
<span class="syntaxdefault"><br />if </span><span class="syntaxkeyword">(!isset(</span><span class="syntaxdefault">$_GET</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"page"</span><span class="syntaxkeyword">])</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">||</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">!</span><span class="syntaxdefault">in_array</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$_GET</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"page"</span><span class="syntaxkeyword">],</span><span class="syntaxdefault"> array</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'login'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'page1'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'page2'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'pageX'</span><span class="syntaxkeyword">)))<br />{<br /></span><span class="syntaxdefault">    include </span><span class="syntaxkeyword">(</span><span class="syntaxstring">"content/content.php"</span><span class="syntaxkeyword">);<br />}<br />else<br />{<br /></span><span class="syntaxdefault">    include </span><span class="syntaxkeyword">(</span><span class="syntaxstring">"content/"</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">.</span><span class="syntaxdefault"> $_GET</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"page"</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">.</span><span class="syntaxdefault"> </span><span class="syntaxstring">".php "</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">    if </span><span class="syntaxkeyword">(isset(</span><span class="syntaxdefault">$_POST</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"id"</span><span class="syntaxkeyword">]))<br /></span><span class="syntaxdefault">    </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">        $_SESSION</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'id'</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> $_POST</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"id"</span><span class="syntaxkeyword">];<br /></span><span class="syntaxdefault">    </span><span class="syntaxkeyword">}<br />}<br /></span><span class="syntaxdefault"> </span>

Il existe d'autre moyen (switch, if, etc.).
 
WRInaute passionné
Et un simple file_exists ne serait pas plus simple/rapide ?
Code:
if(file_exists("content/content.php")){
include ("content/content.php");
}
 
WRInaute impliqué
Bah non. Tu ne sécurises pas.

Si nous prenons exemple avec l'arborescence suivante :
admin / index.php
admin / pages/ membres.php

content / content.php
content / login.php

index.php

Page demandée : index.php?page=login
Tu as : file_exists("content/login.php")
OK, pas de souci.

Page demandée : index.php?page=../admin/pages/membres
Tu as : file_exists("content/../admin/pages/membres.php")
Et là, BOOM. Tu inclus la page de la liste des membres.

Avec cette technique, tu te retrouves à inclure tout et n'importe quoi.

Un autre truc, un peu plus marrant :
Page demandée : index.php?page=../index
Tu as : file_exists("content/../index.php")
Si rien ne provoque d'erreur, tu te retrouves avec une belle boucle infinie …
 
WRInaute passionné
avec un switch case c'est pas mal car tu définis bien ce que tu veux :
PHP:
<span class="syntaxdefault"><br /></span><span class="syntaxkeyword">if&nbsp;(isset(</span><span class="syntaxdefault">$_GET</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'page'</span><span class="syntaxkeyword">]))&nbsp;{<br />&nbsp;</span><span class="syntaxdefault">$page&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">trim</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$_GET</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'page'</span><span class="syntaxkeyword">]);<br />}&nbsp;else&nbsp;{<br />&nbsp;</span><span class="syntaxdefault">$page&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxstring">'index'</span><span class="syntaxkeyword">;<br />}<br />switch&nbsp;(</span><span class="syntaxdefault">$page</span><span class="syntaxkeyword">)&nbsp;{<br />&nbsp;case&nbsp;</span><span class="syntaxstring">'index'</span><span class="syntaxkeyword">:&nbsp;require_once(</span><span class="syntaxstring">'ta_page.php'</span><span class="syntaxkeyword">);<br />&nbsp;break;<br />&nbsp;case&nbsp;</span><span class="syntaxstring">'login'</span><span class="syntaxkeyword">:&nbsp;require_once(</span><span class="syntaxstring">'login.php'</span><span class="syntaxkeyword">);<br />&nbsp;default:&nbsp;require_once(</span><span class="syntaxstring">'index.php'</span><span class="syntaxkeyword">);<br />}&nbsp;</span><span class="syntaxdefault"></span>
Avec ça tu peux pas sortir des clous car tu "déclares" tes pages.
 
WRInaute passionné
@Blount : Meacoulpa .. je ne sais pas ou j'avais la tête quand j'ai sortit cette ânerie ^^ puisque $_GET["page"] peut être n'importe quoi .. tient je vais allé faire du sport moi, ça m'évitera de dire des conneries :)!
 
WRInaute occasionnel
Blount a dit:
Je pense que la meilleur démarche (en gardant ton système) est de contrôler chaque page. Par exemple, avec la fonction « in_array » :
PHP:
<span class="syntaxdefault"><br />if </span><span class="syntaxkeyword">(!isset(</span><span class="syntaxdefault">$_GET</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"page"</span><span class="syntaxkeyword">])</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">||</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">!</span><span class="syntaxdefault">in_array</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$_GET</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"page"</span><span class="syntaxkeyword">],</span><span class="syntaxdefault"> array</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'login'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'page1'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'page2'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'pageX'</span><span class="syntaxkeyword">)))<br />{<br /></span><span class="syntaxdefault">    include </span><span class="syntaxkeyword">(</span><span class="syntaxstring">"content/content.php"</span><span class="syntaxkeyword">);<br />}<br />else<br />{<br /></span><span class="syntaxdefault">    include </span><span class="syntaxkeyword">(</span><span class="syntaxstring">"content/"</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">.</span><span class="syntaxdefault"> $_GET</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"page"</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">.</span><span class="syntaxdefault"> </span><span class="syntaxstring">".php "</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">    if </span><span class="syntaxkeyword">(isset(</span><span class="syntaxdefault">$_POST</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"id"</span><span class="syntaxkeyword">]))<br /></span><span class="syntaxdefault">    </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">        $_SESSION</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'id'</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> $_POST</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"id"</span><span class="syntaxkeyword">];<br /></span><span class="syntaxdefault">    </span><span class="syntaxkeyword">}<br />}<br /></span><span class="syntaxdefault"> </span>

Je te remercie je vais étudier ca :wink:

Il existe d'autre moyen (switch, if, etc.).
 
Discussions similaires
Haut