Avatar billede zaico Nybegynder
13. juni 2013 - 22:55 Der er 4 kommentarer og
1 løsning

udregn forskel mellem to tidspunkter og indsæt i mysql database

Hej

Jeg er ved at strikke en side sammen hvor jeg kan indtaste hvad tid jeg mødte på arbejde og hvad tid jeg gik, (som dato og tid i samme felt) og så vil jeg jo gerne have den til at udregne forskellen mellem de to tidspunkter inden den sætter det ind i databasen og gange med time sats og insætte det i et felt for sig.

det jeg har indtil nu er

Er der en der ude der kan hjælpe mig resten af vejen?? :D

insert.php

<?php

$con=mysqli_connect("localhost","brugernavn","password","dbnavn");
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

$sql="INSERT INTO lon (location, start, slut)
VALUES
('$_POST[location]','$_POST[start]','$_POST[slut]')";

if (!mysqli_query($con,$sql))
  {
  die('Error: ' . mysqli_error($con));
  }
echo "<h3>Data blev tilføjet</h3>";

mysqli_close($con);
?>


add.php

        <h2>Tilføj timer</h2>
        <form action="?p=insert" method="post">
            Location: <input type="text" name="location"><br>
            Start: <input type="datetime" name="start"><br>
            Slut: <input type="datetime" name="slut"><br>
            <input class="btn btn-success" type="submit" name="submit" value="Tilføj">
        </form>
14. juni 2013 - 10:35 #1
Du siger, at dato og tid er i samme felt.  Jeg går ud fra, at for kolonnerne start og slut er datatypen DATETIME.  I så fald kan du få mysql til at udregne og bevare forskellen med TIMEDIFF() funktionen.  Du tilføjer en ekstra kolonne i tabellen, lad os kalde den 'tid' som du giver datatypen TIME  Så vil du, ved at forandre din query som sagt nedenfor, få tidsforskellen i kolonnen tid.

$sql="INSERT INTO lon (location, start, slut, tid) VALUES ('$_POST[location]','$_POST[start]','$_POST[slut]'), TIMEDIFF('$_POST[slut]', '$_POST[start]')";

Men så bliver det vel ikke en timesats men en sekundsats du skal gange med, eller timesatsen divideret med 3600.  Så endnu et felt tilføjet til tabellen, lad os sige 'beløb', og lad os antage, at du har timesatsen i en variable $timesats.  Så bliver koden

$sql="INSERT INTO lon (location, start, slut, tid, beløb) VALUES ('$_POST[location]','$_POST[start]','$_POST[slut]'), TIMEDIFF('$_POST[slut]', '$_POST[start]'), TIMEDIFF('$_POST[slut]', '$_POST[start]')*$timesats/3600";
Avatar billede zaico Nybegynder
14. juni 2013 - 13:51 #2
Mange tak det var lige det der skulle til.. :)
14. juni 2013 - 14:06 #3
I såfald, her er mit svar til at lukke spørgsmålet på.
Avatar billede arne_v Ekspert
16. juni 2013 - 03:27 #4
Saadan principielt saa:

1) er det ikke saa smart at gemme en felt der kan udregnes udfra to andre felter - lav beregningen naar du traekker data ud

2) det er godt at bruge mysqli men hvis man ikke bruger prepare men almindelig streng konkatanering saa er man stadig aaben for SQL injection
16. juni 2013 - 07:30 #5
arne_v (og zaico) - ja, jeg reagerede lidt for bogstaveligt på spørgsmålets ordlyd, at beregne tidsforskel gange timesats og 'indsætte det i et felt for sig.'  Jeg skulle have foreslået at omformulere problemet til hvordan man, ud fra et start og slut tidspunkt gemt i databasen, kan trække ud tidsforskellen og gange det med timesatsen.
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

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