php - 商店开门和关门时间,开门时显示关门

标签 php mysql

我试图根据数据库中的开门和关门时间来显示商店是否开门或关门。如果它是开放的,则显示当天的开放和关闭时间,如果它是关闭的,则显示关闭的时间。我目前的问题是,即使商店计划开放(尝试 1),我的查询也会回显关闭,或者根本不回显任何内容(尝试 2)。

我的数据库中关闭的商店表示为 00:00。 任何建议或指导将不胜感激,因为我正在自学并且已经停滞不前。

数据库

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++;
      }
  }       

最佳答案

在第二次尝试中,您仅选择开放的商店。如果商店关门了,查询将不会返回任何行,因此 while block 甚至不会运行一次。

使用以下代码查看商店是否营业:

$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 注入(inject)。)

关于php - 商店开门和关门时间,开门时显示关门,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37400170/

相关文章:

php - WordPress 自定义数据库查询

php - Laravel 关系返回 null

PHP代码没有被执行,但是代码显示在浏览器源代码中

php - 如何使用 cakephp find 从 mysql 表中查找共同的 friend 及其数量

php - 参数内的 n 个随机数

PHP 'if' 语句跨越多行?

java - 通过 Java API 使用 Liquibase 生成数据导出 SQL 文件

mysql - 如何创建一个 lambda 函数来获取 mysql 池连接并将其提供给其他 lambda 函数?

mysql - SQL如何仅在出现超过2次时返回一个值

php - 如何在可移植媒体(例如 CD、USB 和/或 iPhone)上运行 PHP 和 MySQL 的等价物