Jeg leger lidt med at lave et "stempel ur" i PHP/MySQL. Jeg har i min tabel felterne : dag, in_, out, dato. I feltet dag indsættes dagen som f.eks. 14/10/03. I in_ og out, et 1 tal alt efter om man er inde eller ude. Feltet dato indsættes unixtime "time()"
Jeg har lavet et lille script der skal udregne hvor lang tid man har været inde, ud fra in_ og out samme dag. Mit problem er at få den til at regne ud hvis man har været inde og ude flere gange på en dag.
Håber dette er til at se sig ud af, da jeg syntes det er lidt svært at forklarer i skrift.
PS: Hvis i vil "lege" med, så husk at ret server,user,password og db til jeres ejen opsætning.
MySQL table : in_out
felter :dag,in_,out,dato
<?php
$conn=mysql_connect("SERVER","USER","PASSWORD");
if(!$conn) echo "connection failed";
mysql_select_db("DATABASE",$conn) or die ("database not found");
$ask = "SELECT COUNT(dag) FROM in_out WHERE in_ = '1'";
$data=mysql_query($ask,$conn);
$dat = mysql_fetch_array($data);
$ialt=$dat[0];
while($counter < $ialt ){
$sql = "SELECT dag FROM in_out WHERE in_ = '1' ORDER BY dato ASC ";
$result = mysql_query($sql,$conn);
$dag = mysql_result($result,$counter,'dag');
$dato = mysql_result($result,$counter,'dato');
echo "$dag";
$getdatearray = "SELECT dato FROM in_out WHERE dag = '$dag' ORDER BY dato ASC";
$getresult = mysql_query($getdatearray,$conn);
$numrows = mysql_num_rows($getresult);
while ($myrows = mysql_fetch_array($getresult)){
$out = $myrows[0];
$a2 = $out - $a1;
$a1 = $out;
}
$a2 = $a2 - 1800;
$faktura = date("H:i:s",mktime(0,0,($a2)));
echo " Tid ialt = $faktura";
$counter++;
}
?>
Håber dette giver et overblik
/Svend
[Redigeret d. 19/11-03 14:58:12 af Svend]
Hej Svend,
Jeg ville nok kigge lidt på dit db design da det i mine øjne er unødvendigt at ha' 2 felter som angiver om du logger ind eller ud. Dette kunne med fordel være et felt hvor værdien 0 angiver log ind og værdien 1 angiver log ud.
En anden ting er dato og dag felterne. Du kunne jo lave det om til en datetime så du har både tid og dato i samme felt.
Nå men nok om det.
Jeg har lavet et stykke kode som burde kunne tælle tiden som du er "stemplet ind" i.
Jeg har dog skrevet den ind direkte og har derfor ikke selv testet det.
Men se om det ikke kan bruges til noget.
<?php
$conn=mysql_connect("SERVER","USER","PASSWORD");
if (!$conn)
echo "connection failed";
mysql_select_db("DATABASE",$conn) or die ("database not found");
$sql = "SELECT DATE_FORMAT(src.dag, "%d/%m-%Y") AS dag, ";
$sql .= "src.dato AS ind_dato, dst.dato AS ud_dato FROM in_out AS src ";
$sql .= "INNER JOIN in_out AS dst ON ( src.in_ = dst.out ) AND (src.dag = dst.dag) ";
$sql .= "AND (src.dato < dst.dato) WHERE src.in_ = 1 ORDER BY dag, ind_dato, ud_dato";
$results = mysql_query($sql,$conn);
$data = array();
// hent alle resultater
while ($row = mysql_fetch_array($results))
{// hent kun data hvor dag+ind_dato ikke allerede er findes i vores resultat
$index = $row["dag"].$row["ind_dato"];
if (count($data[$index]) == 0)
$data[$index] = $row;
}
mysql_free_result($results);
// Løb hver række i gennem og beregn tiden.
$tids_forbrug = array();
reset($data);
while (list($key, $result) = each($data))
{
$tids_forbrug[$result["dag"]] += $result["ud_dato"]-$result["ind_dato"];
}
// Udskriv de fundne data
reset($tids_forbrug);
while (list($key, $result) = each($tids_forbrug))
{
echo $key;
$faktura = date("H:i:s",mktime(0,0,($result)));
echo " Tid ialt = $faktura<br>";
}
?>
Har du spørgsmål til koden så spørg løs!
/Michael