2016-05-23 4 views
0

Я пытаюсь показать, открыт ли магазин или закрыт, в зависимости от времени открытия и закрытия моего дед. Если он открыт, покажите время открытия и закрытия для этого дня, если он закрыт, эхо закрыто. Моя проблема на данный момент заключается в том, что мой запрос эхом закрывается, даже когда магазин планируется открыть (попытка 1) или вообще ничего не повторяет (попытка 2).Время открытия и закрытия магазина, открытое закрыто при открытии

Закрытый склад в моей БД представлен как 00:00. Любые предложения или рекомендации будут очень благодарны, поскольку я учу себя и пришел на покой.

DB

CREATE TABLE `Opening_hrs` (
`OH_ID` bigint(255) NOT NULL AUTO_INCREMENT, 
`Restaurant_ID` bigint(255) NOT NULL, 
`Day_of_week` int(11) NOT NULL, 
`Open_time` time NOT NULL, 
`Closing_time` time NOT NULL, 
PRIMARY KEY (`OH_ID`), 
KEY `Restaurant_ID` (`Restaurant_ID`) 
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 

Это была моя первая попытка

date_default_timezone_set("Europe/London"); 
    $output_ohr = ''; 

    $ohrs = mysqli_query($dbc, "SELECT * FROM Opening_hrs 
WHERE Restaurant_ID='$rest_id' AND Day_of_week = DATE_FORMAT(NOW(), '%w') 
AND CURTIME() BETWEEN Open_time AND Closing_time"); 

echo var_dump($ohrs); 

$count_ohrs = mysqli_num_rows($ohrs); 
if ($count_ohrs === 0) { 
    $output_ohr = '<b> Closed</b>'; 
} else { 
    $i = 1; 
}while ($row_ohr = mysqli_fetch_array($ohrs)) { 
    $o_time = $row_ohr['Open_time']; 
    $c_time = $row_ohr['Closing_time']; 



    $output_ohr = $output_ohr . '<p>Open</p>' . 
      '<p>' .$o_time. ' - ' .$c_time. '</p>' 
    ; 
    $i++; 
} 

Моя вторая попытка

date_default_timezone_set("Europe/London"); 

    $closed= strtotime("00:00am today GMT"); 
    $output_ohr = ''; 

    $ohrs = mysqli_query($dbc, "SELECT * FROM Opening_hrs 
WHERE Restaurant_ID='$rest_id' AND Day_of_week = DATE_FORMAT(NOW(), '%w') 
AND CURTIME() BETWEEN Open_time AND Closing_time"); 

    echo var_dump($ohrs); 

    $i = 1; 
    while ($row_ohr = mysqli_fetch_array($ohrs)) { 
    $o_time = $row_ohr['Open_time']; 
    $c_time = $row_ohr['Closing_time']; 

    if($o_time === $closed){ 
    $output_ohr = '<p>closed</p>'; 
    }else{ 

    $output_ohr = $output_ohr . '<p>Open</p>' . 
      '<p>' .$o_time. ' - ' .$c_time. '</p>' 
    ; 
    $i++; 
     } 
    }  

ответ

0

В вашей второй попытки вы выбираете только открытые магазины. Если магазин закрыт, запрос не будет возвращать никакие строки, и поэтому блок while не запускается ни разу.

Используйте следующий код, чтобы увидеть, если магазин открыт или закрыт:

$stmt = mysqli_prepare($dbc, "SELECT COUNT(*) FROM Opening_hrs 
WHERE Restaurant_ID=? AND Day_of_week = DATE_FORMAT(NOW(), '%w') 
AND CURTIME() BETWEEN Open_time AND Closing_time"); 

$stmt->bind_param('i', $rest_id); 
$stmt->execute(); 
$stmt->bind_result($result); 
$stmt->fetch(); 

if ($result) { 
    echo 'Open'; 
} else { 
    echo 'Closed'; 
} 

(. Обратите внимание на использование prepared statements, что предотвратить возможную инъекцию SQL)

+0

Спасибо вам помощь и время, но это не работает – Blue

+0

@Blue Не могли бы вы уточнить? – ShiraNai7

+0

Это говорит о закрытии, даже когда ресторан открыт. – Blue

Смежные вопросы