PHP / MySQL-单击按钮时未在表格中获得第一个ID

时间:2018-08-03 14:14:27

标签: php mysql

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

页面代码:

    <?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>

关于为什么会发生这种情况的任何想法?

1 个答案:

答案 0 :(得分:0)

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

您只能拥有一个唯一的id属性。输出方式将有多个表单具有相同的提交ID。您可以这样修改id =“ checkoutUser $ row ['id']”:

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