AnaXyd Skrevet 3. februar 2008 Del Skrevet 3. februar 2008 Heisann! Har en del tall jeg vil føre en statistikk over, på et system jeg driver å lager i PHP. Alt er såklart dynamisk, så det blir litt fikling om jeg skal implementere en slik funksjon. Finnes det noen enkle diagram-programmer som er laget i php? Tenkte å ha et sektordiagram(kake) med noen tall på. Har sett litt på Google sin, og prøver å få denne til sånn nogenlunde.. (link) Noen som veit om noe, og hvordan jeg kan få det til? Lenke til kommentar
grimjoey Skrevet 3. februar 2008 Del Skrevet 3. februar 2008 Tja. skal du bruke google sin får du vel lese hva som står der. Skal du lage egen er det egentlig kun ren geometri. Tar litt tid bare. function getProsent( $antall, $total ) { return ($antall / $total) * 100; } $data = "25,25,50" // komma separerte floats (prosent) $labels = "Kvart|Kvart2|Halve" // pipe separerte tekst strenger $gLink = 'http://chart.apis.google.com/chart?cht=p3&chd=t:' . $data . '&chs=250x100&chl=' . $labels; Lenke til kommentar
AnaXyd Skrevet 3. februar 2008 Forfatter Del Skrevet 3. februar 2008 (endret) Okay, nå har jeg bare rablet ned noe, så må jeg bare spørre om noen kan rette på det, til noe bedre enn det jeg har skrevet. Det fungerer ikke helt heller... Hvordan skal jeg gjøre det med prosentfunksjonen? Jeg føler jeg har lært litt ihvertfall! Her er det: Klikk for å se/fjerne innholdet nedenfor <?php // Svarte puter $query = "SELECT SUM(antall_svarte) FROM kunder"; $result = mysql_query($query) or die(mysql_error()); // Print out result $row = mysql_fetch_array($result); $svarte = $row[0]; // Blå puter $query = "SELECT SUM(antall_blaa) FROM kunder"; $result = mysql_query($query) or die(mysql_error()); // Print out result $row = mysql_fetch_array($result); $blaa = $row[0]; // Rosa puter $query = "SELECT SUM(antall_rosa) FROM kunder"; $result = mysql_query($query) or die(mysql_error()); // Print out result $row = mysql_fetch_array($result); $rosa = $row[0]; // Regne ut $totalt = $rosa + $svarte + $blaa; function getProsent( $antall, $total ) { return ($antall / $total) * 100; } $en = getProsent($rosa, $totalt); $to = getProsent($svarte, $totalt); $tre = getProsent($blaa, $totalt); echo '<p>Totalt: '. $totalt;.'</p>' echo '<p>Prosent rosa:' . $en . '</p>'; echo '<p>Prosent svarte:' . $to . '</p>'; echo '<p>Prosent blå:' . $tre . '</p>'; // Skriver ut diagrammet $data = ''. $to .','. $tre .','. $en .''; // komma separerte floats (prosent) $labels = "Antall svarte puter|Antall blå puter|Antall rosa puter"; $gLink = 'http://chart.apis.google.com/chart?cht=p3&chd=t:' . $data . '&chs=350x100&chl=' . $labels; echo '<img src="'. $gLink .'"/>'; echo $svarte; ?> Setter utrolig stor pris på svar og hjelp! EDIT: Koden er oppdatert, og den fungerer. Jeg måtte jo selvsagt regne ut totalen, for at funksjonen med prosentutregninga skulle fungere. Endret 3. februar 2008 av AnaXyd Lenke til kommentar
grimjoey Skrevet 3. februar 2008 Del Skrevet 3. februar 2008 (endret) bytt ut 100 med $total = (int)$rosa + (int)$svarte + (int)$blaa; getProsent( xxx, $total ); red: vet ikke hvor bra det funker med mellomrom i $labels. Endret 3. februar 2008 av grimjoey Lenke til kommentar
AnaXyd Skrevet 3. februar 2008 Forfatter Del Skrevet 3. februar 2008 (endret) Ah! Da klarte jeg det jo nesten! Grunnen til (int) er sql injections, right? EDIT: Hva kan jeg bytte ut mellomrommene med, for at det skal bli rendret som mellomrom i browseren da? %20? Endret 3. februar 2008 av AnaXyd Lenke til kommentar
grimjoey Skrevet 3. februar 2008 Del Skrevet 3. februar 2008 (endret) Nei, ikke her. Det kan brukes til det og, men her skrev jeg det for å hindre php i å tolke tallene som strenger. Da hadde for eksempel $rosa = '20'; $svarte = '30'; $total = $rosa + $svarte; print $total; // 2030 hadde blitt printet. red: bruk + som mellomrom Både mellomrom + og %20 virker. Jeg ville brukt +, siden det er nåværende standard så vidt jeg vet, og det ser penere ut enn %20. Endret 3. februar 2008 av grimjoey Lenke til kommentar
JohndoeMAKT Skrevet 3. februar 2008 Del Skrevet 3. februar 2008 Libchart og sparklines og muligens PlotKit er ting du kan se på. Lenke til kommentar
AnaXyd Skrevet 3. februar 2008 Forfatter Del Skrevet 3. februar 2008 Nei, ikke her. Det kan brukes til det og, men her skrev jeg det for å hindre php i å tolke tallene som strenger. Da hadde for eksempel $rosa = '20'; $svarte = '30'; $total = $rosa + $svarte; print $total; // 2030 hadde blitt printet. red: bruk + som mellomrom Både mellomrom + og %20 virker. Jeg ville brukt +, siden det er nåværende standard så vidt jeg vet, og det ser penere ut enn %20. Aha! Merket at den printet noe lignende istad. Da skal jeg huske på det til neste gang! Da bruker jeg + som mellomrom! Fy svarte, føler at jeg lærer skikkelig mye av dette systemet her.. Men jeg hadde ikke vært særlig langt uten den hjelpen jeg får her! (Absolutt mest fra grimjoey, han skal få skikkelig cred for det her ) Da tror jeg faktisk at det fungerer folkens! Poster endelig kode, for de som kanskje trenger det til noe: Klikk for å se/fjerne innholdet nedenfor //Husk å koble til database før denne koden kommer! <?php // Svarte puter $query = "SELECT SUM(antall_svarte) FROM kunder"; $result = mysql_query($query) or die(mysql_error()); // Print out result $row = mysql_fetch_array($result); $svarte = $row[0]; // Blå puter $query = "SELECT SUM(antall_blaa) FROM kunder"; $result = mysql_query($query) or die(mysql_error()); // Print out result $row = mysql_fetch_array($result); $blaa = $row[0]; // Rosa puter $query = "SELECT SUM(antall_rosa) FROM kunder"; $result = mysql_query($query) or die(mysql_error()); // Print out result $row = mysql_fetch_array($result); $rosa = $row[0]; // Regne ut $total = (int)$rosa + (int)$svarte + (int)$blaa; function getProsent( $antall, $total ) { return ($antall / $total) * 100; } $en = getProsent($rosa, $total); $to = getProsent($svarte, $total); $tre = getProsent($blaa, $total); echo '<p>Totalt: '. $total.'</p>'; echo '<p>Prosent rosa:' . $en . '</p>'; echo '<p>Prosent svarte:' . $to . '</p>'; echo '<p>Prosent blå:' . $tre . '</p>'; // Skriver ut diagrammet $data = ''. $to .','. $tre .','. $en .''; // komma separerte floats (prosent) $labels = "Antall+svarte+puter|Antall+blå+puter|Antall+rosa+puter"; $gLink = 'http://chart.apis.google.com/chart?cht=p3&chd=t:' . $data . '&chs=350x100&chl=' . $labels; echo '<img src="'. $gLink .'"/>'; echo $svarte; ?> Lenke til kommentar
Runar0 Skrevet 3. februar 2008 Del Skrevet 3. februar 2008 (endret) Eit lite tips angåande sql spørringene er å hente ut alt du trenger med ein gang, da slipper du tre spørringer til databasen og koden blir betraktligere kortere. Eks: Klikk for å se/fjerne innholdet nedenfor //Husk å koble til database før denne koden kommer! <?php // Hent all info du trenger $query = "SELECT SUM(antall_svarte) as svarte, SUM(antall_blaa) as blaa, SUM(antall_rosa) as rosa, svarte + blaa + rosa as total FROM kunder"; $result = mysql_query($query) or die(mysql_error()); // Hent svaret å plasser dei i variabler extract(mysql_fetch_assoc($result)); function getProsent( $antall, $total ) { return ($antall / $total) * 100; } $en = getProsent($rosa, $total); $to = getProsent($svarte, $total); $tre = getProsent($blaa, $total); echo '<p>Totalt: '. $total.'</p>'; echo '<p>Prosent rosa:' . $en . '</p>'; echo '<p>Prosent svarte:' . $to . '</p>'; echo '<p>Prosent blå:' . $tre . '</p>'; // Skriver ut diagrammet $data = ''. $to .','. $tre .','. $en .''; // komma separerte floats (prosent) $labels = "Antall+svarte+puter|Antall+blå+puter|Antall+rosa+puter"; $gLink = 'http://chart.apis.google.com/chart?cht=p3&chd=t:' . $data . '&chs=350x100&chl=' . $labels; echo '<img src="'. $gLink .'"/>'; ?> Endret 3. februar 2008 av Runar0 Lenke til kommentar
AnaXyd Skrevet 3. februar 2008 Forfatter Del Skrevet 3. februar 2008 Har ett spørsmål til. Er det mulig å redusere antall siffer i prosentutregninga? Slik som: 25.2380952381 til 25? Lenke til kommentar
Runar0 Skrevet 3. februar 2008 Del Skrevet 3. februar 2008 round() Eventuelt vist du vil ha f.eks. to desimal $en = sprintf("%.2f", $en); Lenke til kommentar
AnaXyd Skrevet 3. februar 2008 Forfatter Del Skrevet 3. februar 2008 Ah! Takk! Ble litt voldsomt med 10 siffere.. Lenke til kommentar
pulse Skrevet 3. februar 2008 Del Skrevet 3. februar 2008 Angående prosentutreginga: Dersom du har tre verdier av 33.3333333 vil hver av disse bli 33 og 3x33 = 99 istedet for 100. Derimot klarer jeg ikke finne noe staed vor det står at dette skal være levert i prosent. Testet litt med $data = '20,10,15' f.eks, og det fungerte like flott. Ettersom hva jeg da konkluderte med er at det er "bedre" og droppe den utregninga av prosenten. Lenke til kommentar
grimjoey Skrevet 3. februar 2008 Del Skrevet 3. februar 2008 (endret) Specify text encoding with chd=t:<chart data string> Where <chart data string> consists of floating point numbers from zero (0.0) to 100.0, minus one (-1), and the pipe character (|). Det trenger ikke være prosent. men tallene kan ikke overstige 100. Derfor valgte jeg å gjør om til prosent. (Da vil aldri noen av tallene overstige 100). Endret 3. februar 2008 av grimjoey Lenke til kommentar
pulse Skrevet 3. februar 2008 Del Skrevet 3. februar 2008 Ah, men da samme problem: sett at du har 10,6 10,6 78,8 Dett vil bli rundet av til: 11, 11, 79 som tilsammen blir: 101 Lenke til kommentar
grimjoey Skrevet 4. februar 2008 Del Skrevet 4. februar 2008 det gjør ikke noe om summen er over 100 bare ikke enkelt verdier er over 100. Lenke til kommentar
pulse Skrevet 4. februar 2008 Del Skrevet 4. februar 2008 aha, kanskje jeg burde lese litt mer neste gang o.O Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå