3

我正在为工作室预订制作代码,客户可以在其中预订一天中的几个小时......例如,客户输入日期:2011 年 10 月 17 日时间:上午 10:30:00 超时:11:30:上午 00 点

在这种情况下,其他客户不得在同一日期输入上午 10:30 至上午 11:30 之间的时间/超时。

在制作数据库之前,我尝试过以下代码:

<?php 
$resttimefrom='10:00:00 am';
$resttimeto='11:00:00 am';
$reserve='11:01:00 pm';
$datedat='2012-10-14';


$st_time    =   strtotime($resttimefrom);
$end_time   =   strtotime($resttimeto);
$reserve   =   strtotime($reserve);
$datedat   =   strtotime($datedat);

print $st_time; echo "<br>";
print $end_time; echo "<br>";
print $reserve; echo "<br>";

if ($reserve => $st_time and $reserve =< $end_time)
{
echo "sorry, not available";
}
else
{
echo "ok!";
}

?>

它已经可以限制时间,但还不能限制日期。

它只是一个示例,因此如果我将其传输到数据库中,我会知道该怎么做。

我的问题是这样的:

我有一个名为 reserve 的表,有 3 列... timein、timeout、dateres 已输入三条记录,

2011年10月15日 10:30-11:30 2011年10月15日 1:00-2:30 2011年10月15日 5:30-8:30

如何检索这些记录以在上面的代码中使用它?而不是这些:

$resttimefrom='10:00:00 am';
    $resttimeto='11:00:00 am';
    $reserve='11:01:00 pm';
    $datedat='2012-10-14';

如何将上午 10:00:00 更改为数据库中的所有记录?

我对php和mysql的了解非常有限...... :(请有人帮助我。请拜托

4

1 回答 1

0

我建议您重新考虑处理预订期限的方式。而不是date_reserved简单地 havetime_intime_outas datetimes。我也会使用 24 小时格式而不是 12 小时(上午和下午)。所以你会有:

$timeInStr  = '2012-10-14 10:00:00';
$timeOutStr = '2012-10-14 11:00:00';

为了完整起见,这里有一些将数据插入表中的代码:

$pdo = new PDO(
        "mysql:dbname=stack_overflow;host=127.0.0.1",
        $username,
        $password);

// prepare the insert statement
$statement = $pdo->prepare("
        INSERT INTO `reserve`(`time_in`, `time_out`)
        VALUES (:time_in, :time_out)");

// bind param values
$statement->bindParam(':time_in', $timeInStr, PDO::PARAM_STR);
$statement->bindParam(':time_out', $timeOutStr, PDO::PARAM_STR);

$statement->execute();

为了确定预订请求是否会与先前设置的预订冲突,请查询数据库中的预订请求(相当于您的$reserve变量)是否在任何预订的time_in&之间。time_out

在这种情况下,我会计算有多少先前的预订与请求的预订时间重叠。

$statement = $pdo->prepare("
    SELECT COUNT(`id`)
    FROM `reserve`
    WHERE :reserve_request_time BETWEEN `time_in`
    AND `time_out`");

$statement->bindParam(
        ':reserve_request_time',
        '2012-10-14 10:30:00',
        PDO::PARAM_STR);

$statement->execute();
$result = $statement->fetch();

// if an overlapping reservation was found "sorry, not available"
if (0 < (int) $result['COUNT(`id`)']) {
    echo "sorry, not available";
}
else {
    echo "ok!";
}
于 2012-10-14T05:37:21.157 回答