labouse
Messages postés7Date d'inscriptionmercredi 17 septembre 2003StatutMembreDernière intervention17 novembre 2005
-
16 nov. 2005 à 11:57
labouse
Messages postés7Date d'inscriptionmercredi 17 septembre 2003StatutMembreDernière intervention17 novembre 2005
-
17 nov. 2005 à 15:06
Bonjour,
Bon je vais essayer d'être clair: j'ai une table mysql avec nom prénom et un code service
je fais une requete pour afficher tout le monde pour un service bien precis jusque là ça va.
Sauf que pour chaque personne affichée j'ajoute des cases cochées pour valider leur présence durant la semaine.
Comment je peux récupérer les données nom par nom ? là je bloque je joins une partie de mon code :
mysql_select_db($database_connexion_bdd, $connexion_bdd);
$query="SELECT nom,prenom,id_agt FROM presence_agent WHERE code_serv='inf'ORDER BY nom ASC";
$resultat=mysql_query ($query)or die (mysql_error());
$count=mysql_num_rows($resultat);
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 16 nov. 2005 à 12:25
Hello,
tu t'y prends mal.
ton tableau pour la checkbox, $_POST['tableau'][]
Il est mal créé.
Je m'explique.
Dans un service, tu as 1 ou n personnes.
Donc, virtuellement, tu peux recréer ces checkbox, dans le même formulaire, n fois. Ton problème est que du coup, quand tu coches, tu te retrouves avec un tableau long (là, n * 10 entrées). Je suppose que pour toi, $tableau[0] correspond au 1er horaire de la matinée.
Ce n'est pas une bonne idée!
A ta place, je ferais un truc du genre :
Déjà, je passerais par un slect multiple, c'est plus sympa. Mais bon, le principe est le même que pour tes checkbox.
Dans ma table personne, j'aurais un personne_id
Je créerais une table horaires, avec horaire_nom, horaire_id.
Par exemple : 8h - 9h , 1
9h - 10h , 2 ...etc
Et j'aurais une table horaire_personne, avec personne_id et horaire_id.
Ensuite, mes checkboxes:
]" value="<?php echo $horaire_id; ?>" /> => sachant qu'il faut boucler sur ta table horaire pour créer ces checkboxes.
Tu récupèreras ainsi un tableau du genre :
$_POST['horaire'][$personne_id] = $horaire_id.
Dans une boucle, il te suffira de remplir ta table de jointure personne_horaire :
foreach ($_POST['horaire'] as $personne => $horaire) {
// requête du type : INSERT INTO personne_horaire (personne_id, horaire_id) VALUES ($personne, $horaire)
}
Et quand tu veux savoir pour une personne x, quels horaires ont été attribués, il te suffit de parcourir la table personne_horaire WHERE personne_id = $x_id, et de faire une jointure, tant qu'à faire, sur la table horaire pour avoir le nom des horaires.
SELECT
hor.horaire_nom,
pers.personne_nom
FROM
horaire AS hor,
personne AS pers,
personne_horaire AS ph
WHERE
(ph.horaire_id = $horaire) AND
(ph.personne_id = $personne) AND
(pers.personne_id = ph.personne_id) AND
(hor.horaire_id = ph.horaire_id)
ORDER BY
pers.personne_nom,
hor.horaire_nom
labouse
Messages postés7Date d'inscriptionmercredi 17 septembre 2003StatutMembreDernière intervention17 novembre 2005 16 nov. 2005 à 13:40
Merci beaucoup c'est une bonne piste d'approche, et je vais surement l'adopter en l'adaptant.
En abusant un peu : j'ai une table activités avec entre autres la duree qui doit être modifiable. Pour un service,Il y a n activités, si je fais une requête pour afficher les activités d'un service possible sous forme de formulaire, est-ce que je dois adopter le même système?
Je suis désolé je n'ai pas de code à proposer je n'ai rien commencer (le fainéant..) mais au niveau du concept c'est à dire pouvoir modifier la durée de chaque activité et faire une mise à jour pour chacune d'entre elles ?
labouse
Messages postés7Date d'inscriptionmercredi 17 septembre 2003StatutMembreDernière intervention17 novembre 2005 16 nov. 2005 à 15:43
Très bien c'est ce que j'avais compris (manquait plus que la confirmation ) y'a plus qu'à mettre en pratique, c'est le plus marrant.
Merci pour cette aide précieuse et très rapide
David
labouse
Messages postés7Date d'inscriptionmercredi 17 septembre 2003StatutMembreDernière intervention17 novembre 2005 17 nov. 2005 à 11:45
Bon me revoilà ...
J'ai bien suivi les instructions de la première réponse : l'affichage des checkboxes se fait bien :
mysql_select_db($database_connexion_bdd, $connexion_bdd);
$query="SELECT nom,prenom,id_agt FROM presence_agent WHERE code_serv='inf'ORDER BY nom ASC";
$resultat=mysql_query ($query)or die (mysql_error());
$count=mysql_num_rows($resultat);
echo"
<tr>
<td>$nom
</td>
<td>$prenom</td>\r\n";
$query1="SELECT horaire_id FROM horaires ORDER BY horaire_id ASC";
$resultat1=mysql_query ($query1)or die (mysql_error());
while
($data1=mysql_fetch_array($resultat1))
{
$horaire_id=$data1['horaire_id'];
echo"<td>
</td>\r\n";
}
}
Mais là où j'ai un souci c'est pour la récupération des données. Y' a un truc qui me chiffonne : le tableau est vide
$_POST['horaire'][$id_agt]=$horaire_id;
//Insertion dans la base de données
mysql_select_db($database_connexion_bdd, $connexion_bdd);
foreach($_POST['horaire'] as $agt => $horaire)
{
$query_insert="INSERT INTO horaire_personne (id_agt,horaire_id)
VALUES ('$agt','$horaire')";
mysql_query ($query_insert)or die (mysql_error());
}
je suis certain que c'est là que je m..de et là je vois pas (j'suis un boulet des fois).
labouse
Messages postés7Date d'inscriptionmercredi 17 septembre 2003StatutMembreDernière intervention17 novembre 2005 17 nov. 2005 à 13:57
Je suis toujours étonné de la rapidité de la réponse. Je ne suis pas habitué à une telle efficacité ;-)
Bon déjà je te dois des excuses j'ai fait un copier coller d'un fichier test donc bon forcément....
Seulement dans ta réponse sur la simplification de la ligne echo'..... au niveau name="',$data['id_agt'],'" il n'y a pas d'initialisation de tableau "horaires" ?
Je me trompe ou j'ai les boyaux de la tête constipés?
labouse
Messages postés7Date d'inscriptionmercredi 17 septembre 2003StatutMembreDernière intervention17 novembre 2005 17 nov. 2005 à 14:24
Bon j'en rajoute une couche j'avoue que je commence à être dans le brouillard : pour chaque id_agt tu peux avoir 1 à plusieurs horaires de sélectionnés. Le souci c'est qu'en suivant tes instructions dans ma table horaire_personne il y a un enregistrement de id_agent et du dernier horaire_id coché.
Là je crois que j'avais compris le concept mais j'ai l'impression que je suis complèment à l'ouest.
Désolé d'être aussi pénible mais j'aime comprendre ce que je fais.
labouse
Messages postés7Date d'inscriptionmercredi 17 septembre 2003StatutMembreDernière intervention17 novembre 2005 17 nov. 2005 à 15:06
Bon là speedy gonzales peut toujours se brosser .
J'ai effectivement fait un print_r c'est pour çà l'objet du deuxième post de l'après midi.
Ca me récupère bien id_agt et le dernier horaire_id coché. Bon maintenant rassure moi :
le but du jeu est bien d'avoir dans la table horaire_personne pour chaque id_agt, tous les horaires cochés?
avec dans la table : plusieurs fois le même id_agt et plusieurs horaire_id différents ceux-là.
D'où l'autre question pour le tableau horaires en indice on met id_agt et en valeur l'horaire_id, or l'indice est toujours le même donc cela me parait normal d'avoir un tableau avec un indice different et unique pour chaque id_agt et uniquement dernier horaire_id coché. Y'aurait pas une histoire de tableau multidimensionnel à mettre en place?