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 :

Variable de session non rafraîchie


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 16
    Points : 10
    Points
    10
    Par défaut Variable de session non rafraîchie
    Bonjour à tous.

    J'ai un problème avec une variable de session. Je vais essayer de vous expliquer la situation précisément, sans que ce soit trop lourd non plus....

    Je suis en train de réaliser une application qui permet le dépôt de fichier, selon un certain quota.

    Cette application fonctionne de la façon suivante :
    Un fichier index.php inclut un fichier upload.php.
    Ce fichier upload.php inclut lui-même un fichier calcul_quota.php qui calcule la taille disponible ( partir des données stockées dans une base de données). calcul_quota.php stocke cette tailel disponible dans une variable de session $_SESSION[taille_max]. Voici le code de mon calcul_quota.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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
     
    <?php session_start();
    require_once('inc/config.inc.php');
    $proprietaire=$_SESSION['proprietaire'];
    $statut=$_SESSION['statut'];
     
     
    //Récupération espace occupé
    $sql = "select SUM(taille) as taille_utilisee from Fichiers where proprietaire='".$proprietaire."'";
    $query = $bdd->query($sql);
    $result=$query->fetchAll();
    /*echo "<pre>";
    print_r($result);
    echo "</pre>";*/
    $_SESSION[taille_utilisee]=$result[0][taille_utilisee];
    //echo "taille utilisee ".$_SESSION[taille_utilisee]."<br>";
     
     
     
    //Récupération quota
    $sql = "select quota from Droits where statut='".$proprietaire."'";
    $query = $bdd->query($sql);
    $result=$query->fetchAll();
    /*echo "<pre>";
    print_r($result);
    echo "</pre>";*/
    if (count($result)==1) $_SESSION['quota']=$result[0][quota];
    else
    {
    $sql = "select quota from Droits where statut='".$statut."'";
    $query = $bdd->query($sql);
    $result=$query->fetchAll();
    $_SESSION['quota']=$result[0][quota];
    }
    //echo "Quota :".$_SESSION[quota]."<br>";
     
    $_SESSION[espace_disponible]=$_SESSION[quota]-$_SESSION[taille_utilisee];
    $_SESSION[pourc_occ]=100*$_SESSION[taille_utilisee]/$_SESSION[quota];
    //echo "pourcentage :".$_SESSION[pourc_occ];
    $_SESSION[pourc_occ]=round($_SESSION[pourc_occ]);
    $_SESSION[taille_max]=min($_SESSION[espace_disponible],$max_upload_size);
    ?>
    Le fichier upload.php permet ensuite de déposer un fichier, via un formulaire de type <form action=$_PHP[self] method=POST>. Ce formulaire utilise la variable $_SESSION[taille_max] pour limiter la taille du fichier qui peut être déposé. Voici le code.

    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
    31
    32
    33
    34
     
     
    //Formulaire de choix du fichier
    echo "<p> 
            <form method=\"post\" ENCTYPE=\"multipart/form-data\" action=\"".$_PHP['SELF']."\">".
    	 "<p>".$upload_file_choice_message.": 
                <input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"".$_SESSION[taille_max]."\" />
     
    	 <input type=\"file\" name=\"fichier\" lang=\"fr\" /></p>".
     
    	"<p>".$upload_start_date."
    	   <input name=\"date_debut\"><br>
    	<i>".$upload_start_date_default_message."</i></p>".
     
    	"<p>".$upload_stop_date. "
    	    <input name=\"date_fin\"/><br>
    	<b>".$or."</b>"
            .$upload_duration."  
    	<select name=\"duree\">";
    for ($i=1;$i<=15;$i++) 
    {
    echo "<option value=\"".$i."\"";
    if ($i==7) echo " \"selected\"";
    echo "\">".$i;
    }
    echo "</select>";
    echo "<br><i>".$upload_duration_default."</i>";
    echo "</p>";
    echo "	<p>  
    	<input type=\"hidden\" name=\"jeton\" value=\"1\">	
              <input type=\"submit\" value=\"".$upload_submit_label."\" />
            </form>
    </p>
    ";
    (le code précédent se trouve donc dans upload.php)

    Il me semble que lorsqu'on valide le formulaire, upload.php est rechargé, non ? A ce moment là, le script calcul_quota.php devrait lui-même être rechargé, et le calcul de quota devrait se faire.

    Mon problème, c'est que ça ne se passe pas bien. Plus précisément, la variable de session $_SESSION[taille_max] contient la taille maximum A L'ETAPE PRECEDENTE.
    Autrement dit, lorsque je dépose un nouveau fichier, la taille maximum qui apparaît est en fait celle qui était disponible avant. Il faut que je recharge la page pour avoir la bonne taille. Autrement dit encore, lorsque je dépose n fichiers, j'ai la taille maximum correspondant aux n-1 premiers fichiers, ce qui est assez gênant....

    Voilà. Je ne vosi pas où est l'erreur. Quelqu'un aurait-il la gentillesse de me proposer une explication, voire même une solution ?

    Merci beaucoup d'avance

  2. #2
    Membre expérimenté Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Points : 1 311
    Points
    1 311
    Par défaut
    Salut
    Est ce que la valeur stockée dans la base de données est à jour?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Oui.
    Je précise aussi que si je fais rafraîchir la page, ma variable $_SESSION[taille_max] prend la bonne valeur.

  4. #4
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    On est bien d'accord que tu fais l'include de calcul_quota.php avant d'afficher ton formulaire comme tu nous le montres ? Est-ce normal que ce soit $_SESSION[taille_max] avec taille_max sans guillemets ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par _Mac_ Voir le message
    On est bien d'accord que tu fais l'include de calcul_quota.php avant d'afficher ton formulaire comme tu nous le montres ?
    Oui oui c'est bien ça.

    Est-ce normal que ce soit $_SESSION[taille_max] avec taille_max sans guillemets ?
    J'ai tenté de les rajouter, mais ça ne change rien....

  6. #6
    Expert éminent
    Avatar de 12monkeys
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2006
    Messages : 4 093
    Points : 9 031
    Points
    9 031
    Par défaut
    Bonjour

    As tu essayé de mettre un header au début de ton fichier index.php qui interdise à cette page de se mettre en cache ?

    J'ai eu le même souci avec la connexion à une zone membres, je me connectais sur une page et quand je passais sur une autre page (où j'étais allé avant de me connecter) cette dernière m'affichait que je n'était pas connecté... En actualisant la page tout était en ordre...

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 100
    Points : 100
    Points
    100
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php header("Location:index.php"); ?>
    permet de raffraichir la page automatiquement et d'interpréter les variables $_SESSION

    c'est un "truc", certainement pas la meilleure solution, le problème vient du fait que le php est déjà exécuté lorsque tu veux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php if (isset($_SESSION['exemple'])) echo $_SESSION['exemple']; ?>

Discussions similaires

  1. Réponses: 27
    Dernier message: 16/04/2013, 12h09
  2. Variable de session non définie
    Par rimbaut dans le forum Langage
    Réponses: 3
    Dernier message: 16/05/2010, 11h49
  3. variable de Session non trouvée
    Par reman dans le forum Langage
    Réponses: 6
    Dernier message: 07/01/2009, 11h25
  4. Variable de sessions non transférées
    Par MaT$oN dans le forum Langage
    Réponses: 3
    Dernier message: 27/06/2008, 15h04
  5. Variables de sessions non transmises en local
    Par cerveza dans le forum Langage
    Réponses: 5
    Dernier message: 31/12/2007, 22h34

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