Gros problème de session

Gros problème de session - PHP - Programmation

Marsh Posté le 10-12-2008 à 17:50:17    

Bonsoir,

 

Je lutte depuis plusieurs heures sur un problème.

 

Voici le contexte:
- je possède une variable $var
- je défini $_SESSION["$var"]
- j'affiche le tableau des variables session via print_r($_SESSION)
- il me trouve bien ma variable session
- mais elle n'est pas écrite dans le fichier de session de PHP, donc perdue en changeant de page.

 

Le problème semble venir de $_SESSION["$var"] car quand je le retire, mes $_SESSION["nomtoutbête"] sont bien inscrites dans le fichier session et conservées sur toutes les pages...

 

Savez vous comment je peux résoudre ça ?

 

Merci !

 

Voici mon code:

<?php
if (!isset($_SESSION)) { session_start(); }
include("admin/inc/config.inc" );
echo session_id();
print_r($_SESSION) ?>

 

<form action="qcm_valid.php" method="post">
<?php

 

mysql_select_db($database, $db);

 

$query = "SELECT titre FROM `qcm_titre` WHERE `id` = '$_GET[qcm]'";
$result = mysql_query($query) or die ("Erreur:".mysql_error().$query);
while ($row=mysql_fetch_array($result)) {
$titreqcm = $row["titre"];

 

echo "$titreqcm<br><br>";

 

}

 


$query2 = "SELECT id,titre FROM `qcm_ques` WHERE `idqcm` = '$_GET[qcm]' ORDER by id";
$result2 = mysql_query($query2) or die ("Erreur:".mysql_error().$query2);
while ($row2=mysql_fetch_array($result2)) {
$quesid = $row2["id"];
$titreques = $row2["titre"];

 

echo "<br>$titreques<br>";

 

$query3 = "SELECT id,titre,correction FROM `qcm_rep` WHERE `idques` = '$quesid' ORDER by titre ASC";
$result3 = mysql_query($query3) or die ("Erreur:".mysql_error().$query3);
while ($row3=mysql_fetch_array($result3)) {
$repid = $row3["id"];
$titrerep = $row3["titre"];
$correction = $row3["correction"];

 

if ($titrerep != "" ) {
  echo "<input type='checkbox' name='$repid' value='V'>$titrerep<br>";
  if(isset($_SESSION["$repid"]) && $_SESSION["$repid"] == "0" ) { echo "<b>$correction</b><br><br>"; } elseif(isset($_SESSION["$repid"]) && $_SESSION["$repid"] == "1" ) { echo "<b>:)</b><br><br>"; }
}

 

}
}

 


if(isset($_SESSION['note'])) { echo "<br><br><br>$_SESSION[note]"; }
?>

 

<input type="hidden" name="qcmid" value="<?php echo "$_GET[qcm]"; ?>">
<input type="submit" value="Modifier !">&nbsp;&nbsp;&nbsp;<input type="reset" value="Recommencer !">
</form>

 

<?php

 

if (!isset($_SESSION)) { session_start(); }
include("admin/inc/config.inc" );
include("admin/inc/fct.inc" );
mysql_select_db($database, $db);
$note = 0;

 


$query = "SELECT id FROM `qcm_ques` WHERE `idqcm` = '$_POST[qcmid]' ORDER by id";
$result = mysql_query($query) or die ("Erreur:".mysql_error().$query);
while ($row=mysql_fetch_array($result)) {
$quesid = $row["id"];

 


$query2 = "SELECT id,truefalse,point FROM `qcm_rep` WHERE `idques` = '$quesid' ORDER by id ASC";
$result2 = mysql_query($query2) or die ("Erreur:".mysql_error().$query2);
while ($row=mysql_fetch_array($result2)) {
$repid = $row["id"];
$truefalse = $row["truefalse"];
$points = $row["point"];

 

if(isset($_POST[$repid])) {

 

if($_POST[$repid] == $truefalse) {
   $note = $points + $note;
   $_SESSION["$repid"] = 1;
}

 

} else {
//$_SESSION["$repid"] = 0;
}
}
}

 

$_SESSION['note'] = $note;

 


//header("Location: qcm_index.php?qcm=$_POST[qcmid]" );
echo session_id();
print_r($_SESSION)

 

?>

Message cité 1 fois
Message édité par Tokuna le 10-12-2008 à 17:53:17
Reply

Marsh Posté le 10-12-2008 à 17:50:17   

Reply

Marsh Posté le 10-12-2008 à 17:59:00    

Citation :

if(isset($_SESSION["$repid"]) && $_SESSION["$repid"] == "0" )


Dis moi si j'ai bien compris.
Quand $repid = 0 tu veux tester $_SESSION[0]
Quand $repid = 1 tu veux tester $_SESSION[1]
Quand $repid = 'du texte' tu veux tester $_SESSION['du texte']
 
 
C'est bien ça ou t'as un énorme bug dans ton code?

Reply

Marsh Posté le 10-12-2008 à 18:03:52    

Non en fait:
$repid est l'id d'un enregistrement mysql.
Je veux donc avec une variable session unique ayant pour nom cet ID.

 

