PHP/MySQL - 单击按钮时无法获取表中的第一个 ID

标签 php mysql

我们正在创建一个 HTML 表,如果用户选择名称旁边的“结帐”按钮,它将使用当前日期和时间更新数据库中的一行,同时将其从 HTML 表中删除。它通过获取所选行的 ID 来实现此目的。由于某种原因,当 HTML 表中存在多个名称时,如果单击第一个名称的“结帐”按钮,它会获取其下方名称的 ID 并更新数据库中的该行。如果您单击第一个下方的“结帐”按钮,它会正常执行代码。

页面代码:

    <?php
    // connect to database
    require_once('connection.php');
    session_start();

    //get session variable, if empty, unset and logout
    if(empty($_SESSION['department'])) {
    session_unset();
    session_destroy();
    header("Location: index.php");
    } else {
    }

    $dept = $_SESSION[department];
    $eventsTable = $dept . "_events";
    $checkinTable = $dept . "_checkin";

    $query = mysqli_query($VisitorManagement, "SELECT * FROM config WHERE deptCode='$dept'");
    $row2 = mysqli_fetch_array($query);
    $checkout = $row2['checkout'];

    $sql = mysqli_query($VisitorManagement, "SELECT * FROM {$checkinTable} WHERE deptCode='$dept'");
    $row3 = mysqli_fetch_array($sql);
    $checkoutDateTime = $row3['checkoutDateTime'];

    if (!$checkout) {
    header("Location: checkin.php");
    }

    if(isset($_POST['checkoutUser']))
    {
    $id = mysqli_real_escape_string($VisitorManagement, $_POST['id']);
    // set checkout date
    $query = "UPDATE {$checkinTable} SET checkoutDateTime = CURRENT_TIMESTAMP() WHERE id = '$id'";
    if (mysqli_query($VisitorManagement, $query)) {
        header('Location: checkout-thankyou.php');
    } else {
        echo "Error: " . $sql . "<br>" . mysqli_error($VisitorManagement);
    }
    }


    ?>

    <!doctype html>
    <html class="no-js" lang="en">
    <head>
    <meta charset="utf-8" />
    <meta http-equiv="x-ua-compatible" content="ie=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Visitor Management</title>
    <link rel="stylesheet" href="css/foundation.min.css" />
    <link rel="stylesheet" href="css/app.css" />
    </head>
    <body>
    <!-- nav -->
    <div class="top-bar">
    <div class="top-bar-left">
    <ul class="menu">
    <li><a href="checkin.php">Check-In</a></li>
    <?php 
        if ($checkout) {
    ?>
    <li><a href="checkout.php" class="active">Checkout</a></li>
    <?php } ?>
    </ul>
    </div>
    <div class="top-bar-right">
    <ul class="menu">
      <li><a href="login.php">Admin Login</a></li>
      <li><a href="logout.php">Logout</a></li>
    </ul>
    </div>
    </div>
    <div class="row text-center" style="margin-top: 5%;">
        <h1><img src="img/su-wordmark-vm.png" alt="Syracuse University"></h1>
        <?php
    $sql = "SELECT name from departments WHERE code='{$dept}'";
    $result = mysqli_query($VisitorManagement, $sql);
    $row = mysqli_fetch_array($result);
    $name = $row["name"];
    echo "<h2> $name </h2>"
    ?>
      </div>


       <div class="row">
    <div class="medium-12 columns text-center" style="padding-top: 5%;">
      <p>Please select the checkout button of the visitor you wish to checkout.</p>

      <form id='checkout' method='post' name='checkout'>
       <?php
                 $checkinTable = $dept . "_checkin";

                $result = mysqli_query($VisitorManagement, "SELECT * FROM {$checkinTable} WHERE DATE(checkinDateTime) = CURDATE() AND checkoutDateTime IS NULL ORDER BY checkinDateTime DESC");

                echo "<table class='checkin'>
                <thead>
                <tr>
                <th>Student Name</th>
                <th>SUID #</th>
                <th>Student Email</th>
                <th>Primary Affiliation</th>
                <th>Program</th>
                <th>Education Level</th>
                <th>Staff Member</th>
                <th>Reason for Visit</th>
                <th>Check In Date/Time</th>
                <th>Checkout</th>
                <th aria-hidden='true' class='hide'>Hidden User ID</th>
                </tr>
                </thead>";


                    while($row = mysqli_fetch_array($result))
                    {
                        $phpdate = strtotime($row['checkinDateTime']);
                        $dateTime = date('F j, Y, g:i a', $phpdate);
                                echo "<tbody>";
                                echo "<tr>";
                                echo "<td>" . $row['studentName'] . "</td>";
                                echo "<td>" . $row['suid'] . "</td>";
                                echo "<td>" . $row['studentEmail'] . "</td>";
                                echo "<td>" . $row['studentAffiliation'] . "</td>";
                                echo "<td>" . $row['studentProgram'] . "</td>";
                                echo "<td>" . $row['studentEduLevel'] . "</td>";
                                echo "<td>" . $row['staffMember'] . "</td>";
                                echo "<td>" . $row['reasonForVisit'] . "</td>";
                                echo "<td>" . $dateTime . "</td>";
                                echo "<td><input type='submit' class='button' id='checkoutUser' name='checkoutUser' value='Checkout'></td>";
                                echo "<td><input type='hidden' aria-hidden='true' name='id' value='" . $row['id'] . "'></td>";
                                echo "</tr>";
                }
             echo "</tbody>";   
             echo "</table>";
        echo "</form>";

                mysqli_close($VisitorManagement);
            ?>  
    </div>
  </div>
    <script src="js/vendor/jquery.min.js"></script>
    <script src="js/vendor/what-input.min.js"></script>
    <script src="js/foundation.min.js"></script>
    <script src="js/app.js"></script>
  </body>
</html>

关于为什么会发生这种情况有什么想法吗?

最佳答案

我已经发表了评论,但在这里回答会更容易。

您只能拥有一个唯一的 id 属性。通过这种输出方式,您将拥有多个具有相同提交 ID 的表单。您可以通过执行 id="checkoutUser$row['id']"来修复它,如下所示:

echo '<td><input type="submit" class="button" id="checkoutUser' . $row['id'] . '" name="checkoutUser" value="Checkout"></td>';

关于PHP/MySQL - 单击按钮时无法获取表中的第一个 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51674585/

相关文章:

mysql - 使用 MySQL JSON 字段连接具有自定义字段的表

mysql 用 on 条件连接 2 个表,保留一些值

php - 列出类别以及每个项目的数量

php - 获取ROW的个体ID,并使结果可链接

PHP 和分析 API - 获取 10 行

mysql - 当 count > x 时显示单独的行

mysql - 需要一些帮助从结果 MYSQL 中隐藏重复项

php - 如何在 Yii2 上使用 mysqli_info

php - 如何检测字符串中是否有新的换行符?

java - 从数据库中检索图像并显示在标签中