Avatar billede heavybreezer Nybegynder
26. juni 2004 - 22:35 Der er 33 kommentarer og
2 løsninger

Vise procent på en grafisk måde

Hvis jeg i min tabel har et row som hedder "hits", og en masse tal under denne row, hvordan laver jeg så en "bar", som viser hvor mange procent det enkelte tal er, i forhold til det samlede antal?

Tænker på en bar, lavet af tables?
Avatar billede nicklasb Nybegynder
26. juni 2004 - 22:40 #1
først ligger du alle dine tal sammen, eller henter dette tal ud for sig selv, så du har det under gennemgang af de forskellige poster i din løkke.
Nu tager du blot og udfører regnestykket
<?php
$Procent = $AktuelleAntal / $SamletAntal * 100;
?>
Hvorefter du så i en variabel foreksempel kan bestemme hvor lange dine pinde maksimalt skal være og så gange dinne pinde op til dette, og så endeligt skrive en masse divs uden for hver post, hvorved du blot sætter længden på denne og ved hjælp af en baggrundfarve vælger en farve til denne.

Du kan også i stedet for divs benytte noget GDlib. Men svært at sige hvad der ville være bedst i netop dit eksempel uden at se enten noget kode eller bedst af alt, siden i funktion..
Avatar billede heavybreezer Nybegynder
26. juni 2004 - 22:42 #2
Det første lyder meget fornuftigt.... :-)
Kan jeg evt. få en sammensat kode?

Jeg har forresten fået resultatet af alle tal lagt sammen, det kalder jeg: $overall
Avatar billede nicklasb Nybegynder
26. juni 2004 - 22:47 #3
det absolut letteste ville være at du lige postede din kode.. ikke fordi jeg gider sidde og lave det hele for dig af den grund (hvis koden er uoverskuelig!), men er vist lettere end at jeg sidder og spørger dig ind til hvordan du foreksempel udfører dine løkker, hvad alle dine andre vars hedder med videre.. (men husk, slet lige koder med videre!)
Avatar billede nicklasb Nybegynder
26. juni 2004 - 22:47 #4
.. og med koder mener jeg selvfølgelig adgangskoder, hvis du skulle være i tvivl.. ;)
Avatar billede heavybreezer Nybegynder
26. juni 2004 - 22:48 #5
hehe, jeps! :)

Her kommer det:

<?
$rs = mysql_query("SELECT SUM(hits) AS total FROM visit") or die(mysql_error());
while ($row = mysql_fetch_array($rs, MYSQL_ASSOC)) {
    print "<tr><td bgcolor=#C0C0FF style='border-bottom:1px solid #000000'><b>Antal hits ialt (ikke unikke):</b></td><td bgcolor=#C0C0FF style='border-bottom:1px solid #000000'><b>". $row["total"] . "\n</b></td></tr>";
}
mysql_free_result($rs);







$query2 = mysql_query("SELECT * FROM visit ORDER BY id ASC") or print mysql_error();
while($r = mysql_fetch_array($query2)) {
$id = $r["id"];
$adresse = $r["adresse"];
$hits = $r["hits"];

    echo '<tr><td bgcolor=#EEEEEE><a href="'.$r["adresse"].'">', $r["adresse"], '</a></td><td bgcolor=#EEEEEE>', $r["hits"], '</td></tr>';
}
?>


</table>
Avatar billede dennismp Nybegynder
26. juni 2004 - 22:49 #6
Lad os sige at du har 400px til at vise din bar.. 400px=100%

<?php
  $width = floor(($procent/100)*400);
?>
<table>
<tr>
  <td>Besøg fra XXX</td>
  <td><img src="enbar.jpg" width="<?=$width?>" height="10"></td>
</tr>
</table>

og så videre.
Avatar billede heavybreezer Nybegynder
26. juni 2004 - 22:56 #7
Jep, jamen hvad gør jeg..? Jeg har jo kun mit "AktuelleAntal" i en lykke?
Her:

