Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
选择器上的PHP逻辑问题_Php_Sql - Fatal编程技术网

选择器上的PHP逻辑问题

选择器上的PHP逻辑问题,php,sql,Php,Sql,我有一个活动预订系统,显示测试系统的可用插槽,我真的被一些逻辑卡住了 事件信息(A)存储有关事件的详细信息 event\u machine\u time(B)存储测试笔记本电脑事件时间,因为该机器每天只允许在特定时间使用 ********************************************* * id * machine_name * start_time * end_time * ********************************************* *

我有一个活动预订系统,显示测试系统的可用插槽,我真的被一些逻辑卡住了

事件信息
(A)存储有关事件的详细信息

event\u machine\u time
(B)存储测试笔记本电脑事件时间,因为该机器每天只允许在特定时间使用

*********************************************
* id * machine_name * start_time * end_time *
*********************************************
* 1  * LPN832       * 09:30:00   * 11:00:00 *
* 2  * LPN832       * 11:30:00   * 13:00:00 *
* 3  * LPN832       * 13:30:00   * 15:00:00 *
* 4  * MHY348       * 09:30:00   * 11:00:00 *
* 5  * MHY348       * 11:30:00   * 13:00:00 *
* 6  * MHY348       * 13:30:00   * 15:00:00 *
*********************************************
event\u booking
(C)存储预订详细信息,包括此人是否通过
C\u confirm
拒绝了活动,以及此人是否通过
live

***************************************************************************
* id * information_id * candidate_id * machine_name_id * live * confirmed *
* 3  * 2666           * 356          * 1               * 1    * 2         *
* 4  * 2666           * 456          * 1               * 1    * 0         *
***************************************************************************

So my statuses for confirmed are:
0 - Not confirmed
1 - Confirmed
2 - Declined

My statuses for live are:
1 - Live
0 - Deleted
这是我的代码:

$Machine_Query = "SELECT *,
        B.id AS m_id,
        C.id AS c_id,
        C.confirmed AS c_confirmed,
        C.live AS c_live
        FROM event_information A
        INNER JOIN event_machine_time B on (1=1)
        LEFT JOIN event_booking C on (B.id = C.machine_time_id and A.id = C.information_id )
        WHERE A.id = '$Event_Data_ID'
        ORDER BY B.machine_name ASC, B.start_time ASC";
        $Machine = $dbconn->query($Machine_Query);
对于我的下拉选择器,我使用以下选项:

<?php foreach ($Machine->fetchAll() as $Machine_Row) { 
                //if($Machine_Row["confirmed"] == 2) { } else {
                ?>
              <option value="<?php echo $Machine_Row["m_id"]; ?>" <?php if($Machine_Row["c_id"] != NULL && $Machine_Row["c_confirmed"] != "2" && $Machine_Row["c_live"] != "0") { echo "disabled"; } ?>><?php echo $Machine_Row["machine_name"]." - ".date("g:ia", strtotime($Machine_Row["start_time"])); ?><?php if($Machine_Row["c_id"] != NULL && $Machine_Row["c_confirmed"] != "2" && $Machine_Row["c_live"] != "0") { echo " - Booked"; } ?></option>
        <?php } //} ?> 


您可以选择一个布尔值来知道何时禁用该选项(此处名为
booked
):

我编辑了一些您的PDO查询:

$Machine = $dbconn->prepare(
    'SELECT
        *,
        B.id AS m_id,
        C.id AS c_id,
        C.confirmed AS c_confirmed,
        C.live AS c_live,
        (c.id IS NOT NULL AND C.confirmed != 2 AND C.live != 0) AS booked   
    FROM event_information A
        INNER JOIN event_machine_time B
            ON (1 = 1)
        LEFT JOIN event_booking C
            ON (B.id = C.machine_time_id AND A.id = C.information_id)
    WHERE A.id = :event_data_id
    ORDER BY B.machine_name ASC, B.start_time ASC'
);

$dbconn->execute([ 'event_data_id' => $Event_Data_ID ]);
这将大大缩短在HTML中输出的时间(使用三元运算符在单行中看起来会更好):


>

之后添加此行
和B.confirmed 2
,其中A.id='$Event\u Data\u id'
;你的SGBD是什么?我真的很惊讶这个问题得到了更多的选票。我搞不懂问题是什么。
$Machine = $dbconn->prepare(
    'SELECT
        *,
        B.id AS m_id,
        C.id AS c_id,
        C.confirmed AS c_confirmed,
        C.live AS c_live,
        (c.id IS NOT NULL AND C.confirmed != 2 AND C.live != 0) AS booked   
    FROM event_information A
        INNER JOIN event_machine_time B
            ON (1 = 1)
        LEFT JOIN event_booking C
            ON (B.id = C.machine_time_id AND A.id = C.information_id)
    WHERE A.id = :event_data_id
    ORDER BY B.machine_name ASC, B.start_time ASC'
);

$dbconn->execute([ 'event_data_id' => $Event_Data_ID ]);
<?php
foreach ($Machine->fetchAll() as $Machine_Row) { 
    ?>
    <option value="<?php echo $Machine_Row["m_id"]; ?>" <?php echo $Machine_Row['booked'] ? 'disabled' : ''; ?>>
        <?php echo $Machine_Row["machine_name"] . " - " . date("g:ia", strtotime($Machine_Row["start_time"])) . ($Machine_Row['booked'] ? ' - Booked' : ''); ?>
    </option>
    <?php
}
?>