format 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 : format tableau

par konjiki » 05 mai 2006, 01:00

ok je comprend je pense que j'ai du abuser un peu merci quand même :wink:

par mere-teresa » 04 mai 2006, 18:48

Trop de code à lire.

par konjiki » 04 mai 2006, 17:02

pas d'idées?

par konjiki » 04 mai 2006, 15:02

bon les gars je comprend de moins en moins, j'ai essayé les solution que vous m'avez proposé mais y a pas de changement :( . J'ai donc essayé autre chose:
regarder ça:
print_r($tab_current_year);
echo "<br>";
//$data=serialize($tab_current_year);



$val1=150;
$val2=106;
$val3=30;
$val4=7;
$val5=0;
$val6=11;
$val7=1;
$val8=42;
$val9=23;
$val10=23;
$val11=23;
$val12=23;
$val13=23;

$data2 = array($val1,$val2,$val3,$val4,$val5,$val6,$val7,$val8,$val9,$val10,$val11,$val12,$val13,);
print_r($data2);
//$data=serialize($data2);
dans la premiere partie je fais comme c'était avant donc les resultats de mes requetes sont dans $tab_current_year. Là les parametre ne sont pas passés à la fonction (le code suit plus bas).
Mais quand j'affecte des valeurs $val1,$val2 ... dans un tableau et que je les fais passer en parametre ça marche :shock:
J'ai aussi testé mes valeurs de tableau avec la fonction is_numeric, et c'est bien des données de type numerique.
je vous redonne les partie de code importantes
requete:
$tab_last_year=array();
for($i = 1; $i <= 13; $i++){

if($month<10){
$month = "0".$month;}

if($monthm<10){
$monthm = "0".$monthm;}

if($month<1){
$month=12;
$annee_precedente=$annee_precedente-"01";
}

if($monthm<1){
$monthm=12;}

if($day<1){
$day=30;}

$req = "select count(id) as nb_news from news where `timestamp` between 200$annee_precedente$monthm$fin_requete and 200$annee_precedente$month$fin_requete";
//echo " $req <BR>";

$result = mysql_query($req) or die( $req . '<br />' . mysql_error() );
$row = mysql_fetch_array($result, MYSQL_ASSOC);
$monthm = $monthm-1;
$month = $month-1;
$tab_last_year[$i].= $row["nb_news"];

}
serialize:
print_r($tab_current_year);
echo "<br>";
//$data=serialize($tab_current_year);



$val1=150;
$val2=106;
$val3=30;
$val4=7;
$val5=0;
$val6=11;
$val7=1;
$val8=42;
$val9=23;
$val10=23;
$val11=23;
$val12=23;
$val13=23;

$data2 = array($val1,$val2,$val3,$val4,$val5,$val6,$val7,$val8,$val9,$val10,$val11,$val12,$val13,);
print_r($data2);
//$data=serialize($data2);
et la fonction d'affichage:
<?php
//recuperation des valeurs du tableau
$data=unserialize($_GET['txt']);

//appel de la fonction
hist_vert($data);

function hist_vert($data){

$hauteur_tot	= "275";
$largeur_tot	= "800";

$hauteur	= "250";
$largeur	= "600";
$im=ImageCreate($largeur_tot,$hauteur_tot);

//definition des couleurs
$fond=ImageColorAllocate($im,245,245,245);
$blanc=ImageColorAllocate($im,255,255,255);
$noir=ImageColorAllocate($im,0,0,0);
$rouge[0]=ImageColorAllocate($im,255,10,10);
$rouge[1]=ImageColorAllocate($im,255,30,30);
$rouge[2]=ImageColorAllocate($im,255,50,50);
$rouge[3]=ImageColorAllocate($im,255,90,90);
$rouge[4]=ImageColorAllocate($im,255,90,90);
$rouge[5]=ImageColorAllocate($im,255,50,50);
$rouge[6]=ImageColorAllocate($im,255,30,30);
$rouge[7]=ImageColorAllocate($im,255,10,10);
$bleu=ImageColorAllocate($im,0,0,255);
$orange[0]=ImageColorAllocate($im, 255,180,34);
$orange[1]=ImageColorAllocate($im, 255,200,54);
$orange[2]=ImageColorAllocate($im, 255,220,74);
$orange[3]=ImageColorAllocate($im, 255,240,94);
$orange[4]=ImageColorAllocate($im, 255,240,94);
$orange[5]=ImageColorAllocate($im, 255,220,74);
$orange[6]=ImageColorAllocate($im, 255,200,54);
$orange[7]=ImageColorAllocate($im, 255,180,34);

//couleur de fond du graphique
ImageFilledRectangle ($im, 50, 10,$largeur, $hauteur-20, $blanc);

//ligne horizontal
Imageline($im,50,$hauteur-20,$largeur,$hauteur-20,$noir);
//fin ligne horizontal

//pointillés hori
for($espace=1; $espace<=4; $espace++){
ImageDashedLine($im, 50, 250-(50*$espace), 600, 250-(50*$espace), $bleu);}
/*//aff unités
for($espace=1; $espace<=4; $espace++){
ImageString($im,4,20,240-(50*$espace),(30*$espace),$noir);}
//fin aff unités*/

//aff jours
for($jour=2; $jour<=13; $jour++){
ImageString($im,4,($jour*40),$hauteur-20,$jour-1,$noir);}
//fin aff jours

//ligne vert
Imageline($im,50,10,50,$largeur-370,$noir);
$maxdata=210;

    for ($jour=2; $jour<=13; $jour++) {
		$hauteurImageRectangle = round(($data[$jour-1]*$hauteur)/$maxdata);

		if($data[$jour-1]>=80){//condition pour aff couleur
//affiche baton
		//degradé
		for($i=0; $i<=7; $i++) { 
		ImageFilledRectangle ($im, $jour*40, $hauteur-$hauteurImageRectangle, $jour*40+10-(2*$i), $hauteur-20, $orange[$i]);
		}//fin degradé

		ImageString ($im, 4, $jour*40, $hauteur-$hauteurImageRectangle-20, $data[$jour-1], $noir);
		}
//affiche baton
		else{
		//degradé
		for($i=0; $i<=7; $i++) { 
        	ImageFilledRectangle ($im, $jour*40, $hauteur-$hauteurImageRectangle, $jour*40+10-(2*$i), $hauteur-20, $rouge[$i]);
		} //fin degradé
        	ImageString ($im, 4, $jour*40, $hauteur-$hauteurImageRectangle-20, $data[$jour-1], $noir);
    		}
				} 
//envoie de l'entête MIME
header("content-type:image/png");
//creation format PNG
ImagePng($im);
//cloture de l'entête MIME
//return($im);
imageDestroy ($im);
}
?> 
le post est un peu long j'espere que ça ira. Merci

par mere-teresa » 04 mai 2006, 11:32

par konjiki » 04 mai 2006, 11:24

la fonction "intvalue" n'est pas reconnu par php. rude :(

par Ryle » 04 mai 2006, 10:54

Tu peux l'utiliser au moment ou tu récupères la valeur de ta requête, mais je viens de voir où était ton problème :
$tab_current_year[$i].= $row["nb_news"]; 
En fait au lieu de mettre la valeur récupérée directement dans $tab_current_year[$i], tu la concatènes à la valeur existante (qui est vide) à cause du ".=". Du coup, php considère qu'il s'agit d'une chaine (puisqu'il y a eu concaténation)

Essaye de virer le point, ça devrait mieux marcher :)
$tab_current_year[$i] = $row["nb_news"];

// le intvalue aurait été placé ici, mais le problème serait resté le même, vu que tu lui disais ensuite qu'il s'agissait d'une chaine à concatener :)
// $tab_current_year[$i].= intvalue($row["nb_news"]);

par konjiki » 04 mai 2006, 10:47

comment je me sert de cette fonction et ou stp ?

par Ryle » 04 mai 2006, 10:41

Quand tu dis que ça te fais tout foiré, qu'est ce que tu attends et qui ne fonctionne pas exactement ?

Le fonctionnement est normal, le "s:" signifie qu'il considère que la valeur est une chaine de caractère (s pour String).
"s:6:"valeur" signifie une Chaine, de 6 caractère, qui est "valeur"

En gros, cela veut dire que les résultats de ta requête ne sont pas considérés comme des nombres, mais comme des chaines.. tu peux spécifier explicitement le format avec la fonction intvalue() si nécessaire.. tout dépend de la façon dont tu génère l'objet et dont tu le traite ensuite :)

par konjiki » 04 mai 2006, 10:36

la requete est dans une boucle et je met le resultat de chaque requete dans un tableau
$tab_current_year=array();
for($i = 1; $i <= 7; $i++){

if($day<10){
$day = $day;}

if($day_precedent<10){
$day_precedent = "0".$day_precedent;}

if($day<1){
$day=31;
$annee_precedente=$annee_precedente-"01";
}

if($day_precedent<1){
$day_precedent=31;}

$req 	= "select count(id) as nb_news from news where `timestamp` between 200$annee$month$day_precedent and 200$annee$month$day";
//echo $req."<br>";
$result = mysql_query($req) or die( $req . '<br />' . mysql_error() );
$row 	= mysql_fetch_array($result, MYSQL_ASSOC);
$day_precedent 	= $day_precedent-1;
$day 	= $day-1;
$tab_current_year[$i].= $row["nb_news"];
}
et apres je fais comme ça
$data=serialize($tab_current_year);
et je recupe le parametre

Code : Tout sélectionner

<img src="fonctions/hist_vert.php?txt=$data"></img>

par guilt92 » 04 mai 2006, 10:33

Bah commence par nous donner les requetes ! :wink:

format tableau

par konjiki » 04 mai 2006, 10:27

salut,
alors voila j'ai un probleme avec serialize, je vous explique: lorsque je met des valeurs dans un tableau et que j'applique "serialize" tous ce passe bien, le probleme vient quand je remplis mon tableau avec des resultats de requetes.
voila le format de mon tableau (rempli à la main)
a:9:{i:0;i:728;i:1;i:727;i:2;i:685;i:3;i:662;i:4;i:608;i:5;i:597;i:6;i:510;i:7;i:477;i:8;i:417;}
et le format de mon tableau rempli avec les requetes
a:13:{i:1;s:2:"14";i:2;s:2:"23";i:3;s:2:"17";i:4;s:2:"23";i:5;s:2:"42";i:6;s:1:"1";i:7;s:2:"11";i:8;s:1:"0";i:9;s:1:"7";i:10;s:2:"30";i:11;s:3:"106";i:12;s:3:"209";i:13;s:1:"0";}
je ne vois pas trop ce que c'est que ces "s:" et je pense que c'est ça qui me fait tout foiré. Si quelqu'un avait une reponse ce serai cool :D

Si besoin est je rajouterai des partie de code. Merci