У меня есть 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 ...
заявления.