Gestion d'évènement

clubcanin.redene
Invité n'ayant pas de compte PHPfrance

28 juil. 2014, 18:23

Bonjour,

Je suis le développeur du site internet d'une petite association canine, et je souhaite réaliser une page afin de gérer la planification de nos moniteurs en fonction des 3 cours (EC, N1 et N2) réalisé chaque samedi.

Pour cela j'ai donc réalisé une page ou je récupère toutes les dates des samedi de l'année en cours.
J'ai également créer une table dans ma base de donnée avec une listes de l’ensemble des moniteurs. (géré directement via la base de données pour l'instant).
J'ai également créer une table dans ma base de donnée avec les événements avec 1 champ id, un champ niveau (cours -> EC N1 N2), un champ moniteur et 1 champ date)
J'ai ajouté quelques valeurs que j'arrive maintenant à afficher dans mon tableau.
Par contre je bloque sur la façon d'ajouter un moniteur lorsque l'on clique sur la case correspondant a un niveau en fonction d'une date.
Par exemple:
Pour le Sam 01/02/2014 dans le niveau EC si on clique je voudrais que l'on puisse choisir parmi une liste déroulante (ou autre méthode) de tous nos moniteurs récupérés via la base de donnée.
Et il m'affiche ainsi le moniteur choisit en noir. ( En vert rayé sont les moniteurs qui était désigné dans dans 1er temps mais qui se sont fait remplacer.)

Pour faire plus simple voici le lien vers la page développée:
Voici le lien vers le début de cette page:
http://clubcanin.redene.free.fr/php/pla ... /index.php

Et voici également le code source:
<!doctype html>
<html lang="fr">
<head>
  <meta charset="utf-8">
  <title>Calendrier</title>
  <link rel="stylesheet" href="style.css">
  <script type="text/javascript" src=" http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>

</head>
<body>


	<?php

		//Connexion à la base de donnée


// On récupère la liste des moniteurs dans la base de donnée
			$requete="SELECT surnom FROM liste_moniteurs ORDER BY surnom ASC";
			$exec2=mysql_query($requete);
			$surnomliste=array();
			while ($ligne2 = mysql_fetch_array($exec2)) {
			$surnom=$ligne2['surnom'];
			array_push($surnomliste,$surnom);}
			print_r($surnomliste);

// on récupère les données moniteur et niveau pour chaque date
			$requete="SELECT * FROM planning_moniteurs";
			$exec=mysql_query($requete);
						while($ligne=mysql_fetch_array($exec)):
							// On affiche les information du planning
							$niveau=$ligne['niveau'];
							$moniteur=$ligne['moniteur'];
							$date=$ligne['date'];
							$r[$date][$niveau] = $moniteur;
							//echo 'affichage données:'.$niveau.'-'.$moniteur.'-'.$date.'<br />';
						endwhile;




	$date = new Date();
	$year = date('Y');
	$dates = $date->getAll($year);
	?>

	<div class="clear"></div>
	<div class="periods">
	<form>
	<table class="calendrier">
	<caption class="year">
		<?php foreach ($dates as $année => $valeur1):
		echo $année; ?>
	</caption>
	<thead> <!-- En-tête du tableau -->
		<tr>
		<div class="month">
			<?php foreach ($valeur1 as $cle2 => $valeur2): ?>
			<th class="month"><?php echo (mb_substr($months[$cle2-1],"utf8")); // Affiche le mois en toutes lettres ?></th>
		</div>
		</tr>
	</thead>
	<tbody> <!-- Corps du tableau -->

		<tr>
			<td> Poste</td>
			<td> EC</td>
			<td> N1</td>
			<td> N2</td>
		</tr>
			<?php foreach ($valeur2 as $cle3 => $valeur3): ?>
			<?php
			$dd='';
			$mm='';
			if($cle3<10): $dd=0; endif;//si le jour est <10 alors $dd=0 sinon $dd=''
			if($cle2<10): $mm=0; endif;//si le jour est <10 alors $mm=0 sinon $mm=''
			?>
		<tr>
				<td>
				<?php
				//on affiche tous les samedis et leur dates en ajoutant les 0 si <10
				echo'Sam '.$dd.''.$cle3.'/'.$mm.''.$cle2.'/'.$année;
				//on récupère la valeur de la date affichée au format de la base de donnée
				$datea=$année.'-'.$mm.''.$cle2.'-'.$dd.''.$cle3;

				?>
			</td>


			<td>
				<ul>
					<?php
						//on initialise les 2 variables de comptage
						$n='EC';
						$v1=0;
						$v2=0;
						foreach($r as $datep => $r1){
							if ($datep==$datea){
								foreach($r1 as  $niveau => $moniteur){if (substr($niveau,0,2)==$n){$v2++;}//on compte le nb de réponse pour moniteur dans ec à la date du jour
								}}
						}
						//on récupère l'array avec l'ensemble des données de la bdd
						foreach($r as $datep => $r1)
						{
							//si la date affichée est égal à la date de la bdd on continu
							if ($datep==$datea){
							//si le niveau commence par EC on affiche les moniteurs
							foreach($r1 as  $niveau => $moniteur)
								{
									if (substr($niveau,0,2)==$n){
										$class='none';
										if ($v2-1!=$v1){$class='line-through';}// on compare la valeur v1 à v2 et on affiche la class barré si elles sont différentes
										echo '<li class="'.$class.'">'.$moniteur.'  </li>';$v1++;}
								}
							}
						}
					?>
				</ul>
			</td>
			<td>
					<?php
						//on initialise les 2 variables de comptage
						$n='N1';
						$v1=0;
						$v2=0;
						foreach($r as $datep => $r1){
							if ($datep==$datea){
								foreach($r1 as  $niveau => $moniteur){if (substr($niveau,0,2)==$n){$v2++;}//on compte le nb de réponse pour moniteur dans ec à la date du jour
								}}
						}
						//on récupère l'array avec l'ensemble des données de la bdd
						foreach($r as $datep => $r1)
						{
							//si la date affichée est égal à la date de la bdd on continu
							if ($datep==$datea){
							//si le niveau commence par EC on affiche les moniteurs
							foreach($r1 as  $niveau => $moniteur)
								{
									if (substr($niveau,0,2)==$n){
										$class='none';
										if ($v2-1!=$v1){$class='line-through';}// on compare la valeur v1 à v2 et on affiche la class barré si elles sont différentes
										echo '<li class="'.$class.'">'.$moniteur.'  </li>';$v1++;}
								}
							}
						}
					?>
			</td>
			<td>
					<?php
						//on initialise les 2 variables de comptage
						$n='N2';
						$v1=0;
						$v2=0;
						foreach($r as $datep => $r1){
							if ($datep==$datea){
								foreach($r1 as  $niveau => $moniteur){if (substr($niveau,0,2)==$n){$v2++;}//on compte le nb de réponse pour moniteur dans ec à la date du jour
								}}
						}
						//on récupère l'array avec l'ensemble des données de la bdd
						foreach($r as $datep => $r1)
						{
							//si la date affichée est égal à la date de la bdd on continu
							if ($datep==$datea){
							//si le niveau commence par EC on affiche les moniteurs
							foreach($r1 as  $niveau => $moniteur)
								{
									if (substr($niveau,0,2)==$n){
										$class='none';
										if ($v2-1!=$v1){$class='line-through';}// on compare la valeur v1 à v2 et on affiche la class barré si elles sont différentes
										echo '<li class="'.$class.'">'.$moniteur.'  </li>';$v1++;}
								}
							}
						}
					?>
			</td>
		</tr>

<?php  endforeach; ?>
   </tbody>
<?php endforeach; ?>
<?php endforeach; ?>
</table>

</body>
</html>

Si quelqu'un de généreux à une petite piste à m'offrir se serait super.

Merci

toytoy
Invité n'ayant pas de compte PHPfrance

30 juil. 2014, 02:26

Déjà pour tes echo utilises plutôt des ',' ou lieu de concaténer tes variables => http://php.net/manual/fr/function.echo.php

Tu fais une requete sur ta table moniteur et tu affiches le résultat dans une boucle:

Code : Tout sélectionner

function liste_mono () { $requete = 'SELECT id, nom FROM liste_moniteurs'; $resultat = mysql_query($requete); echo '<select>'; while ($mono = mysql_fetch_array($resultat)) { echo '<option value="',$mono[0],'">',$mono[1],'</option>'; } echo '</select><input type="submit" value="Ok" />'; mysql_free_result($resultat); }
Pour la suite tu peux le faire en ajax en simplement en php,

en php tu mets un bouton editer dans chaque case et quand tu cliques tu appelles la fonction liste_mono dans ta case. Si tu choisis ton mono et que tu valides alors tu enregistres dans ta table correspondante pour la date et le cours enregistré le moniteur valider dans le formulaire.

En ajax sa t'éviterai de recharger la page, mais pas besoin de compliquer la tâche pour l'instant ^^

toytoy
Invité n'ayant pas de compte PHPfrance

30 juil. 2014, 02:42

Désolé du double post mais j'ai été un peu rapide ( et fatigué)...

Il faut en fait connaître la date et le type du cours (le plus important mais j'avais zappé...) donc quand tu édites ta case pour placer un mono il faut que tu connaisses les valeurs de la case (date + cours)
function liste_mono ($date,$cours) {
   $requete = 'SELECT id, nom FROM liste_moniteurs';
   $resultat = mysql_query($requete);

   echo '<form action="#" method="post">
           <select>';
   while ($mono = mysql_fetch_array($resultat)) {
      echo '<option value="',$mono[0],'">',$mono[1],'</option>';
   }
   echo '</select>
           <input type="hidden" value="',$date,'" name="date"/>
           <input type="hidden" value="',$cours,'" name="cours" />
           <input type="submit" value="Ok" />
           </form>';
   mysql_free_result($resultat);
}
quand tu valides tu récupère es valeurs $_POST et en fonction de ta table tu enregistres tes valeurs

clubcanin.redene
Invité n'ayant pas de compte PHPfrance

06 août 2014, 23:14

Merci pour les pistes, je vais creuser cela dès que j'ai un petit moment, mais pour l'instant c'est rénove sur la maison, donc le site un peu en stand by.