Probleme d'affichage php/SQL

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Probleme d'affichage php/SQL

Re: Probleme d'affichage php/SQL

par team94 » 16 févr. 2017, 12:43

ok je vais voir ca
merci

Re: Probleme d'affichage php/SQL

par Spols » 16 févr. 2017, 12:41

les codes donné précédement, contenait peut être des erreurs car je ne les avais pas testé, mais la logique nécéssaire y était. Lis les correctement, comprends les et tente quelque chose. Nous pourrons partir de ton test le plus concluant pour finaliser la solution.

Re: Probleme d'affichage php/SQL

par team94 » 16 févr. 2017, 12:30

le souci c'est que je ne vois pas comment faire

Re: Probleme d'affichage php/SQL

par Spols » 16 févr. 2017, 12:27

Comme je te l'avait dit et qu'il semble que nous avions commencé à le faire,
Il te faut récupèrer les données et puis créer ton tableau. tu repars de ton code de ton premier post, donc tous le boulot de la page précédente du topic est inutile .

Re: Probleme d'affichage php/SQL

par team94 » 16 févr. 2017, 11:22

Bonjour Spols

en fait j'ai rajouter cette boucle pour avoir tous les elements de nom 1 et prénom 1 a priori ca ne fonctionne pas en la retirant j'ai bien toute les info mais sur deux lignes moi je les voudrais sur la même.

pour le code il est un peu long car c'est une page de test la partie concerné est celle ci
<?php
                        // On récupère tout le contenu de la table agents
 
    $abs = $bdd->query('SELECT *     FROM        agents AS ag
                    left JOIN   absences AS abs
                    ON          abs.id_agents = ag.id
                    left JOIN   conges AS cg
                    ON      abs.id_conges = cg.id
                    ORDER BY nom');
 
    // On affiche chaque entrée une à une
 
    ?>
	<!-- reste du tableau---------------------------------------------------------------------------------------------------------------------------->
    <tr>
			<?php  
			$nom1="";
			while ($donnees = $abs->fetch()){ 
			
 
			 /*while($nom1 != $donnees['nom']){*/
				
							echo ('
 
											<td style="width:100px; vertical-align:middle; background-color:#F6E497;">'.$donnees['nom'].'</td>
											<td style="width:100px; vertical-align:middle; background-color:#F6E497;">'.$donnees['prenom'].'</td>
 
									');
								
								 
								 
							
							 foreach($datesMonth as $d): 
									$w=date('w', strtotime($d));
									$days=date(strtotime($d));
									$day=date($d);
									$date_deb = strtotime($donnees['date_debut']);
									$date_fin = strtotime($donnees['date_fin']);   
							echo ('	  <td ');
									if ($date_deb<=$days && $days <=$date_fin && $donnees['abrev_conges'] == 'CA' ) { echo 'style="background-color:#ff2000;"><div>'.$donnees['abrev_conges'].'</div></td>';}
 
									else if ($date_deb<=$days && $days <=$date_fin && $donnees['abrev_conges'] == 'CM' ) { echo 'style="background-color:#9358C6;"><div>'.$donnees['abrev_conges'].'</div></td>';}
 
									else if ($day==$vic_allie OR $day==$an OR $day==$prem OR $day==$fet_nation OR $day==$assomp OR $day==$touss OR $day==$arm OR $day==$no OR $day==$paq OR $day==$asc OR $day==$pent){ echo 'style="background-color:#FE9000;"><div></div></td>';}
 
									else if ($w==0 OR $w==6) { echo 'style="background-color:#ccc;"><div></div></td>';}
 
									else {echo 'style="background-color:#efecca;"><div></div></td>';} 
									 $nom1 = $donnees['nom'];
						endforeach; 
						 
								/* }*/
			

			?>
 
							
 
				</tr>
 
			   <?php
			 } // fin du While
			$abs->closeCursor(); // Termine le traitement de la requête
			?>


pour mieux comprendre en retirant le while cela me donne ca :
[img]
http://www.atikhan.fr/Sanstitre2.png
[/img]

merci encore

Re: Probleme d'affichage php/SQL

par Spols » 16 févr. 2017, 10:20

Je suis pas sur d'avoir compris tout ton code, (yen a quand même quelques lignes) et je ne sais plus de tête ce que tu cherche vraiment à obtenir mais je pense qu'il faut que tu retire le while($nom1 != $donnees['nom']){ et le } correspondant. c'est lui qui empèche l'affichage de la 2émé ligne.

Tu as par contre 2 fois la même requète, c'est du travail inutile pour ton script. tu ferai beaucoup mieux de stocker les infos néccessaires au 2eme tableau lors du premier parcours. ca te permettrait aussi de fusionner les lignes d'un même utilisateurs dans ce 2eme tableau

Re: Probleme d'affichage php/SQL

par team94 » 16 févr. 2017, 09:18

Bonjour à vous j'ai du laisser ce code de coté et la je me replonge dedans en y arrivant toujours pas

si quelqu'un a un peu de temps a m'accorder je lui en serais grès

alorsj'ai modifié mon code maintenant il m'affiche bien une seule ligne mais toujours un seul type d'absence je devient fou je reposte mon code et une copie d'ecran

le code :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
</head>
 
<body>
 
<?php ini_set('display_errors',1);
require('inc/cal.php');
require('bdd/bdd.php');
 
 
?>
 
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="utf-8">
	<title>Calendrier</title>
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<meta name="description" content="">
	<meta name="author" content="">
 
	<link rel="icon" type="image/png" href="img/favicon.png" />
	<!-- Le styles -->
	<link rel="stylesheet" href="css/style.css" />
 
	<style type="text/css">
		body { padding-top: 60px; padding-bottom: 40px; }
	</style>
 
 
	<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
	<!--[if lt IE 9]>
		<script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script>
	<![endif]-->
 
 
 
</head>
<body>
 
 
 
	<div class="navbar navbar-fixed-top">
		<div class="navbar-inner">
			<div class="container">
				<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
					<span class="icon-bar"></span>
					<span class="icon-bar"></span>
					<span class="icon-bar"></span>
				</a>
 
			</div>
		</div>
	</div>
 
	<div class="container">
		<table>
 
<?php
// tableau du haut -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
							// On récupère tout le contenu de la table agents
 
							$abs = $bdd->query('SELECT * 	FROM 		absences AS abs
															RIGHT JOIN 	agents AS ag
															ON 			abs.id_agents = ag.id
															LEFT JOIN 	conges AS cg
															ON 		abs.id_conges = cg.id
															ORDER BY nom');
 
							// On affiche chaque entrée une à une
							while ($donnees = $abs->fetch())
							{
							?>
							<tr>
								<td style="width:100px; vertical-align:middle; background-color:#F6E497;"><?php echo $donnees['nom']; ?></td>
								<td style="width:100px; vertical-align:middle; background-color:#F6E497;"><?php echo $donnees['prenom']; ?></td>
								<td style="width:100px; vertical-align:middle; background-color:#F6E497;"><?php echo $donnees['date_debut']; ?></td>
								<td style="width:100px; vertical-align:middle; background-color:#F6E497;"><?php echo $donnees['date_fin']; ?></td>
								<td style="width:100px; vertical-align:middle; background-color:#F6E497;"><?php echo $donnees['nom_conges']; ?></td>
								<td style="width:100px; vertical-align:middle; background-color:#F6E497;"><?php echo $donnees['nbre_conges']; ?></td>
								<td style="width:100px; vertical-align:middle; background-color:#F6E497;"><?php echo $donnees['abrev_conges']; ?></td>
								<td style="width:100px; vertical-align:middle; background-color:#F6E497;"><?php echo $donnees['rest']; ?></td>
 
								</tr>
							<?php
							}
							$abs->closeCursor(); // Termine le traitement de la requête
 
							?>
		</table>
	<!-- fin du tableau du haut ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------>
 
		<!-- affichage mois année et bouton ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------>
		<div class="row">
			<div style="text-align:center; margin:0 auto 20px;">
			<h4 class="year"><?=ucfirst(utf8_encode(strftime('%B', strtotime($firstDay)))) .' '.$currentYear;?></h4>
			<a href="index.php?month=<?=$prevYear;?>" class="btn btn-style"><< <?=date('Y', strtotime($prevYear));?></a>
			<a href="index.php?month=<?=utf8_encode($prevMonth);?>" class="btn btn-style2"><< <?=ucfirst(utf8_encode(strftime('%B', strtotime($prevMonth))));?></a>
			&nbsp;
 
			<a href="index.php?month=<?=utf8_encode($nextMonth);?>" class="btn btn-style2"><?=ucfirst(utf8_encode(strftime('%B', strtotime($nextMonth))));?> >></a>
			<a href="index.php?month=<?=$nextYear;?>" class="btn btn-style"><?=date('Y', strtotime($nextYear));?> >></a>
		</div>
		<!-- FIN affichage mois année et bouton ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------>
 
		<table class="table">
            <tbody>
			<!-- Premiere ligne du tableau---------------------------------------------------------------------------------------------------------------------------->
			<tr>
						<td colspan=2 style="background-color:#F6E497;">
						Agents
						</td>
 
 
						  <?php foreach($datesMonth as $d): ?>
						  <?php $w=date('w', strtotime($d)); ?>
						  <?php $day=date($d);
						  /*echo $day;*/	 
						  ?>
 
							<td  <?php
 
								  if ($day==$vic_allie OR $day==$an OR $day==$prem OR $day==$fet_nation OR $day==$assomp OR $day==$touss OR $day==$arm OR $day==$no OR $day==$paq OR $day==$asc OR $day==$pent) { echo 'style="background-color:#FE9000;"';}
 
								  else if ($w==0 OR $w==6)  { echo 'style="background-color:#ccc;"';}
 
								  else {echo 'style="background-color:#efecca;"';}
 
								?>>
							  <?=strftime('%a', strtotime($d));?><div><?=date('d', strtotime($d));?></div>
						  </td>
						  <?php endforeach; ?>
			</tr>
			<!-- Fin Premiere ligne du tableau---------------------------------------------------------------------------------------------------------------------------->
    <?php
                        // On récupère tout le contenu de la table agents
 
    $abs = $bdd->query('SELECT *     FROM        agents AS ag
                    left JOIN   absences AS abs
                    ON          abs.id_agents = ag.id
                    left JOIN   conges AS cg
                    ON      abs.id_conges = cg.id
                    ORDER BY nom');
 
    // On affiche chaque entrée une à une
 
    ?>
	<!-- reste du tableau---------------------------------------------------------------------------------------------------------------------------->
    <tr>
			<?php  
			$nom1="";
			while ($donnees = $abs->fetch()){ 
			
 
			 while($nom1 != $donnees['nom']){
				
							echo ('
 
											<td style="width:100px; vertical-align:middle; background-color:#F6E497;">'.$donnees['nom'].'</td>
											<td style="width:100px; vertical-align:middle; background-color:#F6E497;">'.$donnees['prenom'].'</td>
 
									');
								
								 
								 
							
							 foreach($datesMonth as $d): 
									$w=date('w', strtotime($d));
									$days=date(strtotime($d));
									$day=date($d);
									$date_deb = strtotime($donnees['date_debut']);
									$date_fin = strtotime($donnees['date_fin']);   
							echo ('	  <td ');
									if ($date_deb<=$days && $days <=$date_fin && $donnees['abrev_conges'] == 'CA' ) { echo 'style="background-color:#ff2000;"><div>'.$donnees['abrev_conges'].'</div></td>';}
 
									else if ($date_deb<=$days && $days <=$date_fin && $donnees['abrev_conges'] == 'CM' ) { echo 'style="background-color:#9358C6;"><div>'.$donnees['abrev_conges'].'</div></td>';}
 
									else if ($day==$vic_allie OR $day==$an OR $day==$prem OR $day==$fet_nation OR $day==$assomp OR $day==$touss OR $day==$arm OR $day==$no OR $day==$paq OR $day==$asc OR $day==$pent){ echo 'style="background-color:#FE9000;"><div></div></td>';}
 
									else if ($w==0 OR $w==6) { echo 'style="background-color:#ccc;"><div></div></td>';}
 
									else {echo 'style="background-color:#efecca;"><div></div></td>';} 
									 $nom1 = $donnees['nom'];
						endforeach; 
						 
								 }
			

			?>
 
							
 
				</tr>
 
			   <?php
			 } // fin du While
			$abs->closeCursor(); // Termine le traitement de la requête
			?>
  </tbody>
 </table>
 <!-- fin du reste du tableau---------------------------------------------------------------------------------------------------------------------------->
 
 
 
		</div>
 
	</div> <!-- /container -->
 
</body>
</html>
 
</body>
</html>
et la copie d'ecran
[img]
http://www.atikhan.fr/Sanstitre.jpg
[/img]

Re: Probleme d'affichage php/SQL

par team94 » 25 mai 2016, 14:06

Bonjour,

Non je m'arrache le peu de cheveux qu'il me reste ;-)

Re: Probleme d'affichage php/SQL

par L3oMI » 25 mai 2016, 14:03

Hello,
As-tu solutionné ton problème ?

Re: Probleme d'affichage php/SQL

par Spols » 23 mai 2016, 16:42

En gros, voici ce que je te proposerai de faire

Pour chaque persone, pour chaque jour du mois, check si il est présent dans une des périodes du tableau sinon, check si jour férié ou WE sinon affichage par défaut

le plus simple est peut être une variable à laquelle tu donnes la valeur par défaut (jour normal) en début de boucle,
tu check si jour férie si oui tu réécris la variable (jour férié)
tu check si WE => si oui tu réécris la variable
tu check pour chacune des période de vacance si oui tu réécris la variable

en enfin juste avant l'accolade du foreach des jours du mois tu gère l'aéffichage en fonction de la valeur de ta variable.
Garde bien tous l'affichage au même endroit tu auras plus facile à maintenir / débuggé ton code.

Re: Probleme d'affichage php/SQL

par team94 » 23 mai 2016, 14:49

Pas de souci et je te remercie vraiment de ne pas me lâcher ( ce qui serait compréhensible vu mon niveau ;-))
je vais essayer de faire des tests si j'avance je post
merci encore
bonne journée.

Re: Probleme d'affichage php/SQL

par Spols » 23 mai 2016, 13:43

Ok je vois,

le script crée trop de case dans ton tableau

cela est du au fait que pour chaque jour, il teste toutes les périodes de vacances. Si il y a 2 périodes, il va afficher 2 cases.

Il faut donc modifier le flux, pour que le foreach (le dernier, le plus profond) s'arête quand la date est entre les bornes d'un congé. Il faudra surement aussi voir pourquoi il affiche CM et CA alors qu'il ne devrait en afficher qu'un.
Il faut revoir les boucles entièrement, je n'ai pas le temps pour l'instant, mais si j'ai un peu de temps cet aprem, je penserai à ton problème

Re: Probleme d'affichage php/SQL

par team94 » 23 mai 2016, 09:31

et merci d'expliquer le raisonnement ce n'est pas évident quand on débute

Re: Probleme d'affichage php/SQL

par team94 » 23 mai 2016, 09:27

bonjour spols, en faisant la modifs cela me fait un truc bizarre au niveau de l'affichage

le code :
<?php  while ($donnees = $abs->fetch())
    { 
		$name = $donnees['nom'].$donnees['prenom']; //Je concatène les deux, J'assume qu'il n'y aura pas 2 personnes ayant le même couple nom/prenom

		if (empty($temp_conge[$name]))$temp_conge[$name] = array('nom' => $donnees['nom'], 'prenom' => $donnees['prenom']);
		$temp_conge[$name]['conge'][] = array( 'date_debut' => $donnees['date_debut'], 'date_fin' => $donnees['date_fin'], 'abrev_conges' => $donnees['abrev_conges']);
      }    

      $abs->closeCursor(); // Termine le traitement de la requête
		foreach($temp_conge as $conges) {

	?>

			<tr>

		      <td style="width:100px; vertical-align:middle; background-color:#F6E497;"><?php echo $conges['nom']; ?></td>
		      <td style="width:100px; vertical-align:middle; background-color:#F6E497;"><?php echo $conges['prenom']; ?></td>

			<?php foreach($datesMonth as $d): ?>

		    <?php 	$w=date('w', strtotime($d));
		      		$days=date(strtotime($d));
		      		$day=date($d);
		      		$date_deb = strtotime($conge['date_debut']);
		        	$date_fin = strtotime($conge['date_fin']);
		      		 foreach($conges['conge'] as $conge) {
		        	
		           
		    ?>
		                              
		                                
		      <td <?php 
		            if ($date_deb<=$days && $days <=$date_fin && $conge['abrev_conges'] == 'CA' ) { echo 'style="background-color:#ff2000;"><div>'.$conge['abrev_conges'].'</div></td>';}

		            else if ($date_deb<=$days && $days <=$date_fin && $conge['abrev_conges'] == 'CM' ) { echo 'style="background-color:#9358C6;"><div>'.$conge['abrev_conges'].'</div></td>';}
		             
		            else if ($day==$vic_allie OR $day==$an OR $day==$prem OR $day==$fet_nation OR $day==$assomp OR $day==$touss OR $day==$arm OR $day==$no OR $day==$paq OR $day==$asc OR $day==$pent){ echo 'style="background-color:#FE9000;"><div></div></td>';}
		             
		            else if ($w==0 OR $w==6) { echo 'style="background-color:#ccc;"><div></div></td>';}

		            else {echo 'style="background-color:#efecca;"><div></div></td>';} ?>
     
    <?php 	 } /** accolade déplacé */?> 
    <?php  endforeach; print_r($conge); ?> 

<?php } ?>   
 		 

                              
    </tr>
    
  </tbody>
 </table>
l'affichage:
Image

Re: Probleme d'affichage php/SQL

par Spols » 23 mai 2016, 08:29

Je pense avoir trouvé le problème (à supposer qu'il n'y en avait qu'un

$temp_conge[$name] = array('nom' => $donnees['nom'], 'prenom' => $donnees['prenom']);
à chaque itération de lecture des résultat de la base de donnée, cette instruction écrase les congé précédents
en ajoutant une condition, ca devrait être mieux.
if (empty($temp_conge[$name])) $temp_conge[$name] = array('nom' => $donnees['nom'], 'prenom' => $donnees['prenom']);

Pour info et pour te permettre d'évoluer, voici mon schéma de pensée.

Ton print_r affiche toujours le même tableau de conges par personnes ne comprenant toujours qu'un seul congé. Il y a donc un problème lors du remplissage de ce tableau et nonlors de son affichage. Je relis donc la partie remplissage et comprenant bien chaque instruction et en parcourant mentalement les instructions sur plusieurs itérations. Je m'aperçois qu'il y a écrasement plutot que complètion.