Avatar billede elav Nybegynder
02. juli 2005 - 23:12 Der er 13 kommentarer og
2 løsninger

Besøgsstatistik - leading zero

Hejsa,

Jeg har skrevet dette:

---

<?
echo"$overskrift_start Besøgsstatistik $overskrift_slut<br><br>";

echo"Der kan p.t. ikke dannes nogen statistik<br><br>";

$ym = date('Ym', $index_nu);

$ip_db = mysql_query("SELECT * FROM besog order by dato");
while($ip = mysql_fetch_array($ip_db)){

$ymd = date('Ymd', $ip[dato]);

$dato[$ymd]++;

}
echo"<table><tr>";
$i = 1;
while($i < 31){
  $ymd="$ym$i";
  echo"$ymd<br>";
  echo"<td width='20'><center><img border='1' src='images/bar.png' width='10' height='200'><br>$i<br>$dato[$ymd]</td>";
  $i++;
}
echo"</tr></table>";
?>

---

Mit problem er at $i ikke altid er 2 cifre... hvordan fixes det?

..Kom evt. med bedre ideer til hvordan problemstillingen løses...
Avatar billede busschou Praktikant
02. juli 2005 - 23:19 #1
en mulighed er vel følgende
---
$i = 1;
while($i < 31){
  $ymd="$ym$i";
  echo"$ymd<br>";
  if ($i < 10){
  echo"<td width='20'><center><img border='1' src='images/bar.png' width='10' height='200'><br>0$i<br>$dato[$ymd]</td>";
  }else{
  echo"<td width='20'><center><img border='1' src='images/bar.png' width='10' height='200'><br>$i<br>$dato[$ymd]</td>";
  }
  $i++;
}
Avatar billede erikjacobsen Ekspert
02. juli 2005 - 23:20 #2
Fx

  printf("<td width='20'><center><img border='1' src='images/bar.png' width='10' height='200'><br>%02d<br>%s</td>",$i,$dato[$ymd]);
Avatar billede elav Nybegynder
02. juli 2005 - 23:21 #3
Helt sikkert - men der findes vel en php-funktion? (som jeg ikke kan finde på php.net!)
Avatar billede olebole Juniormester
03. juli 2005 - 19:44 #4
<ole>

- helt sikkert:
    http://dk2.php.net/manual/da/function.printf.php  ;o)

/mvh
</bole>
Avatar billede elav Nybegynder
03. juli 2005 - 20:31 #5
Hvor nævnes noget med leading zeroes?
Avatar billede erikjacobsen Ekspert
03. juli 2005 - 21:02 #6
I spørgsmålets titel.
Avatar billede elav Nybegynder
03. juli 2005 - 22:57 #7
...I linket til php.net - kan ikke finde eksemplet...
Avatar billede erikjacobsen Ekspert
03. juli 2005 - 23:05 #8
1) Du skal faktisk kigge på http://dk2.php.net/manual/da/function.sprintf.php - men det  kan sådan set læses i Oles link
2) Der står <citat>
En valgfri padding specifier som fortæller hvilken karakter der skal bruges til at udfylde resultaterne til den korrekte strengstørrelse. Der kan bruges et mellemrum eller et 0 (nultegn). Standarden er at udfylde med mellemrum. Et alternativ udfyldningstegn kan blive specificeret ved præfikse dem med et enkelt citationstegn ('). Se eksemplerne herunder.
</citat>
3) Et af eksemplerne omhandler det:
$isodate = sprintf("%04d-%02d-%02d", $year, $month, $day);
Avatar billede coderdk Praktikant
04. juli 2005 - 08:47 #9
Som nogle er inde på, bør:

$ymd="$ym$i";

være:

$ymd = sprintf( "$ym%02d", $i );
Avatar billede elav Nybegynder
04. juli 2005 - 11:18 #10
Koden ser nu sådan ud:

---

<?
echo"$overskrift_start Besøgsstatistik $overskrift_slut<br><br>";

$maaneder = array('', 'Januar', 'Februar', 'Marts', 'April', 'Maj', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'December');

if(!$y){$y = date('Y', $index_nu);}

if(!$n){$n = date('n', $index_nu);}

$m = sprintf( "%02d", $n );

$mplus = $n+1;
if($mplus == 13){$mplus = 1;$yplus=$y+1;}else{$yplus=$y;}
$mminus = $n-1;
if($mminus == 0){$mminus = 12;$yminus=$y-1;}else{$yminus=$y;}

$ip_db = mysql_query("SELECT * FROM besog order by dato");

while($ip = mysql_fetch_array($ip_db)){

$ymd = date('Ymd', $ip[dato]);
$dato[$ymd]++;

}


echo"<table border='0'><tr>";
$i = 1;
$ndays = cal_days_in_month(CAL_GREGORIAN, $n, $y);
echo"<tr><td colspan='$ndays'><center>$uoverskrift_start <a href='?side=besog&n=$mminus&y=$yminus'><</a> $maaneder[$n] $y <a href='?side=besog&n=$mplus&y=$yplus'>></a> $uoverskrift_slut</td></tr>";
while($i <= $ndays){
$ymd = sprintf( "$y$m%02d", $i );
if($dato[$ymd] == ""){$dato[$ymd] = "0";}
$height = $dato[$ymd]*10;
  echo"<td valign='bottom' width='20'><font style='font-size: 8px;font-family: Verdana, arial'><center>$dato[$ymd]<br><img border='1' src='images/bar.png' width='10' height='$height'><br>$i</font></td>";
  $i++;
}
echo"</tr></table>";
?>

---

Især denne del, må kunne laves anderledes:

---

$mplus = $n+1;
if($mplus == 13){$mplus = 1;$yplus=$y+1;}else{$yplus=$y;}
$mminus = $n-1;
if($mminus == 0){$mminus = 12;$yminus=$y-1;}else{$yminus=$y;}

---

På forhånd tak!

Nogen forslag? (4 linjer til meget lidt)
Avatar billede elav Nybegynder
11. juli 2005 - 10:23 #11
Smid et svar! - så får I point...
Avatar billede coderdk Praktikant
11. juli 2005 - 14:17 #12
Hvis jeg hjalp, så ok :)
Avatar billede erikjacobsen Ekspert
11. juli 2005 - 14:25 #13
nej tak
Avatar billede xyborx Nybegynder
11. juli 2005 - 14:31 #14
En anden mulighed ville være at bruge str_pad(), men jeg foretrækker nu også *printf()
Avatar billede elav Nybegynder
12. juli 2005 - 14:26 #15
Jeg snupper lige halvdelen selv :)
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