A partir de là, je veux que ma variable session ayant pour nom $repid ait la valeur 1 ou 0 en fonction d'une condition.

 

Et si c'est 0 j'affiche un truc, et si c'est 1 j'affiche un autre ^^

 

C'est plus clair ?


Message édité par Tokuna le 10-12-2008 à 18:04:32
Reply

Marsh Posté le 10-12-2008 à 18:38:26    

oui... mais tes guillemets ne servent à rien :

Code :
  1. $_SESSION["$repid"] == $_SESSION[$repid]


Message édité par Profil supprimé le 10-12-2008 à 18:38:42
Reply

Marsh Posté le 10-12-2008 à 19:48:09    

Mais même si je retire les guillemets, il ne m'enregistre pas ma variable session, c'est bien là mon problème ^^

Reply

Marsh Posté le 11-12-2008 à 08:22:24    

Je vais corriger ça et voir si ça résout mon soucis, merci :)
 
(pour les include je ne savais pas, pour les injections je n'ai justep as finalisé le code, j'ai la fonction add() qui s'en occupe, pour les jointures je vais regarder, merci)
 
(et je n'ai pas trouvé la balise code sur le forum, ce qui explique le manque de couleur ^^)

Reply

Marsh Posté le 11-12-2008 à 16:08:10    

moi j'aurai juste dis qu'il avait oublier le session_start() au debut du fichier


---------------
Recette cookeo Recette de cuisine
Reply

Marsh Posté le 11-12-2008 à 16:10:22    

ionik a écrit :

moi j'aurai juste dis qu'il avait oublier le session_start() au debut du fichier


Il l'aurait vu, parce que $_SESSION n'aurait pas été définit (si e_notice)

Reply

Marsh Posté le 11-12-2008 à 16:20:13    

ionik a écrit :

moi j'aurai juste dis qu'il avait oublier le session_start() au debut du fichier

Si tu regardes le code qu'il a posté, il y a bien le session_start à chaque fois.

Reply

Marsh Posté le 11-12-2008 à 18:16:54    

Ca ne vient pas du session start ^^
 
Juste du fait que mes variables du type $_SESSION[$var] = 1; ne sont pas enregistrées dans le fichier de session et ne passe donc pas entre les pages ^^
Et que je ne comprends pas pourquoi... ^^

Reply

Marsh Posté le 11-12-2008 à 18:16:54   

Reply

Marsh Posté le 11-12-2008 à 18:25:36    

Je me demande si c'est pas simplement par ce que t'utilise des indices numérique. Préfixe les ou fait un tableau dans le tableau de session ($_SESSION["montab"][$machin]=...) et vérifie si ça passe.
 
En fait, ça me semble logique qu'on ne puisse pas mettre d'indice purement numérique. Les variables de session existent dans toutes les pages et c'est pas avec des indices du genre "0", "1" ou "3.14" qu'on saura ce que la case est censé contenir.
 
PS : En affichant toutes les erreurs, notices, etc, j'ai droit à un "PHP Notice:  Unknown: Skipping numeric key 1 in Unknown on line 0" quand je tente un indice purement numérique ce qui semble confirmer ce comportement.

Reply

Marsh Posté le 11-12-2008 à 19:04:31    

Merci....
 
Moi qui pensais que easyphp m'affichait toutes les erreurs!
 
Entre ça et la correction de Nazz, le code devrait bien tourner.
 
Merci à tous !

Reply

Marsh Posté le 11-12-2008 à 20:53:27    

Vérifie dans ton php.ini que les erreurs sont bien en E_ALL, et que dans tes scripts y'a pas d'error_reporting() qui modifie ça

Reply

Marsh Posté le 11-12-2008 à 21:10:02    

Je n'ai rien de particulier dans mes scripts (je ne connais même pas le error_reporting() ^^)
 
Et pourtant, le php.ini est bien en E_ALL.
 
M'enfin, ce n'est pas trop grave, Easyphp filtre déjà pas mal de truc, et bien plus que les hébergements normaux en général ^^

Reply

Marsh Posté le 11-12-2008 à 21:11:54    

C'est le paradoxe. Alors qu'easyphp est censé fournir un environnement de développement rapidement, y'a plein de trucs qui sont mal configurés [:sadnoir] Et c'est pareil pour WAMP (genre mod_rewrite désactivé par défaut, WTF)

Reply

Marsh Posté le 11-12-2008 à 22:21:01    

Héhé, ne me fusillez pas sur place.
 
Je code justement sous EasyPHP car je trouve qu'il ne cache rien, au contraire de mon hébergeur (ovh pour ne pas le citer).
 
Je ne maitrise pas php aussi bien qu'à l'époque où je prenais des cours, et je n'ai plus vraiment le temps de m'y pencher, donc je compte sur mon environnement de développement pour me souligner mes erreurs.
 
Maintenant oui, si vous avez un php.ini configuré de façon très strict, moi je prends... mais si on ne me dis rien et que l'on me critique je ne risque pas de m'améliorer ;)
 
Ceci dit, je prends ta ligne pour la modifier dans mon php.ini, merci Nazz :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed