Я создаю таблицу, использующую PHP для вывода из базы данных MySQL, которая у меня есть. Я думаю, что у меня есть все, где я хочу, но единственная проблема, с которой я столкнулась, состоит в том, что результаты, кажется, (из-за отсутствия лучшего слова) "позади". Я имею в виду, что моя первая страница index.php
- это то, где я принимаю изменения пользователя в базе данных. Как только они нажмут " Update
он отправит их в файл results.php
который должен фактически выполнить SQL UPDATE, а затем отобразить обновленную таблицу.
Он отлично обновляет таблицу в соответствии с редактором базы данных XAMPP. Однако, когда я сказал "позади", я имею в виду, что страница загружается, обновляется, но не отображает обновленные данные, пока пользователь не обновит страницу или не вернется на первую страницу. Затем возвращается. Я не уверен, что может быть причиной этого, поэтому я надеюсь, что кто-то здесь может мне помочь. Я чувствую, что причина - это просто так, как будто я просто запускаю код в неправильном порядке, но я не знаю точно. Мой код ниже:
<html>
<body>
<?php
include('dbconnect.php');
$query = "SELECT * FROM vw_events";
$result = mysqli_query($conn, $query);
$count = mysqli_num_rows($result);
?>
<form name="form1" method="post" action="results.php">
<table width="auto" border="1" cellspacing="1" cellpadding="5">
<tr>
<td align="center"><strong>Event ID</strong></td>
<td align="center"><strong>Title</strong></td>
<td align="center"><strong>Topic</strong></td>
<td align="center"><strong>Description</strong></td>
<td align="center"><strong>Event Date</strong></td>
<td align="center"><strong>Speaker</strong></td>
<td align="center"><strong>Building</strong></td>
<td align="center"><strong>Room</strong></td>
</tr>
<?php
while($rows=mysqli_fetch_array($result)) {
?>
<tr>
<input name="event_id[]" type="hidden" id="event_id" value="<?php echo $rows['event_id']; ?>">
<td align="center">
<?php echo $rows['event_id'];?>
</td>
<td align="center">
<input name="title[]" type="text" id="title">
</td>
<td align="center">
<?php echo $rows['topic_name']; ?>
</td>
<td align="center">
<?php echo $rows['topic_description']; ?>
</td>
<td align="center">
<input name="date[]" type="date" id="date">
</td>
<td align="center">
<input title="Use reference tables below to enter speaker ID" name="speaker[]" type="text" id="speaker">
</td>
<td align="center">
<input title="Use reference tables below to enter building ID" name="building[]" type="text" id="building">
</td>
<td align="center">
<input title="Use reference tables below to enter Room ID" name="room[]" type="text" id="room">
</td>
</tr>
<?php
}
?>
<tr>
<td colspan="8" align="center"><input type="submit" name="Update" value="UPDATE"></td>
</tr>
</table>
</form>
</body>
</html>
<html>
<body>
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
error_reporting(E_ALL);
ini_set('display_errors',1);
require_once('dbconnect.php');
$query = "SELECT * FROM vw_events";
$result = mysqli_query($conn, $query);
$count = mysqli_num_rows($result);
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
$id = $_POST['event_id'];
$title2 = $_POST['title'];
$date2 = $_POST['date'];
$speaker2 = $_POST['speaker'];
$building2 = $_POST['building'];
$room2 = $_POST['room'];
for($i=0;$i<$count;$i++) {
$sql="UPDATE events SET title='$title2[$i]', event_date='$date2[$i]', speaker='$speaker2[$i]', building='$building2[$i]', room='$room2[$i]' WHERE event_id='$id[$i]'";
$result1=mysqli_query($conn, $sql);
}
}
?>
<form name="form1" method="post" action="index.php">
<table width="auto" border="1" cellspacing="1" cellpadding="5">
<tr>
<td align="center"><strong>Event ID</strong></td>
<td align="center"><strong>Title</strong></td>
<td align="center"><strong>Topic</strong></td>
<td align="center"><strong>Description</strong></td>
<td align="center"><strong>Event Date</strong></td>
<td align="center"><strong>Speaker</strong></td>
<td align="center"><strong>Building</strong></td>
<td align="center"><strong>Room</strong></td>
</tr>
<?php
while($rows=mysqli_fetch_array($result)) {
?>
<tr>
<td align="center">
<?php echo $rows['event_id'];?>
</td>
<td align="center">
<?php echo $rows['title']; ?>
</td>
<td align="center">
<?php echo $rows['topic_name']; ?>
</td>
<td align="center">
<?php echo $rows['topic_description']; ?>
</td>
<td align="center">
<?php echo $rows['event_date']; ?>
</td>
<td align="center">
<?php echo $rows['speaker_name']; ?>
</td>
<td align="center">
<?php echo $rows['building_name']; ?>
</td>
<td align="center">
<?php echo $rows['room_name']; ?>
</td>
</tr>
<?php
}
?>
<tr>
<td colspan="8" align="center"><input type="submit" name="Return" value="Return"></td>
</tr>
</table>
</form>
</body>
</html>
Кроме того, если кто-то может дать мне несколько htmlspecialchars
о том, как запустить функцию htmlspecialchars
на моих массивах в htmlspecialchars
results.php
я бы очень признателен. Я уже пытался создать цикл for для буквально каждого массива, но это не сработало. Я пробовал использовать ->
<?php
function htmlspecial_array(&$variable) {
foreach ($variable as &$value) {
if (!is_array($value)) { $value = htmlspecialchars($value); }
else { htmlspecial_array($value); }
}
}
но это также не сработало, и я попытался использовать array_walk_recursive
но безрезультатно. Я хочу попытаться сделать что-то вроде примера W3Schools здесь. Валидация формы W3Schools в нижней части страницы, где говорится: " Validate Form Data With PHP
а затем привести пример.
Результатом запроса UPDATE является количество затронутых строк в вашей базе данных. Чтобы правильно отображать обновленные данные, вам нужно повторно извлечь из базы данных, прежде чем создавать HTML. Вы должны изменить свой код в файле results.php следующим образом:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
error_reporting(E_ALL);
ini_set('display_errors',1);
require_once('dbconnect.php');
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
$id = $_POST['event_id'];
$title2 = $_POST['title'];
$date2 = $_POST['date'];
$speaker2 = $_POST['speaker'];
$building2 = $_POST['building'];
$room2 = $_POST['room'];
$query = "SELECT * FROM vw_events";
$result = mysqli_query($conn, $query);
$count = mysqli_num_rows($result);
for($i=0;$i<$count;$i++) {
$sql="UPDATE events SET title='$title2[$i]', event_date='$date2[$i]', speaker='$speaker2[$i]', building='$building2[$i]', room='$room2[$i]' WHERE event_id='$id[$i]'";
$result1=mysqli_query($conn, $sql);
}
}
$query = "SELECT * FROM vw_events";
$result = mysqli_query($conn, $query);
Примечание. Если ваши данные чувствительны, вы можете прочитать о подготовленном операторе mysqli, чтобы хакеры не могли вмешиваться в ваши запросы.
Что касается вашего вопроса о htmlspecialchars, см. Stackoverflow "Выполнить htmlspecialchars в многоуровневом массиве".
count
- это неопределенная переменная, что имеет смысл, потому что я в основном говорю циклу for перейти к значению переменной, которая еще не существует. Есть что-нибудь еще, о чем ты можешь подумать? Также я ценю ваши предложения и обязательно рассмотрю как подготовленные mysqli операторы, так и Stackoverflow «Выполнение htmlspecialchars в многоуровневом массиве»$query = "SELECT * FROM vw_events";
$result = mysqli_query($conn, $query);
$count = mysqli_num_rows($result);
прежде чем я сделаюwhile($rows=mysqli_fetch_array($result) {