Signaler

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

Posez votre question James007b4 15Messages postés mercredi 21 juin 2017Date d'inscription 22 août 2017 Dernière intervention - Dernière réponse le 22 juin 2017 à 16:01 par jordane45
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.
Utile
+0
plus moins
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 18319Messages postés mercredi 22 octobre 2003Date d'inscription ModérateurStatut 25 septembre 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.
Répondre
James007b4 15Messages 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
Répondre
jordane45 18319Messages postés mercredi 22 octobre 2003Date d'inscription ModérateurStatut 25 septembre 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;
  }
}

Répondre
James007b4 15Messages 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 )
Répondre
jordane45 18319Messages postés mercredi 22 octobre 2003Date d'inscription ModérateurStatut 25 septembre 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
Répondre
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !