Résultat d'une requête dans un tableau

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 : Résultat d'une requête dans un tableau

par jay64 » 17 sept. 2008, 16:44

Non, le problème est strictement identique !

Si ça peut faire avancer le schmilblick, cela me génère une erreur lors du dessin d'un graphe avec artichow, dont le code est le suivant :
 // On récupère les valeurs à afficher sur le graphique dans $_GET['values'] et on les désérialize
	$data_notes = unserialize(urldecode($_GET['notes']));  
	$data_nombres_notes = unserialize(urldecode($_GET['nombres_notes']));
	$NoteMoyenne = 13;
 
// Ici, le graphique mesurera 480 x 400 pixels. 
   $graph = new Graph(480, 400); 

   // L'anti-aliasing permet d'afficher des courbes plus naturelles, 
   // mais cette option consomme beaucoup de ressources sur le serveur. 
   $graph->setAntiAliasing(TRUE); 
 
   // On créé l'histogramme à base des valeurs de l'axe Y 
   $plot = new BarPlot($data_nombres_notes); 
    
   // On spécifie les noms des séries X 
   $plot->xAxis->setLabelText($data_notes);  
    
   // On donne des titres aux axes XY 
   $plot->yAxis->title->set("Nombres de notes"); 
   $plot->xAxis->title->set("Notes"); 
   
   //on ajoute la légende
   $Legende = "Note du match :".$NoteMoyenne;
   $plot->title->set($Legende);
    
   // Ajoute une couleur de fond aux barres 
   $plot->setBarColor( 
      new Color(250, 230, 180) 
   ); 

   // On ajoute 5 % d'espace à gauche et à droite de l'histogramme. 
   // On ne change pas l'espace du haut et du bas de l'histogramme. 
   $plot->setSpace( 
      5, /* Gauche */ 
      5, /* Droite */ 
      NULL, /* Haut */ 
      NULL /* Bas */ 
   ); 

   // On choisit une ombre de 3 pixels 
   $plot->barShadow->setSize(3); 
   // On place l'ombre sur les côtés haut et droit. 
   // Si vous utilisez Artichow pour PHP 4 & 5, transformez Shadow::RIGHT_TOP en SHADOW_RIGHT_TOP 
   $plot->barShadow->setPosition(SHADOW_RIGHT_TOP); 
   // On veut une ombre de couleur grise 
   $plot->barShadow->setColor(new Color(180, 180, 180, 10)); 
   // On choisit de lisser les extrémités de l'ombre 
   $plot->barShadow->smooth(TRUE); 

   // Une fois votre histogramme correctement paramétré, il est nécessaire de l'ajouter au graphique 
   $graph->add($plot); 

   // Afficher à l'écran 
   $graph->draw(); 
le message d'erreur étant le suivant :
unserialize() [function.unserialize]: Error at offset 9 of 124 bytes in /homepages/.../detail_note_match.php on line 37

par guilt92 » 17 sept. 2008, 16:34

Et si tu fais :
// On récupère les valeurs à afficher sur le graphique dans $_GET['values'] et on les désérialize 
   $data_notes = unserialize(urldecode($_GET['notes'])); 
   $data_nombres_notes = unserialize(urldecode($_GET['nombres_notes']));
?

Si jamais le urlencode modifie des caractères... Mais je ne comprends pas pourquoi ca marcherai avec un tableau remplit à la main et pas avec une bdd....

Par le même ordre je me demandais si tu avais des différences dans le traitement parce que les valeurs récupérées en base étaient pas dans le même ordre, mais si rien ne marche c'est bizarre...

par jay64 » 17 sept. 2008, 16:24

Je te montre un morceau de code plus large que tu vois l'ensemble :
			$resultat = mysql_query("SELECT Texte, COUNT(*) as Occurences FROM Votes WHERE IdMatch = '$RefMatch' GROUP BY Texte ORDER BY Texte"); 
			$notes = array(); 
			$nombre_notes = array(); 
			while ($row = mysql_fetch_array($resultat))
			{ 
				// Etiquettes de l'axe X 
			   $notes[] = $row["Texte"]; 
			   
			   // Les valeurs à afficher sur l'histogramme (Axe Y) 
			   $nombres_notes[] = $row["Occurences"]; 
			} 
			
			//$notes = array(7, 9, 13, 15, 17,4, 5, 6, 12);
			//$nombres_notes = array (1, 3, 2, 3, 1, 1, 3, 2, 3);
			
			//print_r($notes);
			// On sérialize les valeurs du tableau et on les passe à detail_note_match.php
		   echo "<img src='../graphiques/detail_note_match.php?notes=".urlencode(serialize($notes))."&nombres_notes=".urlencode(serialize($nombres_notes))."' alt='Mon graphique'/>";
et ensuite, j'ai le fichier detail_note_match.php qui récupère tout ça de la manière suivante :
 // On récupère les valeurs à afficher sur le graphique dans $_GET['values'] et on les désérialize
   $data_notes = @unserialize($_GET['notes']);
   $data_nombres_notes = @unserialize($_GET['nombres_notes']);
Qu'entends-tu par ordre identique ? Moi j'ai l'impression que c'est pareil ...

par guilt92 » 17 sept. 2008, 16:17

C'est quand même étrange...

Tu es sur que les variables sont dans le même ordre avec ta requete ou à la main ? Cela pourrait etre ca ? Que fais tu de tes variables apres ?

Parce que en théorie si le print_r est bon alors le traitement est le même...

par jay64 » 17 sept. 2008, 16:09

Oui, le print_r de la variable alimentée par la boucle est bonne et affiche exactement la même chose que si je construis mon array manuellement.
C'est ça qui est dingue !

C'est après quand je fais un serialize() puis un unserialize() que ça plante.

par guilt92 » 17 sept. 2008, 15:24

Bonjour,

Es tu sur que ta requete fonctionne bien ?
Si tu fais un echo des valeurs dans la boucle ca affiche les bonnes valeurs ?

Et apres la boucle, si tu fais un print_r($notes) qu'obtiens tu ?

Précision : tu peux simplifier la boucle while, sachant que $resultat ne bouge pas tu n'a pas à la mettre dans la boucle et peux te contenter de
while ($row = mysql_fetch_array($resultat)) 

Résultat d'une requête dans un tableau

par jay64 » 17 sept. 2008, 15:05

Bonjour à tous,

Je cherche à alimenter deux variables sous forme de tableau.

Quand je fais manuellement :
$notes = array(7, 9, 13, 15, 17);
$nombres_notes = array (1, 3, 2, 3, 1);
la suite de mon traitemenet fonctionne très bien, par contre, quand je le code depuis une requête de cette manière cela ne fonctionne plus :
$resultat = mysql_query("SELECT Texte, COUNT(*) as Occurences FROM Votes WHERE IdMatch = '$RefMatch' GROUP BY Texte ORDER BY Texte"); 
			$notes = array(); 
			$nombre_notes = array(); 
			while ($resultat && $row = mysql_fetch_array($resultat))
			{ 
				// Etiquettes de l'axe X 
			   $notes[] = $row["Texte"]; 
			   
			   // Les valeurs à afficher sur l'histogramme (Axe Y) 
			   $nombres_notes[] = $row["Occurences"]; 
			} 
Pourriez-vous me dire ce qui ne va pas dans ce dernier morceau de code.

Merci,

Jérôme