我正在使用我的更新表单,我想使用用户之前输入的数据预填充表单。我基本上使用了我用于显示查询结果的页面的相同代码,但是,我得到的错误是:
Notice: Undefined index: firstname in C:\this\is\a\path\update.php on line 64
这是我的代码:
update.php
<?php
if(isset($_GET['id'])) {
require "../resources/config.php";
require "../resources/common.php";
try {
$connection = new PDO($dsn, $username, $password, $options);
$sql = "SELECT * FROM people WHERE id = ?";
$id = $_GET['id'];
$statement = $connection->prepare($sql);
$statement->execute(array($id));
$result = $statement->fetchAll();
}
catch(PDOException $error) {
echo $sql . "<br>" . $error->getMessage();
}
}
?>
<h2 class="display-3 text-center mb-5">Change a Phone Number</h2>
<h1><?php echo ($result['firstname']); ?></h1>
<form class="w-50 mx-auto" method="post">
<div class="form-group">
<label for="firstname">First Name</label>
<input class="form-control" type="text" name="firstname" id="firstname" placeholder="">
</div>
<div class="form-group">
<label for="lastname">Last Name</label>
<input class="form-control" type="text" name="lastname" id="lastname" placeholder="Last Name">
</div>
<div class="form-group">
<label for="email">Email Address</label>
<input class="form-control" type="email" name="email" id="email" placeholder="name@example.com">
</div>
<div class="form-group">
<label for="phonenumber">Phone Number</label>
<input class="form-control" type="tel" name="phonenumber" id="phonenumber" placeholder="xxx-xxx-xxxx">
</div>
<div class="form-group">
<input class="btn btn-dark" type="submit" name="submit" value="Submit">
</div>
</form>
<a class="btn btn-secondary d-block w-25 mx-auto" href="index.php">Back to home</a>
view.php
<?php
try {
require "../resources/config.php";
require "../resources/common.php";
$connection = new PDO($dsn, $username, $password, $options);
$sql = "SELECT * FROM people";
$statement = $connection->prepare($sql);
$statement->execute();
$result = $statement->fetchAll();
}
catch(PDOException $error) {
echo $error->getMessage();
}
?>
<?php require "../resources/templates/header.php" ?>
<?php if ($result && $statement->rowCount() > 0) { ?>
<h2 class="display-2 text-center mb-4">Contacts</h2>
<table class="table table-striped table-dark">
<thead>
<tr>
<th scope="col"></th>
<th scope="col">First Name</th>
<th scope="col">Last Name</th>
<th scope="col">Email Address</th>
<th scope="col">Phone Number</th>
<!-- <th scope="col">Date Added</th> -->
<th scope="col">Actions</th>
</tr>
</thead>
<tbody>
<?php foreach ($result as $row) { ?>
<tr>
<th scope="row"></th>
<td><?php echo escape($row["firstname"]); ?></td>
<td><?php echo escape($row["lastname"]); ?></td>
<td><?php echo escape($row["email"]); ?></td>
<td><?php echo escape($row["phonenumber"]); ?></td>
<!-- <td><?php echo escape($row["date"]); ?> </td> -->
<td style="letter-spacing: 20px;">
<a href="update.php?id=<?php echo escape($row["id"]); ?>'">
<i class="fas fa-pencil-alt"></i>
</a>
<a href="delete.php?id=<?php echo escape($row["id"]); ?>'">
<i class="fas fa-trash"></i>
</a>
</td>
</tr>
<?php } ?>
</tbody>
</table>
<?php } else { ?>
<blockquote>No results found.</blockquote>
<?php }
?>
<a class="btn btn-secondary d-block w-25 mx-auto mb-4" href="create.php">Add a new number</a>
<a class="btn btn-secondary d-block w-25 mx-auto" href="index.php">Back to home</a>
<?php require "../resources/templates/footer.php"; ?>
如何在同时使用预准备语句和PDO的同时改进代码并正确获取数据?
答案 0 :(得分:1)
在您的update.php文件中,使用fetch代替fetchAll。
fetchAll
获取一个记录数组,其中每个记录由一个数组表示,因此如果找不到任何匹配的记录,它将返回一个数组数组或一个空数组。
虽然fetch
只获取数组表示的一条记录,但即使数据库返回多条记录也只返回一条记录,因为您的SQL查询使用的是您期望的WHERE id = <id>
子句要返回的一条记录(或零),因此fetch
是要使用的自然函数。
另一方面,如果找不到fetch
的记录,<id>
可能会返回false,因此您应将HTML括在if ($result)
子句中并显示“未找到记录“在else
子句中,就像你在view.php文件中所做的那样。
除此之外,您使用PDO准备好的陈述对我来说是正确的。