Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3001 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Gros problème de session

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Gros problème de session

n°1825114
Tokuna
Posté le 10-12-2008 à 17:50:17  profilanswer
 

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
mood
Publicité
Posté le 10-12-2008 à 17:50:17  profilanswer
 

n°1825119
omega2
Posté le 10-12-2008 à 17:59:00  profilanswer
 

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?

n°1825125
Tokuna
Posté le 10-12-2008 à 18:03:52  profilanswer
 

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
n°1825144
Profil sup​primé
Posté le 10-12-2008 à 18:38:26  answer
 

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
n°1825173
Tokuna
Posté le 10-12-2008 à 19:48:09  profilanswer
 

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

n°1825323
Tokuna
Posté le 11-12-2008 à 08:22:24  profilanswer
 

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 ^^)

n°1825594
ionik
Posté le 11-12-2008 à 16:08:10  profilanswer
 

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


---------------
Recette cookeo Recette de cuisine
n°1825595
FlorentG
Unité de Masse
Posté le 11-12-2008 à 16:10:22  profilanswer
 

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)

n°1825604
omega2
Posté le 11-12-2008 à 16:20:13  profilanswer
 

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.

n°1825723
Tokuna
Posté le 11-12-2008 à 18:16:54  profilanswer
 

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... ^^

mood
Publicité
Posté le 11-12-2008 à 18:16:54  profilanswer
 

n°1825727
omega2
Posté le 11-12-2008 à 18:25:36  profilanswer
 

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.

n°1825742
Tokuna
Posté le 11-12-2008 à 19:04:31  profilanswer
 

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 !

n°1825785
FlorentG
Unité de Masse
Posté le 11-12-2008 à 20:53:27  profilanswer
 

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

n°1825806
Tokuna
Posté le 11-12-2008 à 21:10:02  profilanswer
 

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 ^^

n°1825809
FlorentG
Unité de Masse
Posté le 11-12-2008 à 21:11:54  profilanswer
 

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)

n°1825855
Tokuna
Posté le 11-12-2008 à 22:21:01  profilanswer
 

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 :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Gros problème de session

 

Sujets relatifs
Petit problème avec un hash, des tableaux et des référencesProbleme MySQL
Problème alignement bloc CSS [terminé]Problème d'adition avec js
probleme grammaire linéaire en CProbleme avec pages html et lien sous IE 7
Problème de réels en CProblème affichage applications java
[Résolu] Problème avec propriété floatProblème de tableau
Plus de sujets relatifs à : Gros problème de session


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR