PHP/mysql enregistrer données tableau HTML [Résolu/Fermé]

Signaler
-
 kilian -
slt, voilà j'ai 2 tble etudiant et absence.jé fé une req sql select* from pour selectioner les etudiant par classe pour voir ts les etudiants et je regenere un checkbox pour chq etudiant.
apres mysql_fetch_array j'affiche ts les etudiants ds un tblo html dont la derniere colonne por chq etudiant il y'a son checkbox.maintenant je voudrait le code qui me permet que lorsque je coche le checkbox php puisse reconnaitre tte la ligne du tablo afin que je puisse enregistrer tte la ligne (nom, prenom,adresse) ds le cas où l'etudiant est absent.j'ai essayer mais on dirait que le checkbox n'est pas associer aux autres cellule du tablo. Merci de me repondre c'est mon projet de fin d'etude "gestion des assiduité d'une ecole".Je vous suis tres reconnaissant au delà des mots

8 réponses

Messages postés
25
Date d'inscription
vendredi 24 juin 2005
Statut
Membre
Dernière intervention
7 novembre 2005
11
Merci bcp Monsieur KILIAN, je vous en suis tres reconnaissant.

voici mon code:

C’est le formulaire que je selectionne la classe ainsi il m’affiche tt les etudiants(nom,prenom,numcarte)et regenere le checkbox .
********************************************************************
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Document sans titre</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
.Style1 {
font-size: 18px;
font-weight: bold;
}
body {
background-color: #669966;
}
.Style2 {color: #FFFFFF}
-->
</style>
</head>

<body>
<form action="classeaff.php" method="post" name="form" id="form">
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<table width="404" border="1" align="center" cellpadding="8" bordercolor="#663366">
<tr>
<td width="186"> </td>
<td width="174"> </td>
</tr>
<tr>
<td><div align="center" class="Style2"><span class="Style1">Choisissez la classe </span></div></td>
<td><div align="center">
<select name="select">
<option value="gi1">Gi1</option>
<option value="gi2">Gi2</option>
<option value="gi3">Gi3</option>
<option value="gi4">Gi4</option>
</select>
</div></td>
</tr>
<tr>
<td>
<div align="center">
<input name="cmd_val" type="submit" id="cmd_val" value="Valider">
</div></td>
<td><div align="center">
<input type="reset" name="Submit2" value="Annuler">
</div></td>
</tr>
</table>
</form>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
</body>
</html>

C’est le form qui affiche les resultat de la precedente
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Document sans titre</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>

<?php
//include("../modeles/entete.php");
//Connexion à MySQL
include "open.php";
if ($_POST['cmd_val']){
$menselect = $_POST['select'];
}
//Requete pour afficher les utilisateurs enrégistrer dans la base de données
$rq="select num_carte_etud, nom, prenom, filiere from etudiant where filiere='$menselect'
order by num_carte_etud ";
//fardi $rq="select num_Abs, date_Abs, h_debut, h_fin, nb_abs, num_carte_etud, filiere from absence where filiere='$menselect'
//fardi order by num_Abs ";
//Envoie de la requete au serveur MySQL
$resultat=mysql_query($rq) or die("Une erreur systeme s'est glissée: ".mysql_error());
//if ($resultat=true) { echo "Bien"; } else { echo "Soucis au niveau du serveur"; }
//Derouler la boucle while pour afficher les résultats de la requête
$nb=mysql_num_rows($resultat);
//if ($resultat) 1ere methode ou
if ($nb>0)
echo "<h2 align='center'><font color=blue>Actuellement vous vous êtes absentéz pendant $nb jours(s) </font></h2>";
{ echo "<table align='center' border=1 width=100%>
<tr>
<th align='center'><font color=black> Carte scolaire</th><th align='center'><font color=black>Nom</font></th>
<th align='center'><font color=black> Prénom</th><th align='center'><font color=black>Filiére</font></th>
</tr>"; { ?>
<form name="form1" method="post" action="classetrait.php">
<? }
while($lignes=mysql_fetch_array($resultat,MYSQL_NUM)) // ou bien: while ($lignes=mysql_fetch_rows($resultat))
{
echo "<tr><td>$lignes[0]</td> <td>$lignes[1]</td> <td>$lignes[2]</td> <td>$lignes[3]</td> <td><input type='checkbox' name='checkbox' value='$lignes[0]'></td></tr>";
}

echo "</table>";
//2eme partie
//if (isset('checkbox'))
?>
<table width="518" border="1" align="center" cellpadding="8">
<tr>
<td width="299"><input name="imageField2" type="image" src="maison.gif" align="middle" width="103" height="60" border="0"></td>
<td width="175"><input name="imageField" type="image" src="telesurveillance_ecran.jpg" align="right" width="170" height="133" border="0"></td>
</tr>
<tr>
<td><span class="Style1">Date de l'abscence : </span></td>
<td><input name="t_date" type="text" id="t_date" value="<? echo 'Le ' . date ('d - m - Y'); ?>"></td>
</tr>
<tr>
<td><span class="Style1">Heure début :</span></td>
<td><input name="hr_debut" type="text" id="hr_debut"></td>
</tr>
<tr>
<td><span class="Style1">Heure fin : </span></td>
<td><input name="hr_fin" type="text" id="hr_fin"></td>
</tr>
<tr>
<td>
<div align="left"><span class="Style1">Numero de la carte scolaire : </span> </div></td>
<td>
<div align="left"> </div></td>
</tr>
<tr>
<td>
<div align="center">
<input name="cmd_enreg" type="submit" id="cmd_enreg" value="Enregistrer">
</div></td>
<td><div align="center">
<input name="t_numcarte" type="text" value=007 >
<input type="reset" name="Submit" value="Annulerr">
</div></td>
</tr>
</table>
</form>
<?


//echo "</form>";

mysql_free_result($resultat);
//mysql_close($cnx);
}
echo"<p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p>";
echo"<p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p>";
echo"<p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p><p>";

?>
<p align="center" class="Style1"><a href="index.htm">Retoure à l'accueil </a></p>
</body>
</html>

</body>
</html>
------------------------------------------------------------------------------
Et enfin c’est le form de traitement

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Document sans titre</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<?
//include "head.php";
include "open.php";
//if ($_POST['cmd_rech']=='Rechercher')
// { #1

//if (isset($_POST['checkbox'])){

$v0 = $_POST['t_date'];
$v1 = $_POST['hr_debut'];
$v2 = $_POST['hr_fin'];
$v3 = $v2-$v1;
$v4 = $_POST['checkbox'];
$v5 = $_POST['t_numcarte'];
while(isset($_POST['checkbox'])){
$req = "INSERT INTO `absence`VALUES ('','$v0','$v1','$v2','$v3','$v4','$v5')";
$res = mysql_query($req) or die ("Transfert non efféctuer");
//include "paiement.php";
}

?>


</body>
</html>

------------------BDD--------------------
-- Structure de la table `etudiant`
--

CREATE TABLE `etudiant` (
`num_carte_etud` varchar(255) default NULL,
`nom` varchar(255) default NULL,
`prenom` varchar(255) default NULL,
`date_naiss` varchar(255) default NULL,
`sex` varchar(60) default NULL,
`adresse` varchar(255) default NULL,
`tel` int(12) default NULL,
`mail` varchar(255) default NULL,
`filiere` varchar(255) default NULL,
`code_tuteur` varchar(255) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Contenu de la table `etudiant`
--

INSERT INTO `etudiant` VALUES ('001', 'moufouti', 'ali', '12', 'Masculin', 'moscou', 65647896, 'moscou^hotmail.com', 'gi1', '22236');
INSERT INTO `etudiant` VALUES ('011', 'aa', 'bb', ' 12-02-1896', 'Masculin', 'qertret', 1444444444, 'mal@yahoo.fr', 'gi1', 'noeop@yahoo.fr');
INSERT INTO `etudiant` VALUES ('012', 'lll', 'mmmm', '12-04-18957', '', 'ttttttttttttttttt', 2147483647, 'maot@yahoo.fr', 'gi1', 'mppro@yahoo.fr');
INSERT INTO `etudiant` VALUES ('012', 'lll', 'mmmm', '12-04-18957', 'Feminin', 'ttttttttttttttttt', 2147483647, 'maot@yahoo.fr', 'gi1', 'mppro@yahoo.fr');
INSERT INTO `etudiant` VALUES ('013', ' poi', 'poi', '17-08-1996', 'Masculin', 'ggggggggggg', 1457896, 'lkflsdr@hotmail.com', 'gi1', 'hot@heoit.fr');
INSERT INTO `etudiant` VALUES ('014', 'kassavoubou', 'presid', '12-03-1897', 'Feminin', 'ddddd', 123857, 'maoh^hotmcom', 'gi1', 'mjdf@yahoofr');

-- --------------------------------------------------------
10
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 57581 internautes nous ont dit merci ce mois-ci

Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 485
Salut,

Tu pourrais réexpliquer ton problème?
Je ne suis pas sûr d'avoir compris.... :-\
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 485 >
Messages postés
25
Date d'inscription
vendredi 24 juin 2005
Statut
Membre
Dernière intervention
7 novembre 2005

Regarde bien.
Tu as un formulaire avec dedans plusieurs checkbox qui ont le même nom.
Quand les données de ton formulaire sont postées tu récupères les données du ckeckbox à partir de $_POST['checkbox']

Il ne peut y avoir qu'une seule valeur dans cette variable.
Si tu veux vérifier tous les checkbox dans un formulaire, il faut leur donner un nom différent comme par exemple checkbox1, checkbox2 que tu récupèreras avec $_POST['checkbox1'], $_POST['checkbox2'] etc....

Ou alors il faut que tu organises tes formulaires autrement.
Sinon, il ya quelques trucs qui me paraissent pas trop logiques dans ton organisation.
Tu ecris: Actuellement vous vous êtes absentéz pendant n jours(s)
Oui mais à qui t'adresse tu parmi la liste des etudiants mentionnés dans le formulaire?
D'autant que tu n'affiches pas le nombre d'absences d'un etudiant particulier mais le nombre de lignes rapportées par ta requête, soit le nombre d'étudiants qui sortent de ta requête, et non pas le nombre d'absence d'un elève particulier.

Et attention, à la fin, tu as un risque de boucle infinie:
while(isset($_POST['checkbox'])){
          $req = "INSERT INTO `absence`VALUES      '','$v0','$v1','$v2','$v3','$v4','$v5')";
          $res = mysql_query($req) or die ("Transfert non efféctuer");
}

D'ailleurs je pense que le problème vient de là:
Tu as cru qu'en faisant cette boucle, tu ferais défiler la valeur de toutes les checkbox qui ont été cochées et générer une requête pour chaque valeur de checkbox.... Mais ça ne fonctionne pas comme ça. Puisque toutes tes checkbox ont le même nom, c'est la dernière checkbox cochée qui écrasera sa valeur par dessus celle des autres.
C'est pour ça qu'il faut donner un nom différent à tes checkbox.

Encore autre chose: je ne comprends pas pourquoi dans le formulaire, tu demandes le numero de la carte scolaire, alors que la valeur des cartes scolaires est déjà dans les checkbox.
Et pourquoi demander le numero d'une seule carte scolaire alors que tu voudrais faire un formulaire pour noter l'absence de un ou plusieurs étudiants donc retenir le numero d'une ou plusieurs cartes scolaire.

Voilà voilà, j'espère que je n'ai rien interprété de travers dans ton script. Je l'ai installé chez moi pour voir ce que ça donne.

Si tu as d'autres questions, n'hésite pas :-)
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 485 >
Messages postés
25
Date d'inscription
vendredi 24 juin 2005
Statut
Membre
Dernière intervention
7 novembre 2005

Et dans ta requête d'insertion à la fin, je ne suis pas certain mais je crois que tu as confondu la filière et le numero de la carte d'étudiant.
Messages postés
25
Date d'inscription
vendredi 24 juin 2005
Statut
Membre
Dernière intervention
7 novembre 2005
11 >
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016

Merci infiniment, tout ce que vous venez de me dire c'est exactement ce qui se passe.Dés que je coche plusieurs checkbox il prens en charge juste le dernier comme vous venez de le dire.Alors que je dois enregestrer tt les checkbox avec comme valeur le num_de la carte_scolaire comme ça lorsqu'un parent voudra consulter les absences de son fils je ferais la requete à base de ce champ.J'ai beau essayer +ieurs methode en exemple le "while" comme vous l'avez remarqué.Votre remarque tiens exaactement ce que j'ai eu il fait une seulle enregistrement +ieurs fois jusqu'à ce easyphp se plante.

Je suis à bout je ne sais pas comment gerer ses checkbox et je ne sais pas comment leurs attribuer automatiquement diferent nom.
J'espere ou je souhaite de tt mon coeur que tu m'en vienne en aide.
Je vous remercie infiniment.
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 485 >
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016

Salut Oumouri,

Je te réponds ce soir.....
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 485 >
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016

Alors si tu veux générer un nom de checkbox nouveau pour chaque checkbox:
D'abord tu prends un nom de base, on va dire "etudiant".
Puis tu utilises une variable compteur pour avoir comme noms de checkbox:
etudiant0
etudiant1
etudiant2 etc....

Ca nous donne ça dans la page classeaff.php:
$nb_etudiant=0;
while($lignes=mysql_fetch_array($resultat,MYSQL_NUM)) // ou bien: while ($lignes=mysql_fetch_rows($resultat))
{
	echo "<tr><td>$lignes[0]</td> <td>$lignes[1]</td> <td>$lignes[2]</td> <td>$lignes[3]</td> <td><input type='checkbox' name='etudiant$nb_etudiant' value='$lignes[0]'></td></tr>";
	$nb_etudiant++;
}

Sachant que $nb_etudiant est le compteur.

Ensuite, il faut que tu transmette le nombre d'etudiants sur cette page à la page classetrait.php (tu verras pourquoi après).
Donc tu utilises un champs caché avec notre compteur juste avant qui indique bien le nombre d'étudiants sur cette page.
Ou plus exactement notre compteur -1, puisqu'il s'incrémente une dernière fois inutilement dans la boucle d'avant.
Donc à la suite de la boucle:
echo "<input type='hidden' name='nb_etudiant' value='$nb_etudiant'>";


Maintenant on passe à la page classetrait.php:

On a plus besoin de $v4, puisqu' on utilise des champs $_POST différents pour chaque checkbox.
Par contre on prend une nouvelle variable avec le nombre d'étudiant du champs caché d'avant:
Donc avant la boucle ou se trouve la requête, ça nous donne:
$v0 = $_POST['t_date'];
$v1 = $_POST['hr_debut'];
$v2 = $_POST['hr_fin'];
$v3 = $v2-$v1;
$v5 = $_POST['t_numcarte'];
$nb_etudiant=$_POST['nb_etudiant'];

Et ensuite la boucle de la requête.
Là on va parcourir la valeur de toutes les checkbox. Si une checkbox a été cochée, on fait la requête, sinon on ne fait rien.
On fait ça jusqu'à ce qu'on dépasse le nombre d'étudiants dans la page d'avant, donc le nombre de checkbox:
for($i=0;$i<$nb_etudiant;$i++) /*Rappel: Nombre 
d'étudiants dans la page d'avant = $nb_etudiant-1 */
{
	if (isset($_POST["etudiant$i"]))
	{
		$v4=$_POST["etudiant$i"];
		$req = "INSERT INTO `absence`VALUES ('','$v0','$v1','$v2','$v3','$v4','$v5')";
		$res = mysql_query($req) or die ("Transfert non effectué");
		echo $req;
	}
	echo $i."<br>";
//include "paiement.php";
}


Et voilà.
Messages postés
25
Date d'inscription
vendredi 24 juin 2005
Statut
Membre
Dernière intervention
7 novembre 2005
11
Monsieur KILIAN, honneur à vous j'ai bien resolu le probleme .tt marche à merveille.
Que Dieu soit avec vous.Je vous remercies infiniment.

Oumouri
Messages postés
162
Date d'inscription
mercredi 25 juillet 2007
Statut
Membre
Dernière intervention
7 février 2010
16
autre post^^
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 485
Salut,

Comment tu disposes chaque ligne du tableau?
Tu crées un nouveau <form> à chaque fois?

Tu pourrais mettre ic la source html d'une ligne de ton tableau et la manière dont tu le récupères en php?
Et tu as quoi comme erreur?

Et si tu pouvais éviter le langage sms, la programmation donne déjà assez mal à la tête.... :-)
Messages postés
25
Date d'inscription
vendredi 24 juin 2005
Statut
Membre
Dernière intervention
7 novembre 2005
11
Monsieur KILIAN,
si seulement je pouvais vous dire combien j'en suis trés reconnaissant. J'ai pris bcp de retard pour vous repondre car je n'ai plus l'intenet à la maison je doi venir au cyber tout les jours alors que tout les jours on a pas les moyens.Eh oui c'est l'afrique.Je file tout de suite à la maison en emenant le code pour essayer de le marier avec le mien.Je vous fais signe demain.

Monsieur KILIAN, si seulement vous saviez combien je suis content.

Mmmmmmmmmmmmmmmmmerci ..... à demain
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 485
:-)

Par contre j'ai laissé deux trois trucs inutiles dans le code, comme l'affichage de la requête par exemple.
C'était pour debugger...

Et je crois que tu t'es gourré dans la section. Tu laisse 007 par défaut alors que la section si j'ai bien compris c'est plutôt gi1 ou gi2 etc...

Voilà,voilà, j'espère que ça marchera....
Messages postés
25
Date d'inscription
vendredi 24 juin 2005
Statut
Membre
Dernière intervention
7 novembre 2005
11 >
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016

Merci, comme je suis debutant je crois que le mieux c'est de bien etudier le code que vous m'avez envoyer puis l'integrer, au lieu d'essayer de jouer aux Enstein.
Merci bien
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 485
Ben de rien....

Bonne chance pour la suite :-)
Salut kilian, j'ai bien vu que tu t'y connaissai très bien à la programmation, enfin au site web en général, et j'aurai quelques questions, en faite on m'a demandé de créer un site internet immoblier, et j'aurai voulu savoir de une: est-ce que c'est possible d'intégrer une image et délimiter que si je passe la souris sur tel ou tel ville de la carte que je puisse la sélection, donc que le nom qui est affiché sur la carte puisse etre comme une sorte de checkbox, vu que j'aimerais pouvoir sélection plusieur ville??
2ième question: j'arrive à insérer des "enregistrés" par une formulaire, donc ils sont sur la base, après leurs inscription, quand ils mettent leur login et mot de passe j'aimerais qu'ils puissent voir leur données d'utilisateur et que depuis cette page qui n'est pas visible si la personne n'est pas inscrite, qu'il puisse insérer des annonces (donc un truc que c'est que lui qui puisse accéder à ses annonce), j'aimerais savoir comment lier l'utilisateur avec les annonces qu'il insère? que chaque utilisateur puisse géré ses annonces..

Merci de vos réponse d'avance.