problème de sessions

Eléphant du PHP | 167 Messages

14 juin 2013, 11:06

Bonjour,

J'ai besoin de votre aide.
Voici mon problème, je veux sélectionner depuis ces listes liés des étudiants. Et les garder en session d'où mon code suivant :
<?php
if(isset($_POST['ok']) && isset($_POST['nomEtudiant']) && $_POST['nomEtudiant'] != "")
{
session_start();
$dept_selectionnet = $_POST['nomEtudiant'];
$_SESSION['$dept_selectionne']=$dept_selectionne;
$idEtudiant=$_SESSION['dept_selectionne];
}
?>
Cependant, à chaque fois ça me garde que le dernier sélectionné, moi je veux que ça me garde tout les étudiants que j'ai sélectionné.

Merci de votre aide.
Code complet :
        <?php
echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");
/* Variables de connexion : ajustez ces paramètres selon votre propre environnement */
$serveur = "localhost";
$admin   = "root";
$mdp     = "";
$base    = "etudes";
/* On récupère si elle existe la valeur de la région envoyée par le formulaire */
$idr = isset($_POST['nomEtablissement'])?$_POST['nomEtablissement']:null;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" />
<meta name="keywords" content="" />
<meta http-equiv="imagetoolbar" content="no" />
<meta http-equiv="Pragma" content="no-cache" />
</head>
<body style="font-family: verdana, helvetica, sans-serif; font-size: 85%">
<?php
if(isset($_POST['ok']) && isset($_POST['nomEtudiant']) && $_POST['nomEtudiant'] != "")
{
session_start();
$dept_selectionnet = $_POST['nomEtudiant'];
$_SESSION['$dept_selectionne']=$dept_selectionne;
$idEtudiant=$_SESSION['dept_selectionne];
}
?>
<h3>Trouver un département</h3>
<?php
/* On établit la connexion à MySQL avec mysql_pconnect() plutôt qu'avec mysql_connect()
*  car on aura besoin de la connexion un peu plus loin dans le script */
$connexion = mysql_pconnect($serveur, $admin, $mdp);
if($connexion != false)
{
    $choixbase = mysql_select_db($base, $connexion);
    $sql1 = "SELECT `idEtablissement`, `nomEtablissement`".
    " FROM `etablissement`".
    " ORDER BY `idEtablissement`";
    $rech_etablissements = mysql_query($sql1);
    $code_etablissement = array();
    $etablissement = array();
    /* On active un compteur pour les régions */
    $nb_etablissements = 0;
    if($rech_etablissements != false)
    {
        while($ligne = mysql_fetch_assoc($rech_etablissements))
        {
            array_push($code_etablissement, $ligne['idEtablissement']);
            array_push($etablissement, $ligne['nomEtablissement']);

            /* On incrémente de compteur */
            $nb_etablissements++;
        }
    }
    ?>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgdept">
<fieldset style="border: 3px double #333399">
<legend>Sélectionnez une région</legend>
<select name="etablissement" id="etablissement" onchange="document.forms['chgdept'].submit();">
  <option value="-1">- - - Choisissez une région - - -</option>
    <?php
    for($i = 0; $i < $nb_etablissements; $i++)
    {
?>
  <option value="<?php echo($code_etablissement[$i]); ?>"<?php echo((isset($idr) && $idr == $code_etablissement[$i])?" selected=\"selected\"":null); ?>><?php echo($etablissement[$i]); ?></option>
<?php
    }
    ?>
</select>
    <?php
    mysql_free_result($rech_etablissements);
    /* On commence par vérifier si on a envoyé un numéro de région et le cas échéant s'il est différent de -1 */

    if(isset($idr) && $idr != -1)
    {
        /* Cération de la requête pour avoir les départements de cette région */
        $sql2 = "SELECT `idEtudiant`, `nomEtudiant`".
        " FROM `etudiant`".
        " WHERE `idEtablissement` = ". $idr ."".
        " ORDER BY `idEtudiant`;";
        if($connexion != false)
        {
            $rech_dept = mysql_query($sql2, $connexion);
            /* Un petit compteur pour les départements */
            $nd = 0;
            /* On crée deux tableaux pour les numéros et les noms des départements */
            $code_dept = array();
            $nom_dept = array();
            /* On va mettre les numéros et noms des départements dans les deux tableaux */
            while($ligne_dept = mysql_fetch_assoc($rech_dept))
            {
                array_push($code_dept, $ligne_dept['idEtudiant']);
                array_push($nom_dept, $ligne_dept['nomEtudiant']);
                $nd++;
            }
            /* Maintenant on peut construire la liste déroulante */
            ?>
<select name="etudiant" id="etudiant">
            <?php  
            for($d = 0; $d<$nd; $d++)
            {
                ?>
  <option value="<?php echo($code_dept[$d]); ?>"<?php echo((isset($dept_selectionne) && $dept_selectionne == $code_dept[$d])?" selected=\"selected\"":null); ?>><?php echo($nom_dept[$d]); ?></option>
                <?php
            }
?>
</select>
<?php
        }
        /* Un petit coup de balai */
        mysql_free_result($rech_dept);
    }
?>
<br /><input type="submit" name="ok" id="ok" value="Envoyer" />
</fieldset>
</form>
<?php
    /* Terminé, on ferme la connexion */
    mysql_close($connexion);
}
else
{
    /* Si on arrive là, c'est pas bon signe, il faut vérifier les
    * paramètres de connexion, mot de passe, serveur pas démarré etc... */
?>
<p>Un incident s'est produit lors de la connexion à la base de données, veuillez essayer à nouveau ultérieurement.</p>
<?php
}
?>
</body>
</html>
       
        
Modifié en dernier par NUAGE le 14 juin 2013, 11:11, modifié 1 fois.

Eléphant du PHP | 160 Messages

14 juin 2013, 11:10

Bonjour,

S'il te plait avant tout édite ton message et ferme la balise par [/php] tout en bas ^^' (enfin avant de te faire engueuler lol)

Se sera plus lisible ;)

Eléphant du PHP | 167 Messages

14 juin 2013, 11:13

Re,

C'est fait, merci :)

Eléphant du PHP | 160 Messages

14 juin 2013, 11:18

Re,

:)

