Transfert d'un nombre aléatoire de variable

Résolu/Fermé
Signaler
-
 Arka -
Bonjour,

Je suis en train de faire un système de gestion d'absence d'élèves.
Je dispose d'une liste d'élèves entrée dans une bdd mysql. J'ai une première page avec des listes déroulantes m'affichant les noms des profs et la liste des classes ainsi que date et heure, l'utilisateur (prof) choisi son nom et la classe et clique sur un bouton qui envoie l'id de la classe ainsi que les autres données vers une seconde page.
Cette seconde page affiche le nom du prof, la date et l'heure ainsi qu'un tableau contenant la liste des élèves etant dans la classe sélectionnée en page 1, avec à coté de chaque nom 4 checkbox correspondant a Absent, Présent, Dispensé, Retard.
L'utilisateur doit alors cocher les cases nécéssaires et valider en cliquant sur un bouton.

Ce que je n'arrive pas à faire, c'est à passer les valeurs du tableau à une page de traitement qui enregistrera les résultats dans ma bdd (surtout à cause du faite que la taille du tableau est aléatoire avec des noms aléatoires).

Help.

voici mon code pour la page contenant le tableau:
$classe=$_POST['classe'];
$prof=$_POST['prof'];
$dates=$_POST['date'];
$heures=$_POST['heure'];


$sql= "SELECT * FROM liste WHERE classe like '%$classe%' ORDER BY nom";
$reponse = mysql_query($sql) or die('Requete FETCH en echec.'.mysql_error());

echo '<center> Classe du professeur ' . $prof . ' pour l\'heure ' . $heures . ' du '. $dates .'</center>';
echo '<form action="realise.php" method="POST">';
echo '<input type="hidden" name="ids" value="">';
echo '<input type="hidden" name="prof" value="'. $prof .'">';
echo '<input type="hidden" name="date" value="'. $dates .'">';
echo '<input type="hidden" name="heure" value="'. $heures .'">';
echo '<input type="hidden" name="classe" value="'. $classe .'">';
echo '<center><table bgcolor="#FFFFFF">' . "\n";          
	echo '<tr>';
		echo '<h1><center><b>'. $classe .'</b></center></H1>';
	echo '</tr>';
	echo '<tr>';
		echo '<td bgcolor="#669999"><b><u>Nom</u></b></td>';
		echo '<td bgcolor="#669999"><b><u>Prénom</u></b></td>';
		echo '<td bgcolor="#669999"><b><u>Absent</u></b></td>';
		echo '<td bgcolor="#669999"><b><u>Retard</u></b></td>';
		echo '<td bgcolor="#669999"><b><u>Présent</u></b></td>';
		echo '<td bgcolor="#669999"><b><u>Dispensé</u></b></td>';
	echo '</tr>';

	while($row2=mysql_fetch_array($reponse)){
			$test= $row2['id'].'[]';
		echo '<tr>';
			echo '<td bgcolor="#CCCCCC">'.$row2['nom'].'</td>';
			echo '<td bgcolor="#CCCCCC">'.$row2['prenom'].'</td>';
			echo '<td bgcolor="#CCCCCC"><center><input type="checkbox" name="' . $test . '" value="Absent"/></center></td>';
			echo '<td bgcolor="#CCCCCC"><center><input type="checkbox" name="' . $test . '" value="Retard"/></center></td>';
			echo '<td bgcolor="#CCCCCC"><center><input type="checkbox" name="' . $test . '" value="Présent"/></center></td>';
			echo '<td bgcolor="#CCCCCC"><center><input type="checkbox" name="' . $test . '" value="Dispensé"/></center></td>';
			echo '<tr>'."\n".'</tr>';
		echo "</tr>";			
	}
echo '</table></center>';
echo '<center><input type="submit" value="OK"></form></center>';


(je mets pas la page d'insertion dans la bdd puisque j'ai rien dedans autre que des test d'affichage des valeurs obtenues depuis la page du tableau).

4 réponses

Messages postés
1017
Date d'inscription
mardi 30 octobre 2007
Statut
Membre
Dernière intervention
22 novembre 2013
170
Bonjour,

pour ce genre de problème tu peux utiliser un compteur qui s'incrémente à chaque tour de boucle while() (à la fin).
Ensuite, tu attribue un name à chaque élement, concaténé à la valeur de ton compteur !

Exemple:

<input type="checkbox" name="Absent_' . $cpt . ' " value="Absent"/>

Ici $cpt est le compteur.
Ensuite, comme $_POST est un tableau regroupant tout le contenu des element ayant un name.
Il y aura toute tes variables.

Pour tout récupérer, c'est le même principe, tu peux regarder le nombre total d'enregistrement reçu et le divisé par le nombre de champs (pour savoir le nombre de tour de boucle while fait précédement). Puis tu fais une boucle for avec la valeur de se compteur.

Rien de plus dur mais fallait y penser :-)

