3

私は、顧客が1日に何時間予約できるスタジオ予約のコードを作成しています...たとえば、顧客が入力した日付:2011年10月17日タイムイン:10:3​​0:00 amタイムアウト: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!";
}

?>

すでに時間を制限することはできますが、まだ日を制限することはできません。

これは単なるサンプルなので、データベースに転送する場合の対処方法がわかります。

私の問題はこれです:

3列のreserveという名前のテーブルがあります...timein、timeout、dateres3つのレコードが入力されました。

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 amをデータベース内のすべてのレコードに変更するにはどうすればよいですか?

私はphpとmysqlについて非常に限られた知識しか持っていません...:(誰かが私を助けてください。お願いしますお願いします

4

1 に答える 1

0

予約期間の扱い方を考え直すことをお勧めします。date_reserved単に持っているのではなく、time_instime_outとしてdatetime。また、12時間ではなく24時間形式を使用します(AMとPMを使用)。だからあなたは持っているでしょう:

$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_intime_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 に答える