PHP / MySQL - не получает первый идентификатор в таблице при нажатии кнопки

0

Мы создаем таблицу HTML, где, если пользователь выбирает кнопку "Checkout" рядом с именем, она обновляет строку в базе данных с текущей датой и временем, удаляя их из таблицы HTML. Он делает это, захватывая идентификатор выбранной строки. По какой-то причине, когда в таблице HTML есть несколько имен, если вы нажмете кнопку "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
    У вас есть только 1 форма, и ваш код добавит несколько входов с именем submit и id . Таким образом, когда вы читаете опубликованный идентификатор, вы получите только последнее значение. Вам нужно создать несколько форм для работы таким образом
  • 0
    Установите значение каждой кнопки отправки для идентификатора, затем посмотрите на $ _POST ['checkoutUser'], чтобы выяснить, какая из них была нажата. Избавьтесь от скрытых входов.
Показать ещё 1 комментарий
Теги:

1 ответ

0

Я сделал комментарий, но мне проще просто ответить здесь.

У вас может быть только один уникальный атрибут id. То, как это выдает, будет иметь несколько форм с одинаковым идентификатором submit. Вы можете исправить это, выполнив id = "checkoutUser $ row ['id']" следующим образом:

echo '<td><input type="submit" class="button" id="checkoutUser' . $row['id'] . '" name="checkoutUser" value="Checkout"></td>';
  • 0
    Это может также помочь заключить ваше эхо в одинарные кавычки. Таким образом, ваш вывод html не будет иметь проблем, когда ему нужны двойные кавычки. Проще написать то, что вам нужно, и объединить при необходимости между одинарными кавычками.
  • 1
    Хотя вы правы в том, что атрибут id должен быть уникальным, чтобы быть действительным html, ваш ответ не решит проблему здесь, а также у вас есть синтаксические ошибки в вашем ответе ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню