php - 更新表单中的数据库字段

标签 php mysql forms

你好,我正在学习 php,基本上我希望已添加到数据库中的任何字段都是“可编辑的”

让我用一个例子来更清楚地说明

我的样子是这样的(非常基本)

Firstname [input field]

Lastname [input field]

ZIP Code [input field]

发送按钮

 <form method="post" action="">
            <table>
                <tr>
                    <td>Vorname</td>
                    <td><input type="text" name="firstname"></td>
                </tr>
                <tr>
                    <td>Nachname</td>
                    <td><input type="text" name="lastname"></td>
                </tr>
                <tr>
                    <td>PLZ</td>
                    <td><input type="number" name="plz"></td>
                </tr>
            </table>
            <button type="submit" name="send">Send</button>
  </form>

当按下发送按钮时,输出将显示在下表中,如下所示

|---------------------|------------------|------------------|
|      Firstname      |     Lastname     |   Zip Code       |
|---------------------|------------------|------------------|
|       Tomas         |       Möller     |   123123         |
|---------------------|------------------|------------------|

在这些行旁边我仍然有这两个(不适合)

|---------------------|------------------|
|     Update          |     Delete       |
|---------------------|------------------|
|      update         |         delete   |
|---------------------|------------------|
 <table class="table">
            <thead>
            <tr>
                <th scope="col">#</th>
                <th scope="col">First Name</th>
                <th scope="col">Last Name</th>
                <th scope="col">PLZ</th>
                <th scope="col">Delete</th>
                <th scope="col">Update</th>
            </tr>
            </thead>
            <tbody>
            <?php
            /**
             * @var $contact ContactDto
             */
            $contacts = $contactRepository->findAll();


            foreach ($contacts as $contact) {
                ?>
                <tr>
                    <th scope="row"><?php echo $contact->getId()?></th>
                    <td><?php echo $contact->getFirstname() ?></td>
                    <td><?php echo $contact->getLastname() ?></td>
                    <td><?php echo $contact->getPlz() ?></td>
                    <td><a href=delete.php?id=<?php echo (int)$contact->getId()?> >Delete</a></td>
                    <td><a href=update.php?id=<?php echo (int)$contact->getId()?> >Update</a></td>
                </tr>

                <?php
                }
                ?>
            </tbody>
        </table>

所以基本上每一行都有自己的更新和删除按钮。

这是我的问题..我不知道如何正确地做到这一点。

我希望当单击更新时,到字段的值“返回”到顶部字段,并且当再次按下发送时,值会更新。

这是我的查询

public function update(ContactDto $contactDto) {

        $stmt = $this->pdo->prepare("UPDATE contacts SET firstname=:firstname,
                                                                  lastname=:lastname,
                                                                  plz=:plz
                                                                  WHERE id=:id");
        $stmt->bindValue(':firstname', $contactDto->getFirstname(), PDO::PARAM_STR);
        $stmt->bindValue(':lastname', $contactDto->getLastname(), PDO::PARAM_STR);
        $stmt->bindValue(':plz', $contactDto->getPlz(), PDO::PARAM_INT);
        $stmt->bindValue(':id', $contactDto->getId(), PDO::PARAM_INT);
        $stmt->execute();

    }

我确实尝试创建一个新的 update.php 文件,在其中发送数据,并且字段像这样填充(但这不太有效)

这是我的 update.php 文件

$contactRepository = new ContactRepository(
    DatabaseConnection::getConnection()
);

$contactDto = new ContactDto();
$contactDto->setId($_GET['id']);
$contactDto->setFirstName($_POST['firstname']);
$contactDto->setLastName($_POST['lastname']);
$contactDto->setPlz($_POST['plz']);

$contactRepository->update($contactDto);

?>

<form method="post" action="update.php">
    <input type="hidden" name="id" value="<?php echo $contactDto->getId(); ?>" />
    <?PHP
    ?>
    <table>
        <tr>
            <th>First Name: </th>
            <td>
                <input type="text" id="vorname" name="firstname" placeholder="Dein Vorname" size="35" value="<?php echo $contactDto->getFirstName(); ?>">
            </td>
        </tr>
        <tr>
            <th>Last Name: </th>
            <td>
                <input type="text" id="nachname" name="lastname" placeholder="Dein Nachname" size="35" value="<?php echo $contactDto->getLastName(); ?>">
            </td>
        </tr>
    </table>

    <input type="submit" name="save" value="Update" >

这给我留下了..

>

Notice: Undefined index: firstname in C:\xampp\htdocs\test\update.php on line >14

Notice: Undefined index: lastname in C:\xampp\htdocs\test\update.php on line >15

Notice: Undefined index: plz in C:\xampp\htdocs\test\update.php on >line 16

最佳答案

关于 update.php 页面:您收到的错误消息表明“firstname”、“lastname”和“plz”未定义。

这是因为您尝试使用 POST 定义它们:

$contactDto->setFirstName($_POST['firstname']); $contactDto->setLastName($_POST['lastname']); $contactDto->setPlz($_POST['plz']);

但事实上,firstname、lastname 和 plz 的值并未发布到此页面。仅当您在表单中单击提交按钮时,POST 才会“激活”

<form method="POST"...

但是您没有通过表单进入 update.php 页面,而是通过您创建的此表中的超链接:

        foreach ($contacts as $contact) {
            ?>
            <tr>
                <th scope="row"><?php echo $contact->getId()?></th>
                <td><?php echo $contact->getFirstname() ?></td>
                <td><?php echo $contact->getLastname() ?></td>
                <td><?php echo $contact->getPlz() ?></td>
                <td><a href=delete.php?id=<?php echo (int)$contact->getId()?> >Delete</a></td>
                <td><a href=update.php?id=<?php echo (int)$contact->getId()?> >Update</a></td>
            </tr>

            <?php
            }
            ?>

这并没有错!这个表非常好。

但是在 update.php 页面上,您无法使用 $_POST['....'] 定义 'firstname'、'lastname' 和 'plz'。

update.php 页面上唯一定义的内容是“id”。这是因为“id”是您使用 get 方法发送到此页面的唯一内容。再次强调:这是正确的方法,所以不要改变它。

**

您需要更改的是:

**

更改您的代码:

$contactDto = new ContactDto();
$contactDto->setId($_GET['id']);
$contactDto->setFirstName($_POST['firstname']);
$contactDto->setLastName($_POST['lastname']);
$contactDto->setPlz($_POST['plz']);

对此:

  $contactDto = new ContactDto();
    $contactDto->setId($_GET['id']);

因此仅定义了“id”。 现在,通过使用查询从数据库获取这些值来定义“firstname”、“lastname”和“plz”。

像这样:

$getstuff = "SELECT * FROM yourtablename WHERE id = $thevariablethatcontainstheid";

(我猜包含“id”的变量是 $contactDto->setId(); ??)

然后在下一行执行查询:

$results = mysqli_query($yourconnectingthing,$getstuff);

并写在下面:

$row = $results->fetch_assoc();

然后你可以定义“firstname”、“lastname”和“plz”!通过这样写:

$firstname = $row['firstname'];
$lastname = $row['lastname'];
$plz = $row['plz'];

现在您需要更改的最后一件事是编辑表单中的值。 这是您的代码:

<tr>
            <th>First Name: </th>
            <td>
                <input type="text" id="vorname" name="firstname" placeholder="Dein Vorname" size="35" value="<?php echo $contactDto->getFirstName(); ?>">
            </td>
        </tr>

将其更改为:

<tr>
            <th>First Name: </th>
            <td>
                <input type="text" id="vorname" name="firstname" placeholder="Dein Vorname" size="35" value="<?php echo $firstname ?>">
            </td>
        </tr>

关于php - 更新表单中的数据库字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54497400/

相关文章:

php - 如何将自定义帖子标题显示为 "first_name last_name"

带有 bindParam 与 bindValue 的 PHP PDO?

php - 将动态 PHP 表单插入 MySQL

php - 只需 1 个查询即可增加 View 表?

javascript - 为什么Meteorjs中的这个提交功能不起作用?

java - 两种形式但只有1个jsp文件

javascript - 相当于 PHP 的 yaml 中的express app.get ("/:users/:names")?

php - 如何将日期和user_id插入mysql

python - 如何使用 Python 的 DBAPI 来可移植地验证数据库模式?

javascript - 将 html 表单值视为 JavaScript 语句