$query2 = mysql_query("SELECT * FROM visit ORDER BY id ASC") or print mysql_error();
while($r = mysql_fetch_array($query2)) {
$id = $r["id"];
$adresse = $r["adresse"];
$hits = $r["hits"];

    echo '<tr><td bgcolor=#EEEEEE><a href="'.$r["adresse"].'">', $r["adresse"], '</a></td><td bgcolor=#EEEEEE>', $r["hits"], '</td></tr>';
}
Avatar billede heavybreezer Nybegynder
26. juni 2004 - 22:59 #8
Hov.... Det er kun det Samlede antal hits jeg har ik en løkke....
Avatar billede dennismp Nybegynder
26. juni 2004 - 23:02 #9
$rs = mysql_query("SELECT SUM(hits) AS total FROM visit") or die(mysql_error());

$total = mysql_result($rs,0,0);

$query2 = mysql_query("SELECT * FROM visit ORDER BY id ASC") or print mysql_error();
while($r = mysql_fetch_array($query2)) {
  $id = $r["id"];
  $adresse = $r["adresse"];
  $hits = $r["hits"];

  $barwidth = floor(($hits/$total));

  echo '<tr><td bgcolor=#EEEEEE><a href="'.$r["adresse"].'">', $r["adresse"], '</a></td><td bgcolor=#EEEEEE>', $r["hits"], '</td>';
  echo '<td><img src="/bar.gif" wdith="' . $barwidth . '" height="10"> ' . (($hits/$total) * 100) . '%</td></tr>';
}
Avatar billede nicklasb Nybegynder
26. juni 2004 - 23:06 #10
hvis du så ordner den efter antal, så maks kommer øverst kan du eksempelvis også få BRUGT alle de 400px.. ved at lade 100% være lig 400px..
ellers kan du blot lave en div og heri sætte de andre divs hvorved du blot fastslår længden med de procenter du nu engang har beregnet..
altså
<div style="width: <?=$procenter?>%">wee?!</div>
men ellers som dennis også har vist..
jeg ville dog nok af hensyn til serveren undlade at ligge de forskellige rows ned i vars som $id, $adresse osv.. er der absolut ingen grund til!
Avatar billede heavybreezer Nybegynder
26. juni 2004 - 23:09 #11
Dennis >> Jeg får en fejl på: $total = mysql_result($rs,0,0);

Jeg får denne fejl:
Warning: mysql_result(): 13 is not a valid MySQL result resource in c:\apache\htdocs\heavy\admin2.php on line 99
Avatar billede heavybreezer Nybegynder
26. juni 2004 - 23:11 #12
Hov.... ikke mere :)

Nu virker det...... næsten.... nu er mit problem bare at bare er lige lang i alle tilfælde... uanset hvor mange procent det er ud af det samlede antal.

Jeg kan godt se procenttallet skrifteligt..
Avatar billede nicklasb Nybegynder
26. juni 2004 - 23:12 #13
prøv blot at indsætte din egen første halvdel af koden ned til $query2 og indsæt så $row["total"] i stedet for total.. din kode er jo for sin vis god nok..
Avatar billede heavybreezer Nybegynder
26. juni 2004 - 23:14 #14
Nu virker det...... næsten.... nu er mit problem bare at bare er lige lang i alle tilfælde... uanset hvor mange procent det er ud af det samlede antal.

Jeg kan godt se procenttallet skrifteligt..
Avatar billede dennismp Nybegynder
26. juni 2004 - 23:16 #15
Hvad med width - står den til noget fornuftigt?
Avatar billede heavybreezer Nybegynder
26. juni 2004 - 23:17 #16
Width på hvad?
Jeg har jo definerert barwidth, eller hvad mener du?
Avatar billede nicklasb Nybegynder
26. juni 2004 - 23:24 #17
prøv at vise os siden hvor du har lavet graferne.. så kan vi selv tjekke det.. men dennis mener din html-bestemte width på de forskellige bar.gif -billeder..
Avatar billede heavybreezer Nybegynder
26. juni 2004 - 23:27 #18
Okay, her er som det ser ud nu:

<table width="100%" cellpadding="3" cellspacing="0" style="border:1px solid #000000">
<?
$rs = mysql_query("SELECT SUM(hits) AS total FROM visit") or die(mysql_error());
while ($row = mysql_fetch_array($rs, MYSQL_ASSOC)) {

    print "<tr><td bgcolor=#C0C0FF style='border-bottom:1px solid #000000'><b>Antal hits ialt (ikke unikke):</b></td><td style='border-bottom:1px solid #000000' bgcolor=#C0C0FF>&nbsp;</td><td bgcolor=#C0C0FF style='border-bottom:1px solid #000000'><b>". $row["total"] . "\n</b></td></tr>";
}





$total = mysql_result($rs,0,0);


$query2 = mysql_query("SELECT * FROM visit ORDER BY id ASC") or print mysql_error();
while($r = mysql_fetch_array($query2)) {
$id = $r["id"];
$adresse = $r["adresse"];
$hits = $r["hits"];

$barwidth = floor(($hits/$total));

    echo '<tr><td bgcolor=#EEEEEE><a href="'.$r["adresse"].'">', $r["adresse"], '</a> </td><td width="70%" bgcolor=#EEEEEE><img src="gfx/bar.gif" wdith="' . $barwidth . '" height="10"> ' . (($hits/$total) * 100) . '%</td><td bgcolor=#EEEEEE>', $r["hits"], '</td></tr>';


}
?>


</table>
Avatar billede nicklasb Nybegynder
26. juni 2004 - 23:28 #19
det jeg allerhelst vil se er hvordan din html-kode ser ud efter scriptet er kørt på serveren.. altså den du får ved Vis kilde... under Vis i IE..
Avatar billede heavybreezer Nybegynder
26. juni 2004 - 23:30 #20
nåå, ok:

<table width="100%" cellpadding="3" cellspacing="5">
<tr>
<td bgcolor="#30669C" align="center" id="title" style="border: 1px solid #000000">

» Admin sektion «

</td>
</tr>
<tr>
<td>
Current admin user: <b>admin</b><br>
Current admin password: <b>crawford</b><br>
Current admin email: <b>tommy6520@msn.com</b><br>


<br>
<br>
Server root: <b>c:/apache/htdocs</b>
<br>
<br>



<a href="mailer.php">Udsend mails</a><br>
<br>

<b>Registrerede email adresser:</b><br>

<i>tommy6520@msn.com
</i>





<br>
<br>
<hr>


    There is currently <b>1</b> guest browsing this site.
    <table border="0" width="100%" cellpadding="3" cellspacing="0" style="border:1px solid #000000" bgcolor="#C0C0FF">
      <tr>
        <td style='border-bottom:1px solid #000000'><b>Klokken:</b></td>
        <td style='border-bottom:1px solid #000000'><b>Adresse:</b></td>
        <td style='border-bottom:1px solid #000000'><b>Side:</b></td>
      </tr>
      <tr><td bgcolor="#EEEEEE">23:27</td><td bgcolor="#EEEEEE">127.0.0.1</td><td bgcolor="#EEEEEE"><a href="/heavy/admin2.php">/heavy/admin2.php</a></td></tr>    </table>




<br>
<br>
<table width="100%" cellpadding="3" cellspacing="0" style="border:1px solid #000000">
<tr><td bgcolor=#C0C0FF style='border-bottom:1px solid #000000'><b>Antal hits ialt (ikke unikke):</b></td><td style='border-bottom:1px solid #000000' bgcolor=#C0C0FF>&nbsp;</td><td bgcolor=#C0C0FF style='border-bottom:1px solid #000000'><b>3
</b></td></tr><tr><td bgcolor=#EEEEEE><a href="http://127.0.0.1/heavy/admin2.php">http://127.0.0.1/heavy/admin2.php</a> </td><td width="70%" bgcolor=#EEEEEE><img src="gfx/bar.gif" wdith="0" height="10"> 66.6666666667%</td><td bgcolor=#EEEEEE>2</td></tr><tr><td bgcolor=#EEEEEE><a href="http://127.0.0.1/heavy/tagwall.php">http://127.0.0.1/heavy/tagwall.php</a> </td><td width="70%" bgcolor=#EEEEEE><img src="gfx/bar.gif" wdith="0" height="10"> 33.3333333333%</td><td bgcolor=#EEEEEE>1</td></tr>

</table>















</td>
</tr>


</table>
Avatar billede heavybreezer Nybegynder
26. juni 2004 - 23:31 #21
Forresten har jeg kun et gif-billede indtil videre, skal der være flere?
Avatar billede dennismp Nybegynder
26. juni 2004 - 23:31 #22
erstat:
$total = mysql_result($rs,0,0);
med:
$total = $row['total'];

eller bruge $row['total'] istedet for $total.
Avatar billede dennismp Nybegynder
26. juni 2004 - 23:33 #23
et billede er fint - du "hiver" jo i det, så størrelsen passer.

hovsa jeg kan ikke stave til width; "wdith" staves "width" :-)
Avatar billede heavybreezer Nybegynder
26. juni 2004 - 23:36 #24
hehe,
jamen hvordan kan man så vide hvor langt billedet er, hvis det er 100% ?

og hvis jeg prøver at erstatte en af de ting, så får jeg en fejl med: Warning: Division by zero in
Avatar billede heavybreezer Nybegynder
26. juni 2004 - 23:37 #25
Og hvis jeg prøver at udskrive min $total = mysql_result($rs,0,0); giver den det rigtige resultat :)
Avatar billede heavybreezer Nybegynder
26. juni 2004 - 23:44 #26
Sådan........ Rettede selv lidt på det, og så virker det....!

Tak til jer begge!
Smider i svar? Hvordan syns i point fordelingen skal være?
Avatar billede heavybreezer Nybegynder
26. juni 2004 - 23:47 #27
Det sidste jeg bare vil spørge om er, hvordan jeg  undgår de mange decimaler i procent-tallet.. Kan jeg ikke få det ned på 2? Altså fx. 12.33%??
Avatar billede nicklasb Nybegynder
26. juni 2004 - 23:47 #28
ok.. havde ellers lige svaret.. men jo kun fedt du selv fandt svaret. Division by zero kan du som regel sammenkæde med at variablen nok ikke indeholder det du ønsker, og da er det den helt rigtige fremgangsmåde at udskrive variablerne som du gjorde!
Synes dog ikke der er nogen grund til at bruge mysql_result når du allerede en gang har hentet dette ud i dit top! ($row["total"])
men vi skal vel alle starte et sted, og ser ud til at du er rigtig godt på vej! :)
Avatar billede nicklasb Nybegynder
26. juni 2004 - 23:48 #29
Avatar billede heavybreezer Nybegynder
26. juni 2004 - 23:48 #30
Hehe, mange Tak!
Avatar billede dennismp Nybegynder
26. juni 2004 - 23:52 #31
Irriterende at mails er 20-30 mins forsinket :|

Pointfordelingen bestemmer du selv, ellers må du oprette et nyt spørgsmål og spørge folk :}
Avatar billede heavybreezer Nybegynder
26. juni 2004 - 23:53 #32
dennismp >>
Smider du svar?
Avatar billede heavybreezer Nybegynder
26. juni 2004 - 23:54 #33
Hmm, der var jeg for langsom igen! :-)

hehe ja, oprette et nyt spm og spørge om pointfordelingen! lol :-)
Avatar billede nicklasb Nybegynder
26. juni 2004 - 23:54 #34
haha.. ja, en oplagt mulighed til et sådant problem.. er ligeglad med pointene hvis det er et problem.. ;)
og ja, utrolig irriterende med de mails.. sgu svært at følge med i hvor status er i de 3-4 tråde man følger med i!
Avatar billede nicklasb Nybegynder
26. juni 2004 - 23:56 #35
.. og der man man bare se.. endnu engang ANER man ikke hvad i har svaret, skønt mailserveren står til promte at advare om nye mails!
men fedt at du fik det til at virke!!
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