A+
Gaerebut
J'avais pensé à ça mais abandonné après m'etre ecrasé sur un autre problème.

chaque checkbox est unique car identifié par l'id d'un eleve (par exemple "Absent12")
j'ai créé un champ texte ou sont enregistrés toutes les absences, chacune séparée par un espace
j'ai créé un compteur qui s'incrémente de 1 pour chaque id eleve créé dans le tableau. tout ça est envoyé à ma page de traitement ($nb).
coté page de traitement, j'ai essayé de faire un
$liste=explode (" ", $ids)
avec $ids comme liste de mes id eleves.
Normalement ça m'a créé un tableau "Liste" avec n elements "AbsentXX" (XX etant id eleve)
et la je fait une boucle
$i=0;
while($i<$nb){
$temp = $liste[$i];
echo $_POST[''.$temp] . "<br>";
$i++;
}


Le problème c'est que ça ne m'affiche rien :/
Problème résolu.
Dans ma page avec le tableau de checkbox, j'ai créé un champ caché qui recupere les id d'eleves, séparés par un espace. Une fois le conteu de ce champ récupéré dans l'autre page, je fais un explode() dessus, ce qui me donne un tableau rempli d'id, je n'ai plus qu'a faire une boucle qui va tourner count(tableau d'id)-1 (la derniere cellule est toujours vide) et pour obtenir les valeurs de mes checkbox, je n'ai qu'a concaténer un mot(Absent, Retard, Present ou Dispense) et l'id et enfin j'ecris ça dans ma bdd.

Je mets le code:

page tableau checkbox:
$classe=$_POST['classe'];
$prof=$_POST['prof'];
$dates=$_POST['date'];
$heures=$_POST['heure'];


$sql= "SELECT * FROM liste WHERE classe like '%$classe%' ORDER BY nom";
$reponse = mysql_query($sql) or die('Requete FETCH en echec.'.mysql_error());

echo '<center> Classe du professeur ' . $prof . ' pour l\'heure ' . $heures . ' du '. $dates .'</center>';
echo '<form action="realise.php" method="POST">';
echo '<input type="hidden" name="prof" value="'. $prof .'">';
echo '<input type="hidden" name="date" value="'. $dates .'">';
echo '<input type="hidden" name="heure" value="'. $heures .'">';
echo '<input type="hidden" name="classe" value="'. $classe .'">';
echo '<center><table bgcolor="#FFFFFF">' . "\n";          
	echo '<tr>';
		echo '<h1><center><b>'. $classe .'</b></center></H1>';
	echo '</tr>';
	echo '<tr>';
		echo '<td bgcolor="#669999"><b><u>Nom</u></b></td>';
		echo '<td bgcolor="#669999"><b><u>Prénom</u></b></td>';
		echo '<td bgcolor="#669999"><b><u>Absent</u></b></td>';
		echo '<td bgcolor="#669999"><b><u>Retard</u></b></td>';
		echo '<td bgcolor="#669999"><b><u>Présent</u></b></td>';
		echo '<td bgcolor="#669999"><b><u>Dispensé</u></b></td>';
	echo '</tr>';

	$temp='';
	$temp1=0;
	while($row2=mysql_fetch_array($reponse)){
			$test= $row2['id'];
		echo '<tr>';
			echo '<td bgcolor="#CCCCCC">'.$row2['nom'].'</td>';
			echo '<td bgcolor="#CCCCCC">'.$row2['prenom'].'</td>';
			echo '<td bgcolor="#CCCCCC"><center><input type="checkbox" name="Absent' . $test . '" value="Absent"/></center></td>';
			echo '<td bgcolor="#CCCCCC"><center><input type="checkbox" name="Retard' . $test . '" value="Retard"/></center></td>';
			echo '<td bgcolor="#CCCCCC"><center><input type="checkbox" name="Present' . $test . '" value="Présent"/></center></td>';
			echo '<td bgcolor="#CCCCCC"><center><input type="checkbox" name="Dispense' . $test . '" value="Dispensé"/></center></td>';
			echo '<tr>'."\n".'</tr>';
		echo "</tr>";
		$temp=$temp .$test . ' ';
		$temp1=$temp+1;			
	}
echo '</table></center>';
echo '<input type="hidden" name="ids" value="'.$temp.'">';
echo '<input type="hidden" name="nb" value="'.$temp1.'">';
echo '<center><input type="submit" value="OK"></form></center>';

mysql_close(); // Deconnexion de MySQL


page recup (pas finie):


 foreach ( $_POST as $post => $val )  {            
        $$post = $val;
    }
					// constitution du tableau d'ids et comptage//
$liste= explode(' ',$ids);
$nbliste=count($liste)-1;


$i=0;  // initialisation //

while($i<$nbliste){
	$Absent="Absent".$liste[$i];
	$sql="INSERT INTO eleve (id, ide, absence, retard, present, dispense, prof, date, heure) VALUES ('', '$liste[$i]', '$$Absent', '$$Retard', '$$Present', '$$Dispense', '$prof', '$date', '$heure')";
	$req=mysql_query($sql) or die ('erreur' . mysql_error());
	$i++;
}
Problème résolu.
Dans ma page avec le tableau de checkbox, j'ai créé un champ caché qui recupere les id d'eleves, séparés par un espace. Une fois le conteu de ce champ récupéré dans l'autre page, je fais un explode() dessus, ce qui me donne un tableau rempli d'id, je n'ai plus qu'a faire une boucle qui va tourner count(tableau d'id)-1 (la derniere cellule est toujours vide) et pour obtenir les valeurs de mes checkbox, je n'ai qu'a concaténer un mot(Absent, Retard, Present ou Dispense) et l'id et enfin j'ecris ça dans ma bdd.

Je mets le code:

page tableau checkbox:
$classe=$_POST['classe'];
$prof=$_POST['prof'];
$dates=$_POST['date'];
$heures=$_POST['heure'];


$sql= "SELECT * FROM liste WHERE classe like '%$classe%' ORDER BY nom";
$reponse = mysql_query($sql) or die('Requete FETCH en echec.'.mysql_error());

echo '<center> Classe du professeur ' . $prof . ' pour l\'heure ' . $heures . ' du '. $dates .'</center>';
echo '<form action="realise.php" method="POST">';
echo '<input type="hidden" name="prof" value="'. $prof .'">';
echo '<input type="hidden" name="date" value="'. $dates .'">';
echo '<input type="hidden" name="heure" value="'. $heures .'">';
echo '<input type="hidden" name="classe" value="'. $classe .'">';
echo '<center><table bgcolor="#FFFFFF">' . "\n";          
	echo '<tr>';
		echo '<h1><center><b>'. $classe .'</b></center></H1>';
	echo '</tr>';
	echo '<tr>';
		echo '<td bgcolor="#669999"><b><u>Nom</u></b></td>';
		echo '<td bgcolor="#669999"><b><u>Prénom</u></b></td>';
		echo '<td bgcolor="#669999"><b><u>Absent</u></b></td>';
		echo '<td bgcolor="#669999"><b><u>Retard</u></b></td>';
		echo '<td bgcolor="#669999"><b><u>Présent</u></b></td>';
		echo '<td bgcolor="#669999"><b><u>Dispensé</u></b></td>';
	echo '</tr>';

	$temp='';
	$temp1=0;
	while($row2=mysql_fetch_array($reponse)){
			$test= $row2['id'];
		echo '<tr>';
			echo '<td bgcolor="#CCCCCC">'.$row2['nom'].'</td>';
			echo '<td bgcolor="#CCCCCC">'.$row2['prenom'].'</td>';
			echo '<td bgcolor="#CCCCCC"><center><input type="checkbox" name="Absent' . $test . '" value="Absent"/></center></td>';
			echo '<td bgcolor="#CCCCCC"><center><input type="checkbox" name="Retard' . $test . '" value="Retard"/></center></td>';
			echo '<td bgcolor="#CCCCCC"><center><input type="checkbox" name="Present' . $test . '" value="Présent"/></center></td>';
			echo '<td bgcolor="#CCCCCC"><center><input type="checkbox" name="Dispense' . $test . '" value="Dispensé"/></center></td>';
			echo '<tr>'."\n".'</tr>';
		echo "</tr>";
		$temp=$temp .$test . ' ';
		$temp1=$temp+1;			
	}
echo '</table></center>';
echo '<input type="hidden" name="ids" value="'.$temp.'">';
echo '<input type="hidden" name="nb" value="'.$temp1.'">';
echo '<center><input type="submit" value="OK"></form></center>';

mysql_close(); // Deconnexion de MySQL


page recup (pas finie):


 foreach ( $_POST as $post => $val )  {            
        $$post = $val;
    }
					// constitution du tableau d'ids et comptage//
$liste= explode(' ',$ids);
$nbliste=count($liste)-1;


$i=0;  // initialisation //

while($i<$nbliste){
	$Absent="Absent".$liste[$i];
	$sql="INSERT INTO eleve (id, ide, absence, retard, present, dispense, prof, date, heure) VALUES ('', '$liste[$i]', '$$Absent', '$$Retard', '$$Present', '$$Dispense', '$prof', '$date', '$heure')";
	$req=mysql_query($sql) or die ('erreur' . mysql_error());
	$i++;
}