У меня есть 3 пользователя с разными идентификаторами в базе данных, и он продолжает получать последний идентификатор пользователя, который был в цикле, когда я принимаю или отклоняю?

// есть 3 идентификатора, которые были просмотрены из этой таблицы

$sql = mysqli_query($conn, "ВЫБРАТЬ * ИЗ user_appointment WHERE event = ''");

      while($row = mysqli_fetch_assoc($sql)){

    $id = $row["id"];

    $date = $row["date"];

    $office = $row['office'];

        echo "<table>";

            echo "<tr>";
                echo "<td colspan='2'> <strong>Name: </strong>" . $row['first_name'] . " "  . $row['middle_name'] . " " . $row['last_name'] . "</td>";
                echo "<td><strong>You're request is: </strong>" . $row['event'] . "</td>";
            echo "</tr>";
            
            echo "<tr><td colspan='3'> <strong>Address: </strong>" . $row['address'] . " </td></tr>";
            echo "<tr><td colspan='3'> <strong>Office to go: </strong>" . $row['office'] . " </td></tr>";

            echo "<tr>";
                echo "<td> <strong>Contact#: </strong>" . $row['phone'] . "</td>";
                echo "<td> <strong>Request made from: </strong>" . $row['curdate'] . "</td>";
                echo "<td> <strong>Time request: </strong>" . $row['time'] . "</td>";
            echo "</tr>";

            echo "<tr>";
                echo "<td colspan='3'><strong><i>Message: </i></strong><br>". $row['message'] . "</td>";                
            echo "</tr>";
        
            echo "<tr> <td colspan='3'>";
                echo "<center><form method='GET'>
                        <div class='center'>
                            <label for=''>Select Date:</label><br>
                            <input type='date' name='userDate' id='userDate' value='' required>
                        </div><br>
                            <button type='submit' name='approveSubmit' class='btn btn-success'>ACCEPT</button>
                            <button type='submit' name='rejectSubmit' class='btn btn-danger'>REJECT</button>";
                echo "</form> </center>";
            echo "</td></tr>";

        echo "</table>";

echo 'Либо я выбираю одного из пользователей, он все равно получает идентификатор пользователя, который был в цикле последним';

              if(isset($_GET['approveSubmit'])){
            isset($_GET['userDate']);
            $date = $_GET['userDate'];
            
            header("location: ../approve_insert.php?id=$id&date=$date");
        }
        if(isset($_GET['rejectSubmit'])){
            header("location: ../reject_insert.php?id=$id");
        }                                          
}

2 ответа

Решение

Вы не передаете правильный $id на ваш header: Location(... Чтобы решить эту проблему, вам также необходимо передать в форму идентификатор пользователя, чтобы это значение становилось доступным при нажатии на пользователя.

Вы можете сделать это, добавив дополнительный скрытый ввод в форму, которую вы создаете.

      <input type='hidden' name='id' value='".$id."' />

Также нет необходимости размещать код, управляющий действием, которое вы хотите выполнить, внутри цикла, создающего таблицу. Просто поместите его над (или под) кодом, который генерирует таблицу

      <?php
    if(isset($_GET['approveSubmit'])){
        $date = $_GET['userDate'];
        header('location: ../approve_insert.php?id='.$_GET['id'].'&date='.$date);
        exit;
    }

    if(isset($_GET['rejectSubmit'])){
        header('location: ../reject_insert.php?id='.$_GET['id']);
        exit;
    }

    $sql = mysqli_query($conn, "SELECT * FROM user_appointment WHERE event = '' ");

    while($row = mysqli_fetch_assoc($sql)){
        $id = $row["id"];
        $date = $row["date"];
        $office = $row['office'];
        echo '... table start ...';

        echo "<center><form method='GET'>
                <div class='center'>
                    <label for=''>Select Date:</label><br>
                    <input type='date' name='userDate' id='userDate' value='' required>
                </div><br>

                <button type='submit' name='approveSubmit' class='btn btn-success'>ACCEPT</button>
                <button type='submit' name='rejectSubmit' class='btn btn-danger'>REJECT</button>
                <input type='hidden' name='id' value='".$id."' />
                ";
        echo "</form> </center>";
        echo '... table end ...';
    }

Имейте в виду, что вам все равно придется дезинфицировать ввод $_GET['id'] а также $_GET['userDate'] перед использованием его в вашем коде / запросах

На данный момент я предполагаю, что несколько пользователей удовлетворяют условиям в конце вашего цикла. Если ваша цель - перенаправить в указанное место из первого вызова местоположения заголовка, вам придется предотвратить продолжение цикла. Обычно это делается с помощью exit().

      header("location: ../reject_insert.php?id=$id");
exit();

Кроме того, вы получите сообщение об ошибке, что вы не можете установить заголовки, потому что вы уже вывели содержимое тела. В header("location...") может быть вызван только до вашего echo ... заявления.

Другие вопросы по тегам