5

I have this code below.

<?php

require_once 'con.php';

$start_time_input = strtotime('08:00:00');
$finish_time_input = strtotime('17:00:00');

$total_time = 0;

$query = mysqli_query($con, "SELECT `start_break`, `finish_break` FROM `break_time` WHERE `start_break` AND `finish_break` BETWEEN '".$start_time_input."' AND '".$finish_time_input."' " );

while($tampil = mysqli_fetch_array($query)){

    $start_time_db = strtotime($tampil['start_break']);
    $finish_time_db = strtotime($tampil['finish_break']);

    if ($start_time_input <= $start_time_db AND $finish_time_input >= $finish_time_db) {

        $total_time = (($finish_time_input - $start_time_input) - ($finish_time_db - $start_time_db)) / 3600;

    } else {
        $total_time = ($finish_time_input - $start_time_input) / 3600;
    }

    echo $total_time;

}

?>

I try to execute the php file, the page shows me nothing, mysql query seems incorrect. But when I try to run this query in phpmyadmin SELECT start_break, finish_break FROM break_time WHERE start_break AND finish_break BETWEEN '08:00:00' AND '17:00:00' the query gave me the result as expected.

Anyone can help me with this? I've tried to do some research, but as far as I get that I just need to add strtotime to my variable, I did that already and nothing happens.

Any help will be much appreciated.

2
  • Please add this on top of your file to see the error: error_reporting(-1); ini_set('display_errors', 'On'); set_error_handler("var_dump"); Then you can see your error and debug the error. Commented Dec 23, 2016 at 9:03
  • Try this : $query = mysqli_query($con, "SELECT start_break, finish_break FROM break_time WHERE start_break AND finish_break BETWEEN $start_time_input AND $finish_time_input" ); Commented Dec 23, 2016 at 9:34

1 Answer 1

5

Here is your current query:

SELECT start_break,
       finish_break
FROM break_time
WHERE start_break AND finish_break BETWEEN '08:00:00' AND '17:00:00'

The WHERE clause is saying where start_break evaluates to true, and finish_break is between 8am and 5pm. This probably isn't what you want, because start_break will always evaluate to true. From the MySQL documentation:

MySQL evaluates any nonzero, non-NULL value to TRUE

Besides the logical problem in the WHERE clause, you were also trying to compare the start and finish columns directly against a time-only string. This won't work unless these columns are also time, which I doubt.

Here is the query which you probably logically intended:

SELECT start_break,
       finish_break
FROM break_time
WHERE DATE_FORMAT(start_break, '%H:%i:%s') BETWEEN '08:00:00' AND '17:00:00' AND   -- both the start break and
      DATE_FORMAT(finish_break, '%H:%i:%s') BETWEEN '08:00:00' AND '17:00:00'      -- finish break are within range

This assumes that the start_break and end_break columns are datetime and you only want to compare the time of day.

Sign up to request clarification or add additional context in comments.

6 Comments

It already goes wrong before that, strtotime converts the strings to integers...
@jeroen I'm not a PHP expert, so I can't advise you there
I meant it as an addition to your answer, not as critique :-)
@jeroen Feel free to edit, yes I can see that his datetime strings are probably messed up. Wish I had the PHP skills to fix that.
@TimBiegeleisen I'm sorry but I didn't use datetime value, I use time only on my variable.
|

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.