Probleme niveau "Mois" SQL Décalage

Résolu/Fermé
James007b4 Messages postés 15 Date d'inscription mercredi 21 juin 2017 Statut Membre Dernière intervention 22 août 2017 - 22 juin 2017 à 13:20
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 - 22 juin 2017 à 16:01
Bonjour,

C'est encore moi, ma dernière question...

J'ai un petit problème,

j'ai une page qui génère un tableau avec les mois allant de Octobre a septembre (fixé écrit à la mains se sont les cellules qui sont générées ).
Dans les TD en dessous des 'mois', je vais chercher mes valeurs dans ma BDD avec la commande ci dessous pour les classer par mois et annee :

$req = "SELECT ID,Nom,secteur,Secteur_ID, MONTH(Date) AS mois, YEAR(Date) AS Annee, COUNT(DISTINCT Chantier) AS visite FROM visite_chantier WHERE Secteur_ID = 6 GROUP BY annee, mois";
		$res = mysql_query($req) ;

		//Boucle 
		while ($row = mysql_fetch_array($res))
		{
 
    			echo "<td>  ".$row['visite']." </td>";
    			$cellule2 = ($row['visite']/1)*100;
    				if($cellule2 >= 100)
    				{
    					echo "<td bgcolor='#C6EFCE'>  ",$cellule2,"%</td>";
    				}
    				else if($cellule2 = 0) 
    				{
    					echo "<td bgcolor='#FFC7CE'>0</td>";
    				}
				
		 }


Sauf que parfois mon Secteur_ID est différent donc ca veux dire que

Secteur_ID = 1 :
Octobre pas de visite, novembre visite, decembre visite, janvier pas de visite, fevrier visite...

Secteur_ID = 3 :
Octobre visite, novembre visite, decembre visite, janvier visite, fevrier visite...

La commande fonctionne, est donc
pour reprendre le tableau ( Secteur_ID= 1 par exemple ), les visites du mois de novembres vont dans le mois d'octobre, il y a un décalage. Ceux qui est normal vu qu'il n'y pas de visite au mois d'octobre donc vide ( rien ne s'affiche depuis la commande SQL sur phpmyAdmin normal )

La question est : Comment je fais pour ne pas avoir de décalage ?

Merci beaucoup de votre aide, grâce à votre aide je pourrais débloquer le reste du projet.

1 réponse

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
Modifié le 22 juin 2017 à 13:49
Bonjour,

1 - Attention, l'extension mysql était obsolète en PHP 5.5.0, et a été supprimée en PHP 7.0.0.
https://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete#top

À la place, tu peux (<gras DOIS </gras> ) utiliser l'extension MySQLi ou l'extension PDO_MySQL
https://www.commentcamarche.net/faq/44117-connexion-a-une-base-avec-pdo-mysqli

Si tu choisis PDO, pense à activer la gestion des erreurs : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs


2 - Ton script affiche ce qui vient de ta bdd.
Si tu n'as pas de données pour le mois d'octobre ... il ne va pas pouvoir l'inventer !
A la limite, tu peux faire une boucle sur chaque MOIS et pour chaque mois afficher la valeur (si elle existe sinon vide) de ta requête....
Pour t'en dire plus il faudrait que nous connaissions le contenu du résultat de ta requête.
Tu pourrais, pour ce faire, mettre en commentaire tes ECHO et à la place nous faire un
 print_r($row);



PS: Tes lignes de code suivantes :
if($cellule2 >= 100)
        {
         echo "<td bgcolor='#C6EFCE'>  ",$cellule2,"%</td>";
        }
        else if($cellule2 = 0) 
        {
         echo "<td bgcolor='#FFC7CE'>0</td>";
        }

peuvent s'écrire plus proprement comme ceci :
 $cel2 = $cellule2 >= 100 ? "<td bgcolor='#C6EFCE'>  ",$cellule2,"%</td>" : ($cellule2 = 0 ? "<td bgcolor='#FFC7CE'>0</td>" : "");
echo $cel2;



Cordialement, 
Jordane                                                                 
0
James007b4 Messages postés 15 Date d'inscription mercredi 21 juin 2017 Statut Membre Dernière intervention 22 août 2017
Modifié le 22 juin 2017 à 14:01
Je vais passer sous PDO quand sa sera fais comme ca, le plus dur sera finis :)

voici le résultat de ma requête sous phpMyAdmin c'est mieux je pense.


Ensuite si on prends l'ID 1, c'est pareil sauf que sa commence a 12.
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > James007b4 Messages postés 15 Date d'inscription mercredi 21 juin 2017 Statut Membre Dernière intervention 22 août 2017
22 juin 2017 à 14:11
ben en fait .. j'aurai préféré avoir les valeurs présentées sous forme de code
array([0]=> array(
   'ID'=>161
   'Nom' = '****'
   'Secteur_ID'=>3

etc...


Ca serait plus simple pour te proposer un code par la suite que si je dois recréer manuellement l'array pour simuler la requête chez moi.... (pas envie de créer une table juste pour ça....)

mais bon...
Tu peux retravailler la sortie de ta requête pour en faire un Array associatif ayant pour clés : l'année, puis le mois ...
Un truc du genre

$newArray = array();
while ($row = mysql_fetch_array($res)) {
 $annee = $row['annee'];		
 $mois = $row['mois'];
 $newArray[$annee][$mois] = $row;
}

Puis pour afficher les données dans ton tableau...
for ($a = 2017 ; $a<=2018;$a++){
 for($m = 1 ; $m<=12;$m++){
   $visite = !empty($newArray[$a][$m]['visite']) ? $newArray[$a][$m]['visite'] : 0;
   echo "<td>".$visite . "</td>";

  }
}
0
James007b4 Messages postés 15 Date d'inscription mercredi 21 juin 2017 Statut Membre Dernière intervention 22 août 2017 > jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024
22 juin 2017 à 14:23
Array ( 
[0] => 150 
[ID] => 150 
[1] => *****
[Nom] => *****
[2] => Parking
[secteur] => Parking
[3] => 10 
[Secteur_ID] => 10
[4] => 10 
[mois] => 10 
[5] => 2016 
[Annee] => 2016 
[6] => 2 
[visite] => 2 ) 

Array ( 
[0] => 158 
[ID] => 158 
[1] => *****
[Nom] => *****
[2] => Parking 
[secteur] => Parking 
[3] => 10 
[Secteur_ID] => 10
[4] => 11 
[mois] => 11 
[5] => 2016
[Annee] => 2016 
[6] => 5 
[visite] => 5 
) 

Array (
[0] => 214 
[ID] => 214 
[1] => ******
[Nom] => ******
[2] => Parking
[secteur] => Parking
[3] => 10
[Secteur_ID] => 10 
[4] => 12
[mois] => 12
[5] => 2016
[Annee] => 2016
[6] => 3 
[visite] => 3 
) 


les étoiles sont les noms.

Je vais essayer le code ci dessus avec les petites modif
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > James007b4 Messages postés 15 Date d'inscription mercredi 21 juin 2017 Statut Membre Dernière intervention 22 août 2017
22 juin 2017 à 14:32
deux petites remarques :
- On évite de mettre des majuscules dans le nom des tables ou des champs d'une BDD.
En général on écrit tout en minuscule.

- Comme déjà dit.. tu es avec l'ancienne extension de mysql .... je t'invite vivement à passer à PDO ou mysqli.
0
James007b4 Messages postés 15 Date d'inscription mercredi 21 juin 2017 Statut Membre Dernière intervention 22 août 2017
Modifié le 22 juin 2017 à 15:20
Je suis passé sous PDO, j'ai plus mes variables affichées mais je vais les remettre
0