IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

L'include doit rester dans le même cadre


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 36
    Points : 13
    Points
    13
    Par défaut L'include doit rester dans le même cadre
    Salut tout le monde,
    j'ai actuellement un petit problème d'include en php.
    J'ai mon design, prévu avec certains blocs, et il y a un bloc pour l'identification.
    J'inclus donc mon fichier pour se logguer, tout se passe bien, mais lorsque l'on clique sur le bouton pour se logguer, la page qui suit et qui contient la vérification des identifiants ainsi qu'un petit message de bienvenu ne s'inclut pas dans mon cadre, mais ouvre en fait une nouvelle page :sweat:

    J'aimerai donc que mon message de bienvenu reste dans le cadre prévu à cette effet sans ouvrir une nouvelle page, sachant que ma structure ressemble grosso-modo à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    <?php
     
    session_start();
    require('admin/includes/config.inc.php');
     
    ?>
     
    <body>
    			<div id="ident">
     
    			<h2 id="ident"></h2>
     
    				<?php include('membres/index.php'); ?>
     
    			</div>	
     
     
    			<div id="body">
    				 <?
    if(isset($_GET["page"]) && file_exists($_GET["rub"]."/".$_GET["page"] .".php"))
    {
    include dirname(__FILE__)."/".$_GET['rub']."/".$_GET['page'].".php";
    }
    else {
    include dirname(__FILE__)."/home.php";
    }
    ?>
    </div>
     
    </body>
    Et tou ce qui doit toujours rester dans le cadre est l'include tout basique située dans le bloc "ident".

    Voilà, merci d'avance

  2. #2
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    Bonjour,

    Je vais te proposer deux solutions.

    Première :

    Quand l'utilisateur s'identifie, on est envoyé vers la page de véification via le formulaire de l'include login. Si le login est valide, alors on met une variable de session à 1 ( par ex : $_SESSION['LOGIN_OK'] = 1; ). Puis on renvoi vers la page d'accueil. Maintenant, voilà l'astuce.
    Quand tu affiches le bloc de login, il suffit de faire un test pour savoir si la personne est identifiée ( $_SESSION['LOGIN_OK'] == 1 ) ou non
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <div id="ident">
    <h2 id="ident"></h2>
    <?php 
    if ($_SESSION['LOGIN_OK'] == 1 ) echo 'Bienvenue ...';
    else require_once 'membres/index.php';
    ?>
    </div>
    Ma deuxième proposition est de faire l'identification à la mode "Web 2.0". C'est à dire que le bloc contient un formulaire que l'on soumettra en Ajax. Si l'identification se déroule correctement on modifiera le contenu du div ident via le javascript ( DOM )

    PS : Je viens de regarder ton script et je te conseille de faire très attention car tu peux avoir un comportement non désiré si l'utilisateur modifie les variables rub et page.

    Bonne soirée
    Pierre
    1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
    2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
    3. Un code rapide c'est bien, un code maintenable c'est mieux
    ...

    Why was the font tag an orphan ? Because it didn't have a font-family.

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 36
    Points : 13
    Points
    13
    Par défaut
    Salut,
    merci pour ta réponse, je vais opter pour la première solution vu que je n'y connais rien en javascript et qu'avec php c'est très facile.

    Par contre, je croyais que mon script d'include n'avait pas de faille, les fichiers était vérifié directement sur le serveur pour savoir s'ils y sont et le dirname faisant le reste .

    Peux tu m'en dire plus s'il te plait ?

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par koskoz
    Par contre, je croyais que mon script d'include n'avait pas de faille, les fichiers était vérifié directement sur le serveur pour savoir s'ils y sont et le dirname faisant le reste .
    tu testes uniquement si le fichier existe avant de l'inclure, ça évite juste une erreur si le fichier n'existe pas
    si par exemple $_GET['rub'] contient "../../../etc/" le visiteur pourra voir tous les fichiers PHP qui sont dans le repertoire "etc" par exemple
    pour éviter ça je vois deux possibilités :
    - soit tu vérifie que $_GET['rub'] et $_GET['page'] ne contiennent ni ".." ni "/"
    - soit tu vérifie que $_GET['rub'] fait partie des répertoires autorisés (avec "in_array" par exemple) et ensuite tu vérifie que le fichier $_GET['page'] se trouve bien dans le repertoire mais pas avec file_exist. tu devra lire tout le répertoire et ensuite vérifier que le fichier est dans la liste

  5. #5
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 36
    Points : 13
    Points
    13
    Par défaut
    Salut,
    pour l'instant j'ai ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    $rep = array ("membres");
     
    if(isset($_GET["page"]) && file_exists($_GET["rub"]."/".$_GET["page"] .".php") && in_array ($_GET["rub"], $rep))
    {
    include dirname(__FILE__)."/".$_GET['rub']."/".$_GET['page'].".php";
    }
    else {
    include dirname(__FILE__)."/home.php";
    }
    ?>
    Mais quel est l'interêt de parcourir tout le dossier si il vérifie directement si le fichier existe ?

  6. #6
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par koskoz
    Mais quel est l'interêt de parcourir tout le dossier si il vérifie directement si le fichier existe ?
    parce que là avec le test que tu as rajouté on peut faire $_GET['rub'] = 'membres' et $_GET['page'] = '../../../etc/fichier' et le visiteur voit le fichier "/etc/fichier.php"

  7. #7
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 36
    Points : 13
    Points
    13
    Par défaut
    Merci de ta réponse, je vais essayer de la mettre en oeuvre .

    Pour revenir au sujet initial, j'ai changé pour faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    			<?php
    			echo $_SESSION['test'];
    			//$_SESSION['auth'] = true;
    if (!empty($_SESSION['auth'])) {
    echo "Bonjour <a href=\"membres/edit.php?id=".$select2['id']."\">".$_SESSION['pseudo']."</a>,<br />";
    }
    else {
    include(dirname(__FILE__).'/membres/index.php'); 
    }
    ?>
    Et mon fichier verif_connec.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <?php
    require('../admin/includes/config.inc.php');
    //$_SESSION['auth'] = false;
     
    $nick = trim($_POST['pseudo']);
    $pass = md5(trim($_POST['pass']));
     
    mysql_connect(HOSTNAME, USERNAME, PWD);
    mysql_select_db(DBNAME);
     
    $select = mysql_query("SELECT * FROM membres WHERE pseudo='".mysql_real_escape_string($nick)."' AND pass='".mysql_real_escape_string($pass)."'") or die(mysql_error());
    $select2 = mysql_fetch_array($select);
     
    if($select2) {
     
    session_start();	
    $_SESSION['pseudo'] = $nick;
    $_SESSION['auth'] = true;
    $_SESSION['test'] = "test";
     
    header("Location: ../index.php");
    }
    else {
    ?>
    Mauvais pseudo ou mot de passe.
    <?php
    }
    mysql_close();
    ?>
    Mais j'ai toujours un gros soucis :
    lorsque je me logue et que je tape un mauvais identifiant ou/et mot de passe, j'ai le droit au message d'erreur comme quoi ce n'est pas bon, et je reste sur la page blanche.

    Jusque là, pas de soucis, mais lorsque je rentre un bon identifiant et mdp, je suis renvoyé vers l'index mais le formulaire est toujours présent.

    En fait, j'ai l'impression qu'il n'y a aucune variable qui passe dans la session, puisque même la variable "test" ne saffiche pas...

  8. #8
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    Il ne faut pas oublier de faire le session_start() sur la page d'index bien evidemment
    Pierre
    1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
    2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
    3. Un code rapide c'est bien, un code maintenable c'est mieux
    ...

    Why was the font tag an orphan ? Because it didn't have a font-family.

  9. #9
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    .....Je dirais même plus : session_start() dans ta page index, mais aussi dans TOUTE page dans lesquelles tu utiliseras les variables de sessions !!!!

    (ne pas oublier : session_start() en tête de fichier, sans aucune instructions de sorties avant !!!)
    Veni Vidi Vici
    -------------------------
    Mes articles : developpez.com ou bien vbview.net
    -------------------------
    Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
    Et aussi : --> pear_manual_fr.chm!!!

    Ou encore : --> Les tutoriaux & cours PHP de Développez.com
    -------------------------

Discussions similaires

  1. rester dans la même cellule si mon test n'est pas bon
    Par johnrando dans le forum Access
    Réponses: 3
    Dernier message: 12/05/2015, 03h18
  2. rester dans la même ligne après le rechargement du datagrid
    Par zoro007 dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 14/03/2014, 11h24
  3. Rester dans le même MDI de l'application
    Par tunis71187 dans le forum Forms
    Réponses: 8
    Dernier message: 09/12/2010, 11h57
  4. Lire différent swf dans le même cadre
    Par enrico83600 dans le forum Débuter
    Réponses: 2
    Dernier message: 16/05/2010, 18h19
  5. [HTTP] Rester dans la même session après envoi du login
    Par lazare dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 06/07/2007, 08h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo