我正在创建一个使用PHP从我拥有的MySQL数据库中提取的表。我想我已经拥有了我想要的所有东西,但是我遇到的唯一问题是结果似乎是(因为缺少一个更好的词)“落后”。我的意思是我的第一页index.php
是我接受用户编辑数据库的地方。单击Update
后,它会将它们发送到我应该实际执行SQL UPDATE的results.php
文件,然后显示更新的表。
根据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
内的数组上运行results.php
函数给我一些指导,我真的很感激。我已经尝试为字面上的每个数组创建一个for循环,但这不起作用。我尝试过使用 - &gt;
<?php
function htmlspecial_array(&$variable) {
foreach ($variable as &$value) {
if (!is_array($value)) { $value = htmlspecialchars($value); }
else { htmlspecial_array($value); }
}
}
但这也行不通,我尝试使用array_walk_recursive
但无济于事。我想在页面底部Validate Form Data With PHP
尝试像W3Schools的例子W3Schools Form Validation那样做一些事情,然后给出一个例子。
答案 0 :(得分:1)
从UPDATE查询中获得的结果是数据库中受影响的行数。要正确显示更新的数据,需要在生成HTML之前从数据库中重新获取。您应该在results.php中重新排列代码,如下所示:
class CarType {
final int seats;
final int maxSpeed;
...
static final CarType FAMILY_CAR = new CarType(5, 180);
static final CarType SPORT_CAR = new CarType(2, 280);
...
CarType(int seats, int maxSpeed) {
...
}
class DeliveryCarType extends CarType {
final int maxload;
...
static final DeliveryCarType HEAVY_TRUCK = new DeliveryCarType(3, 150, 500)
...
DeliveryCarType(int seats, int maxSpeed, int maxLoad) {
...
}
附注:如果您的数据是敏感的,您可能需要阅读有关mysqli准备好的声明,以便黑客无法篡改您的查询。
关于htmlspecialchars的问题,请参阅Stackoverflow“在多级数组上执行htmlspecialchars”。