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
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
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 code précédent se trouve donc dans upload.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 //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> ";
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
Partager