Avatar billede mazey Praktikant
12. april 2006 - 00:31 Der er 9 kommentarer og
1 løsning

Skal have lavet en løkke til at lave kode 18 gange

Hej eksperter...

Jeg har brugt noget der hedder jpgraph til at lave en masse grafer og det virker som det skal, men jeg mangler en sidste ting, som jeg håber i kan hjælpe med...

Jeg skal have lavet en løkke så den kan tegne 18 forskellige grafer...
Graferne er ens, bortset fra at dataen der skal bruges er forskellige fra hinanden.

Koden som jeg skal have genereret 18 gange så den viser 18 forskellige grafer under hinanden ser ud som følger ->

if($value == "hole"){

$z = 1;
$hvor = "statscore_$z";
$overskrift = "Gennemsnit for hul $z";



$testraekker = mysql_query("SELECT * FROM statscore WHERE statscore_spid = $spid $klubid AND YEAR = $year ");
$antalraekker = mysql_num_rows($testraekker);


$query = mysql_query("SELECT * FROM statscore WHERE statscore_spid = $spid $klubid AND YEAR = $year  ORDER BY statscore_id  ") or die(mysql_error());

$ydata=Array();
while($data33 = mysql_fetch_array($query)) {
 
    $totalslag += $data33[$hvor];
    $runder++;
    $gnsnit = $totalslag / $runder;
    //echo $gnsnit."<br>";
    $ydata[]=$gnsnit;
}
// Create the graph. These two calls are always required
// Create the graph. These two calls are always required
$query1 = mysql_query("SELECT statscore_dato FROM statscore WHERE statscore_spid = $spid $klubid ORDER BY statscore_id ") or die(mysql_error());

$datax = array();
while($data333 = mysql_fetch_array($query1)) {
$datax[] = $data333['statscore_dato'];
}

$graph = new Graph(700,500);   
$graph->SetScale('textlin',$starttal,$sluttal);

// Adjust the margin
$graph->img->SetMargin(60,40,40,80);
$graph->SetShadow();
$graph->yaxis->HideTicks();  // Skjul mærker mellem hvert nummer på y aksen
$graph->xaxis->SetTextLabelInterval(2); //Hver anden dato vises
$graph->yaxis->SetLabelmargin(20);
//$graph->AddLine(new PlotLine(HORIZONTAL,3,"red",1)); //LINIE
$graph->SetMarginColor('#3e3e3e');



// Create the linear plot
$lineplot=new LinePlot($ydata);
$lineplot->mark->SetType(MARK_CIRCLE);
$lineplot->value->show();
$lineplot->value->SetColor('red');
$lineplot->value->SetFont(FF_VERDANA,FS_NORMAL, 8);
$lineplot->value->SetFormat('%0.1f');
$lineplot->AddArea(0,$antalraekker,LP_AREA_FILLED,"#908251");
$lineplot->value->SetMargin(10);
//$lineplotp->SetStepStyle();  // Lav grafen med fald (trappe agtigt)
//$graph ->yaxis->SetWidth( 2);


// Setup X-scale
$graph->xaxis->SetTickLabels($datax);
$graph->xaxis->SetFont(FF_VERDANA,FS_NORMAL,7);
$graph->xaxis->SetColor('white');
$graph->yaxis->SetColor('white');
$graph->xaxis->SetLabelAngle(90);
$graph->xaxis->SetLabelMargin(10);
//$graph->SetTitleBackground('wheat2',TITLEBKG_STYLE1,TITLEBKG_FRAME_BOTTOM);
$graph->SetBackgroundImage("logo.jpg",BGIMG_CENTER);
$graph->SetBackgroundImageMix(40);

// Add the plot to the graph
$graph->Add($lineplot);

$graph->title->Set("$overskrift");
$graph->title->SetColor("white");
//$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("$ytitel");
$graph->yaxis->title->SetColor("white");
$graph->yaxis->SetTitlemargin(45);

$graph->title->SetFont(FF_FONT2,FS_BOLD,8);
$graph->yaxis->title->SetFont(FF_VERDANA,FS_NORMAL,8);
$graph->xaxis->title->SetFont(FF_VERDANA,FS_BOLD,8);


$lineplot->SetColor("black");
$lineplot->SetWeight(1);


// Display the graph
$graph->Stroke();
}

Det jeg så har forsøgt mig med er at lave en variabel ($z) som jeg så ville sætte efter hver variabel hvorefter det så skulle blive til 18 forskellige grafer, men det er ikke lykkes mig, så jeg håber nogen ved mere om det end mig (og det er der utvivlsomt) :D

Spørg endelig hvis i ikke forstår!
Avatar billede jakobdo Ekspert
14. april 2006 - 00:54 #1
Et eller andet sted trækker du vel data ud for hvert hul?
Lige inden du gør det, kunne du jo lave:
for($i = 1; $i <= 18; $i++)
{
//Dine SQL'er og tegning af GRAF...
//Det bør være det meste af den kode du har ovenover.
}
Avatar billede mazey Praktikant
14. april 2006 - 01:00 #2
Tak for svaret jakobdo, men hvis jeg forsøger som du siger får jeg stadig kun én graf ud af det....

Når den initialiserer grafen og dets indhold laver den jo en ny class... den skal vel kopieres så der kommer 18 forskellige classes. f.x.

$graph = new Graph(700,500);   
$graph1 = new Graph(700,500);   
$graph2 = new Graph(700,500); 

Har dog prøvet manuelt at kopiere det hele og derefter omdøbe kopiens variabler så de er forskellige fra den første, men det udløser stadig kun én graf
Avatar billede jakobdo Ekspert
14. april 2006 - 10:54 #3
Hvilken graf bruger du?
Nu når du bruger graph1, graph2 osv.
Husker du så at rette det hele vejen gennem din kode?
Så det bliver $graph1->Stroke(); $graph2->Stroke() osv hele vejen gennem din kode?
Avatar billede mazey Praktikant
14. april 2006 - 11:58 #4
Jeg bruger noget der hedder JPgraph...
Ja, jeg husker at rette det hele vejen igennem :D
Avatar billede jakobdo Ekspert
17. april 2006 - 10:14 #5
Hej Mazey,
det som jo bliver lavet med jpgraph det er et png. Og det kan du kun lave et ad gangen.
Så du skal evt lave din kode, så den kan fodres med hul nummeret.
jpgraph.php?hul=1, hul=2 osv...
Så vil du få lavet grafer til alle 18 huller, dog ikke direkte i graf koden som du har her over. Men du skal selvfølgelig så trække data ud fra hul1, hul2 alt efter hvad som filen kaldes med.
Forstår du?
Avatar billede jakobdo Ekspert
17. april 2006 - 10:33 #6
Avatar billede mazey Praktikant
18. april 2006 - 10:30 #7
Ja, det er da helt rigtigt når du siger det... den havde jeg jo ikke lige tænkt!

Så ja, nu er det som det skal være, tak for hjælpen!
Smider du svar?
Avatar billede jakobdo Ekspert
18. april 2006 - 10:40 #8
Svar! :o)
Avatar billede jakobdo Ekspert
18. april 2006 - 10:41 #9
takker for point.
Avatar billede mazey Praktikant
18. april 2006 - 10:41 #10
takker for hjælpen!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester