Page 1 sur 1

problème de sessions

Posté : 14 juin 2013, 11:06
par NUAGE
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>
       
        

Re: problème de sessions

Posté : 14 juin 2013, 11:10
par Lyssorus
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 ;)

Re: problème de sessions

Posté : 14 juin 2013, 11:13
par NUAGE
Re,

C'est fait, merci :)

Re: problème de sessions

Posté : 14 juin 2013, 11:18
par Lyssorus
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 ?

Re: problème de sessions

Posté : 14 juin 2013, 11:30
par NUAGE
Re,

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

Re: problème de sessions

Posté : 14 juin 2013, 11:32
par sirakawa
Ce ne serait pas déjà une histoire de
<select multiple ...>
?

Re: problème de sessions

Posté : 14 juin 2013, 11:39
par NUAGE
Re,

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

Re: problème de sessions

Posté : 14 juin 2013, 11:46
par Lyssorus
Et bien, je dois avouer que je ne vois pas là...

Désolé.

Si quelqu'un d'autre peut aider :)

Re: problème de sessions

Posté : 14 juin 2013, 16:38
par Spols
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

Re: problème de sessions

Posté : 14 juin 2013, 16:59
par NUAGE
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

Re: problème de sessions

Posté : 17 juin 2013, 14:23
par Spols
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

Re: problème de sessions

Posté : 17 juin 2013, 14:49
par NUAGE
Re,

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

Re: problème de sessions

Posté : 18 juin 2013, 09:52
par NUAGE
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 ?