簡體   English   中英

更新表單中的數據庫字段

[英]Update database fields in form

您好,所以我正在學習php,基本上我希望已添加到數據庫中的任何字段都是“可編輯的”

讓我用一個例子更清楚

我來自這樣的樣子(非常基本)

名[輸入字段]

姓氏[輸入字段]

郵政編碼[輸入字段]

發送按鈕

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

這給我留下了..

>

注意:未定義索引:> 14行的C:\\ xampp \\ htdocs \\ test \\ update.php中的名字

注意:未定義的索引:> 15行的C:\\ xampp \\ htdocs \\ test \\ update.php中的姓氏

注意:未定義的索引:>第16行的C:\\ xampp \\ htdocs \\ test \\ update.php中的plz

關於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'。

IS.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”。 現在,通過使用查詢從數據庫中獲取這些值來定義“名字”,“姓氏”和“ 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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM