Menu

Probleme niveau "Mois" SQL Décalage [Résolu]

James007b4 15 Messages postés mercredi 21 juin 2017Date d'inscription 22 août 2017 Dernière intervention - 22 juin 2017 à 13:20 - Dernière réponse : jordane45 20624 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 26 avril 2018 Dernière intervention
- 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.
Afficher la suite 

9 réponses

Répondre au sujet
jordane45 20624 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 26 avril 2018 Dernière intervention - Modifié par jordane45 le 22/06/2017 à 13:49
0
Utile
8
Bonjour,

1 - Attention, l'extension mysql était obsolète en PHP 5.5.0, et a été supprimée en PHP 7.0.0.
http://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
http://www.commentcamarche.net/faq/44117-connexion-a-une-base-avec-pdo-mysqli

Si tu choisis PDO, pense à activer la gestion des erreurs : http://www.commentcamarche.net/faq/46512-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                                                                 
jordane45 20624 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 26 avril 2018 Dernière intervention > James007b4 15 Messages postés mercredi 21 juin 2017Date d'inscription 22 août 2017 Dernière intervention - 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.
James007b4 15 Messages postés mercredi 21 juin 2017Date d'inscription 22 août 2017 Dernière intervention - 22 juin 2017 à 15:08
Je suis passé sous PDO, j'ai plus mes variables affichées mais je vais les remettre
jordane45 20624 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 26 avril 2018 Dernière intervention > James007b4 15 Messages postés mercredi 21 juin 2017Date d'inscription 22 août 2017 Dernière intervention - 22 juin 2017 à 15:42
En PDO, tu peux faire un fetchAll() pour stocker directement le résultat de ta requête dans un array.

Et ensuite, boucler dessus pour construire l'array dont je te parlais
$sql = "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";

try{
  $prep = $bdd->prepare($sql);
 $prep->execute();
 $result = $prep->fetchAll();
}catch(Exception $e){
 echo "Erreur : ".$e->getMessage();
}

$newArray = array();
if(!empty($result)){
  foreach($result as $row){
    $annee = $row['annee'];  
    $mois = $row['mois'];
    $newArray[$annee][$mois] = $row;
  }
}

James007b4 15 Messages postés mercredi 21 juin 2017Date d'inscription 22 août 2017 Dernière intervention - 22 juin 2017 à 15:53
J'ai une erreur, après avoir remplacé le code.
Vous l'avez aussi ? (Error 500, sa vient du PHP mais je peux pas l'a voir, alors que j'ai le catch bizarre )
jordane45 20624 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 26 avril 2018 Dernière intervention > James007b4 15 Messages postés mercredi 21 juin 2017Date d'inscription 22 août 2017 Dernière intervention - 22 juin 2017 à 16:01
alors non moi je n'ai rien .... vu que je n'ai pas tes fichiers et que je ne code pas le site sur mon poste ....

Par contre... montres nous ce que tu as fait.. on essaiera de te le corriger
Commenter la réponse de jordane45