Bon alors, je ne sais pas si ça vient de ça, mais j'ai lu il y a peut que le session_start() dois se trouver avant tout affichage (Cf : ici) est ce que c'est bien le cas ?

Eléphant du PHP | 167 Messages

14 juin 2013, 11:30

Re,

Je viens de modifier en conséquence mais encore une fois je n'ai que l'id d'un étudiant.

Mammouth du PHP | 2278 Messages

14 juin 2013, 11:32

Ce ne serait pas déjà une histoire de
<select multiple ...>
?
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 167 Messages

14 juin 2013, 11:39

Re,

Non, il s'agit deux listes qui sont liées et je sélectionne un étudiant depuis la première liste.

Eléphant du PHP | 160 Messages

14 juin 2013, 11:46

Et bien, je dois avouer que je ne vois pas là...

Désolé.

Si quelqu'un d'autre peut aider :)

Mammouth du PHP | 1967 Messages

14 juin 2013, 16:38

tu en selectionne un à chaque validation de formulaire non ?

tu lie tes listes via php ou javascript ?

Si php, tu dois ajouter tes étudiants dans un tableau pour le moment tu écrase chaque fois l'étudiant précédent
<?php
if(isset($_POST['ok']) && isset($_POST['nomEtudiant']) && $_POST['nomEtudiant'] != "")
{
session_start();
$dept_selectionne = $_POST['nomEtudiant'];
if (!isset($_SESSION['dept_selectionne'])) $_SESSION['dept_selectionne']=array();
$_SESSION['dept_selectionne'][]=$dept_selectionne;
$idEtudiant=$_SESSION['dept_selectionne'];//Ici tu récupère tout le tableau, pas seulement le dernier ajouté
}
?>
j'ai retiré les $ dans le nom de ton index de session, je pense que cela peut fonctionner avec, mais risque de faire confusion avec une variable. De plus tu ne l'avais pas mis partout
un simple quote manquait aussi à ta dernière ligne

J'ai supposé que tu n'essayais pas de placer tes étudiants dans une variable de session avec comme index le departement selectionné mais bien la chaine 'det_selectionne'
Si ce n'est pas le cas utilise plutot ce code
<?php
if(isset($_POST['ok']) && isset($_POST['nomEtudiant']) && $_POST['nomEtudiant'] != "")
{
session_start();
$dept_selectionne = $_POST['nomEtudiant'];
$_SESSION[$dept_selectionne]=$dept_selectionne;
$idEtudiant=$_SESSION[$dept_selectionne];//Ici tu récupère tout le tableau, pas seulement le dernier ajouté
}
?>
Si ta liaison de select est par javascript je vois pas ou il est ton script donc je penche pour ma première hypothèse
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphant du PHP | 167 Messages

14 juin 2013, 16:59

Re,

Merci d'avoir répondu.
Je fais tout en PHP, tu peux voir le code complet dans mon premier post.

Avec ce code :
<?php
if(isset($_POST['ok']) && isset($_POST['nomEtudiant']) && $_POST['nomEtudiant'] != "")
{
session_start();
$dept_selectionne = $_POST['nomEtudiant'];
if (!isset($_SESSION['dept_selectionne'])) $_SESSION['dept_selectionne']=array();
$_SESSION['dept_selectionne'][]=$dept_selectionne;
$idEtudiant=$_SESSION['dept_selectionne'];//Ici tu récupère tout le tableau, pas seulement le dernier ajouté
}
?>
J'ai eu cette erreur : Fatal error: [] operator not supported for strings in C

Avec celui-là
<?php
if(isset($_POST['ok']) && isset($_POST['nomEtudiant']) && $_POST['nomEtudiant'] != "")
{
session_start();
$dept_selectionne = $_POST['nomEtudiant'];
$_SESSION[$dept_selectionne]=$dept_selectionne;
$idEtudiant=$_SESSION[$dept_selectionne];//Ici tu récupère tout le tableau, pas seulement le dernier ajouté
}
?>
J'ai eu à chaque fois que je choisi un étudiant ceci : Notice: Unknown: Skipping numeric key 8 in Unknown on line 0

Mammouth du PHP | 1967 Messages

17 juin 2013, 14:23

L'erreur du premier code vient du fait que tu avais dèjà une session, tu devrais le réexécuter après quelques jours ou après avoir visiter une page contenant
session_start();
session_destroy();
le 2ème code me semble beaucoup moins probable.

Le tout est de savoir ce que tu veux faire avec tous les données récoltées, tu rempli ta session, mais tu ne l'utilise jamais.

Normalement depuis une session vide le code proposé devrait fonctionner
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphant du PHP | 167 Messages

17 juin 2013, 14:49

Re,

Merci de me répondre.
Je choisis les étudiants (en les gardant en sessions) pour pouvoir après les inscrire à une formation.

Eléphant du PHP | 167 Messages

18 juin 2013, 09:52

Bonjour,

J'ai toujours le même problème, je n'arrive pas à garder en sessions plusieurs entrées. Quelqu'un peut-il m'aider ?