使用PDO在PHP中预编辑编辑表单

时间:2018-04-15 21:46:55

标签: php database pdo

我正在使用我的更新表单,我想使用用户之前输入的数据预填充表单。我基本上使用了我用于显示查询结果的页面的相同代码,但是,我得到的错误是:

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的同时改进代码并正确获取数据?

1 个答案:

答案 0 :(得分:1)

在您的update.php文件中,使用fetch代替fetchAll

fetchAll获取一个记录数组,其中每个记录由一个数组表示,因此如果找不到任何匹配的记录,它将返回一个数组数组或一个空数组。

虽然fetch只获取数组表示的一条记录,但即使数据库返回多条记录也只返回一条记录,因为您的SQL查询使用的是您期望的WHERE id = <id>子句要返回的一条记录(或零),因此fetch是要使用的自然函数。

另一方面,如果找不到fetch的记录,<id>可能会返回false,因此您应将HTML括在if ($result)子句中并显示“未找到记录“在else子句中,就像你在view.php文件中所做的那样。

除此之外,您使用PDO准备好的陈述对我来说是正确的。