在形式上更新数据库中的字段

问题描述 投票:0回答:1

您好,所以我正在学习PHP和basiclly我想,这已经被添加到数据库中的任何字段设置为“编辑”

请让我用一个例子更清晰

从这个样子的(基本版)我

FIRSTNAME [输入字段]

姓氏[输入字段]

邮政编码[输入字段]

发送按钮

 <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>

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

这里是我的problem..im不知道如何做这正确的方式。

我想在单击更新时,从到字段中的值“回去”的前场和再次按下发送的值更新。

这里是我的查询

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文件,其中的数据是发送和领域得到填补像这样(但didnt相当的工作)

这是我的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" >

这给我留下了..

>

通知:未定义指数:姓在C:\ XAMPP \ htdocs中\上线路测试\ update.php> 14

通知:未定义指数:名字在C:\ XAMPP \ htdocs中\上线路测试\ update.php> 15

通知:未定义指数:PLZ在C:\ XAMPP \ htdocs中\测试\ update.php上>线16

php mysql forms
1个回答
0
投票

关于update.php页:您收到错误消息说,“姓名”,“姓”和“PLZ”是没有定义。

这是因为你试图用POST来定义它们:

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

但实际上,名字的价值,姓氏和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页面上,你无法定义“姓名”,“姓”和“PLZ”使用$ _ POST [“...”]。

定义了update.php页面上的唯一的事情,就是“身份证”。这是因为“身份证”是你使用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']);

因此,只有“身份证”的定义。现在定义“姓名”,“姓”和“PLZ”通过从数据库中获取这些值,使用查询。

像这样:

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

(我想包含的 'id' 的变量为$ contactDto-> SETID(); ??)

然后执行下一行查询:

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

以下这样写:

$row = $results->fetch_assoc();

然后你就可以定义“姓名”,“姓”和“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>
© www.soinside.com 2019 - 2024. All rights reserved.