// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= 使用 PHP 创建数据库驱动的应用程序
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: 使用 PHP 创建数据库驱动的应用程序 - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, 使用 PHP 创建数据库驱动的应用程序

= 第 7 课：更新和删除数据库中的条目
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: 第 7 课：更新和删除数据库中的条目 - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, 第 7 课：更新和删除数据库中的条目



1. link:wish-list-tutorial-main-page.html[+使用 PHP 创建数据库驱动的应用程序 - 主页+]
2. 
创建数据库

1. link:wish-list-lesson1.html[+创建 MySQL 数据库+]
2. link:wish-list-oracle-lesson1.html[+创建 Oracle 数据库表+]
3. 
link:wish-list-lesson2.html[+设计应用程序。从数据库读取数据+]

4. link:wish-list-lesson3.html[+创建新的应用程序用户+]
5. link:wish-list-lesson4.html[+优化代码+]
6. link:wish-list-lesson5.html[+添加安全功能。实现应用程序用户登录+]
7. link:wish-list-lesson6.html[+在数据库中添加新的愿望+]
8. 
*=> 更新和删除数据库中的条目*

9. link:wish-list-lesson8.html[+使用 CSS 技术改进应用程序的外观+]
10. link:wish-list-lesson9.html[+将应用程序部署到远程 Web 服务器+]

image::images/netbeans-stamp-80-74-73.png[title="此页上的内容适用于 NetBeans IDE 7.2、7.3、7.4 和 8.0"]

在本课中，将使用以下两个功能扩展应用程序功能：


要实现这些功能，请编辑  ``editWishList.php``  和  ``editWish.php``  文件。您还会创建一个名为  ``deleteWish.php``  的新文件。

image::images/page-flow-diagram-l7.png[]

当前文档是“在适用于 PHP 的 NetBeans IDE 中创建 CRUD 应用程序”教程的一部分。



== 来自上一课的应用程序源代码

MySQL 用户：单击link:https://netbeans.org/files/documents/4/1932/lesson6.zip[+此处+]以下载源代码，该代码反映了在完成上一课之后的项目状态。

Oracle 数据库用户：单击link:https://netbeans.org/projects/www/downloads/download/php%252Foracle-lesson6.zip[+此处+]以下载源代码，该代码反映了在完成上一课之后的项目状态。


== 编辑愿望

该功能支持以下用例：

* 在  ``editWishList.php``  页上，用户按愿望右侧的 "Edit" 按钮。包含选定愿望数据的  ``editWish.php``  页打开。
* 用户更改愿望说明和/或截止日期，然后按 "Save Changes" 按钮。
* 如果_未_填写说明，则会显示一条错误消息，且用户将返回到  ``editWish.php``  页。
* 如果填写了说明，应用程序将返回到  ``editWishList.php``  页，将在其中更新愿望。

该实现包括以下步骤：

* <<addEditButton,在 editWishList 页上添加 "Edit" 按钮>>
* <<wishArrayUpdate,在 editWish.php 页上更新 $wish 数组以存储愿望数据>>
* <<updateInputForm,在 editWish.php 页上更新输入窗体>>
* <<updateWishRecord,验证提交的数据并更新数据库中的愿望>>


=== 实现 "Edit" 按钮

在  ``editWishList.php``  中，通过一个循环（ ``while``  语句）实现包含许愿者愿望的表；从数据库中选择愿望时，该循环将显示包含愿望的行。添加 "Edit" 按钮作为行中最右侧的单元格。

1. 要通过 HTML 输入窗体传输愿望 ID，请将其存储在变量中。在  ``while `` 循环末尾，输入以下代码行：

[source,java]
----

while ($row = ...) {echo ...echo ...*$wishID = $row["id"];*}
?>
----
2. 实现 "Edit" 按钮。在结束 </table> 标记前面，使用 editWish 窗体添加另一个窗体元格。该窗体包含一个按钮组件和一个隐藏组件；在单击该按钮时，该隐藏组件将发送  ``$wishID``  值。（显示的是 MySQL 数据库代码，但为 Oracle 数据库添加的代码是相同的并位于相同的位置。）

[source,php]
----

   Hello <?php echo $_SESSION["user"]; ?><br/><table border="black"><tr><th>Item</th><th>Due Date</th></tr><?phprequire_once("Includes/db.php");$wisherID = WishDB::getInstance()->get_wisher_id_by_name($_SESSION["user"]);$result = WishDB::getInstance()->get_wishes_by_wisher_id($wisherID);while ($row = mysqli_fetch_array($result)) {echo "<tr><td>" . htmlentities($row["description"]) . "</td>";echo "<td>" . htmlentities($row["due_date"]) . "</td></tr>\n";}mysqli_free_result($result);?>
            *<td>
                <form name="editWish" action="editWish.php" method="GET">
                    <input type="hidden" name="wishID" value="<?php echo  ``$wish`` ID; ?>">
                    <input type="submit" name="editWish" value="Edit">
                    </form>
            </td>*</table>
----
3. 更改  ``while``  循环以使用link:http://www.php.net/manual/en/control-structures.alternative-syntax.php[+替代语法+]。这可简化在  ``while``  循环中执行 HTML 块的过程。在替代  ``while``  循环语法中，左花括号 { 将替换为冒号 (:)，右花括号 } 将替换为  ``endwhile;``  语句。将左花括号替换为冒号，删除右花括号，然后在结束 </table> 标记前面使用  ``endwhile;``  语句添加一个新 PHP 块。这会将新表单元格包含在  ``while``  循环中。将释放结果/释放语句代码移到  ``endwhile;``  语句后面。（同样，显示的是 MySQL 数据库代码，但 Oracle 数据库的代码更改和位置是相同的。）

[source,php]
----

    while ($row = mysqli_fetch_array($result))[.line-through]#{#*:*echo "<tr><td>" . htmlentities($row["description"]) . "</td>";echo "<td>" . htmlentities($row["due_date"]) . "</td></tr>\n";[.line-through]#    }mysqli_free_result($result);#?>
    <td>
        <form name="editWish" action="editWish.php" method="GET">
           <input type="hidden" name="wishID" value="<?php echo  ``$wish`` ID; ?>">
           <input type="submit" name="editWish" value="Edit">
        </form>
    </td>
*    <?php
    endwhile;
    mysqli_free_result($result);
    ?>*
</table>
----
4. 
修复表行语法。将行结束 </tr>\n 字符从截止日期回显语句移到新回显语句（紧靠  ``endwhile;``  上面）。


[source,php]
----

    while ($row = mysqli_fetch_array($result))*:*echo "<tr><td>" . htmlentities($row["description"]) . "</td>";echo "<td>" . htmlentities($row["due_date"]) . "</td>[.line-through]#</tr>\n#";?>
    <td>
        <form name="editWish" action="editWish.php" method="GET">
           <input type="hidden" name="wishID" value="<?php echo  ``$wish`` ID; ?>">
           <input type="submit" name="editWish" value="Edit">
        </form>
    </td>
    <?php
    *echo "</tr>\n";*
    endwhile;
    mysqli_free_result($result);
    ?>
</table>
----
5. 
整个表（包括将 "Edit" 按钮放在  ``while``  循环内的窗体）现在显示如下：

*对于 MySQL 数据库：*


[source,php]
----

<table border="black">
    <tr><th>Item</th><th>Due Date</th></tr>
    <?php
    require_once("Includes/db.php");
    $wisherID = WishDB::getInstance()->get_wisher_id_by_name($_SESSION["user"]);
    $result = WishDB::getInstance()->get_wishes_by_wisher_id($wisherID);
    while($row = mysqli_fetch_array($result)):
        echo "<tr><td>" . htmlentities($row['description']) . "</td>";
        echo "<td>" . htmlentities($row['due_date']) . "</td>";
        $wishID = $row["id"];
    ?>
    <td>
        <form name="editWish" action="editWish.php" method="GET">
            <input type="hidden" name="wishID" value="<?php echo $wishID; ?>"/>
            <input type="submit" name="editWish" value="Edit"/>
        </form>
    </td>
    <?php
    echo "</tr>\n";
    endwhile;
    mysqli_free_result($result);
    ?>
</table>
----

*对于 Oracle 数据库：*


[source,php]
----

<table border="black">
    <tr><th>Item</th><th>Due Date</th></tr>
    <?php
    require_once("Includes/db.php");
    $wisherID = WishDB::getInstance()->get_wisher_id_by_name($_SESSION["user"]);
    $stid = WishDB::getInstance()->get_wishes_by_wisher_id($wisherID);
    while ($row = oci_fetch_array($stid)):
        echo "<tr><td>" . htmlentities($row["DESCRIPTION"]) . "</td>";
        echo "<td>" . htmlentities($row["DUE_DATE"]) . "</td>";
        $wishID = $row["ID"];
    ?>
    <td>
        <form name="editWish" action="editWish.php" method="GET">
            <input type="hidden" name="wishID" value="<?php echo $wishID; ?>"/>
            <input type="submit" name="editWish" value="Edit"/>
        </form>
    </td>
    <td>
        <form name="deleteWish" action="deleteWish.php" method="POST">
            <input type="hidden" name="wishID" value="<?php echo $wishID; ?>"/>
            <input type="submit" name="deleteWish" value="Delete"/>
        </form>
    </td>
    <?php
    echo "</tr>\n";
    endwhile;
    oci_free_statement($stid);
   ?>
</table>
----


=== 扩充  ``$wish``  数组

在  ``editWishList.php``  页上按 "Edit" 按钮时，选定愿望的 ID 将通过服务器请求方法 GET 传输到  ``editWish.php``  页。要存储愿望 ID，您需要在  ``$wish``  数组中添加新元素。

与添加新愿望一样，保存尝试失败后可以从  ``editWishList.php``  页和  ``editWish.php``  页访问输入窗体。因此，可通过传输数据时使用的服务器请求方法来区分这两种情况。GET 表示在用户第一次通过按 "Edit Wish" 访问页面时显示窗体。POST 表示在尝试保存没有说明的愿望后将用户重定向到窗体。

在  ``editWish.php``  中，将  ``EditWish``  输入窗体上面 HTML <body> 中的 PHP 块替换为扩展的  ``$wish``  数组代码。

*对于 MySQL 数据库：*


[source,php]
----

<?phpif ($_SERVER["REQUEST_METHOD"] == "POST")$wish = array("id" => $_POST["wishID"], "description" => 
        $_POST["wish"], "due_date" => $_POST["dueDate"]);else if (array_key_exists("wishID", $_GET))$wish = mysqli_fetch_array(WishDB::getInstance()->get_wish_by_wish_id($_GET["wishID"]));else$wish = array("id" => "", "description" => "", "due_date" => "");?>
----

*对于 Oracle 数据库：*


[source,php]
----

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST")
    $wish = array("id" => $_POST["wishID"], "description" =>
            $_POST["wish"], "due_date" => $_POST["dueDate"]);
else if (array_key_exists("wishID", $_GET)) {
    $stid = WishDB::getInstance()->get_wish_by_wish_id($_GET["wishID"]);
    $row = oci_fetch_array($stid, OCI_ASSOC);
    $wish = array("id" => $row["ID"], "description" =>
                $row["DESCRIPTION"], "due_date" => $row["DUE_DATE"]);
    oci_free_statement($stid);
} else
$wish = array("id" => "", "description" => "", "due_date" => "");
?>
----

该代码使用以下三个元素初始化  ``$wish``  数组： ``id`` 、 ``description``  和  ``due_date`` 。这些元素的值取决于服务器请求方法。如果服务器请求方法是 POST，则从输入窗体中接收这些值。否则，如果服务器请求方法是 GET，并且 $_GET 数组包含具有 "wishID" 键的元素，则通过 get_wish_by_wish_id 函数从数据库中检索这些值。最后，如果服务器请求方法既不是 "POST" 也不是 "GET"（表示是“添加新的愿望”用例），则这些元素为空。

前面的代码涉及创建和编辑愿望的用例。现在，您需要更新输入窗体，以便将其用于这两种情况。


=== 更新 HTML 输入窗体

目前，输入窗体适用于以下情况：您要创建新的愿望，并且没有愿望 ID。要使窗体适用于编辑现有愿望的情况，您需要添加一个隐藏字段以传输愿望 ID。必须从 $wish 数组中检索隐藏字段的值。在创建新的愿望期间，该值必须是一个空字符串。如果编辑了愿望，则必须将隐藏字段的值更改为愿望 ID。要创建该隐藏字段，请在  ``editWish.php``  中的  ``EditWish``  输入窗体上面添加以下行：

[source,php]
----

<input type="hidden" name="wishID" value="<?php echo  ``$wish`` ["id"];?>" />
----


=== 更新数据库中的愿望

现在，您需要更新用于验证输入数据和将愿望插入到数据库的代码。当前代码不区分创建新的愿望和更新现有愿望的情况。在当前实现中，始终将新记录添加到数据库中，因为该代码不验证从输入窗体传输的愿望 ID 值。

您需要添加以下函数：

* 如果传输的元素 "wishID" 是一个空字符串，则创建一个新愿望。
* 否则，如果元素 "wishID" 不是空字符串，则更新该愿望。

*更新 editWish.php 以验证愿望是否为新愿望并在愿望不是新愿望时进行更新：*

1. 将  ``update_wish``  函数添加到  ``db.php``  中。

*对于 MySQL 数据库：*


[source,java]
----

public function update_wish($wishID, $description, $duedate){
    $description = $this->real_escape_string($description);if ($duedate==''){$this->query("UPDATE wishes SET description = '" . $description . "',due_date = NULL WHERE id = " . $wishID);} else$this->query("UPDATE wishes SET description = '" . $description ."', due_date = " . $this->format_date_for_sql($duedate). " WHERE id = " . $wishID);}  
----

*对于 Oracle 数据库：*


[source,java]
----

public function update_wish($wishID, $description, $duedate) {
    $query = "UPDATE wishes SET description = :desc_bv, due_date = to_date(:due_date_bv, 
              'YYYY-MM-DD')  WHERE id = :wish_id_bv";
    $stid = oci_parse($this->con, $query);
    oci_bind_by_name($stid, ':wish_id_bv', $wishID);
    oci_bind_by_name($stid, ':desc_bv', $description);
    oci_bind_by_name($stid, ':due_date_bv', $this->format_date_for_sql($duedate));
    oci_execute($stid);

}
----
2. 
将  ``get_wish_by_wish_id``  函数添加到  ``db.php``  中。

*对于 MySQL 数据库：*


[source,java]
----

public function get_wish_by_wish_id ($wishID) {return $this->query("SELECT id, description, due_date FROM wishes WHERE id = " . $wishID);}
----

*对于 Oracle 数据库：*


[source,java]
----

public function get_wish_by_wish_id($wishID) {
    $query = "SELECT id, description, due_date FROM wishes WHERE id = :wish_id_bv";
    $stid = oci_parse($this->con, $query);
    oci_bind_by_name($stid, ':wish_id_bv', $wishID);
    oci_execute($stid);
    return $stid;
}
----
3. 在  ``editWish.php``  顶部的主 PHP 块中，在最终的 `else` 语句中添加一个条件。这是将愿望插入到数据库的  ``else``  语句。将其更改为  ``else if``  语句：

[source,java]
----

else if ($_POST["wishID"]=="") {WishDB::getInstance()->insert_wish($wisherID, $_POST["wish"], $_POST["dueDate"]);header('Location:  ``editWishList.php`` ' );exit;}
----
4. 在刚编辑的语句下面，键入或粘贴另一个  ``else if``  语句：

[source,java]
----

else if ($_POST["wishID"]!="") {WishDB::getInstance()->update_wish($_POST["wishID"], $_POST["wish"], $_POST["dueDate"]);header('Location:  ``editWishList.php`` ' );exit;
} 
----

该代码检查  ``$_POST``  数组中的  ``wishID``  元素是否为空字符串，这意味着通过按 "Edit" 按钮从  ``editWishList.php``  页重定向了用户，并且用户填写了愿望说明。如果检查成功，则该代码将使用输入参数  ``wishID`` 、 ``description``  和  ``dueDate``  调用函数  ``update_wish`` 。通过 POST 方法从 HTML 输入窗体接收这些参数。在调用  ``update_wish``  后，应用程序将重定向到  ``editWishList.php``  页并取消 PHP 处理。


== 测试编辑愿望功能

1. 运行应用程序。在 index.php 页上，填写以下字段：在 "Username" 字段中输入 "Tom"，在 "Password" 字段中输入 "tomcat"。
image::images/user-logon-to-edit-wish-list.png[]
2. 按 "Edit My Wish List" 按钮。 ``editWishList.php``  页打开。
image::images/edit-wish-list-edit-wish.png[]
3. 单击 Icecream 旁边的 "Edit"。 ``editWish.php``  页打开。
image::images/edit-wish.png[]
4. 编辑这些字段，然后按 "Back to the List"。 ``editWishList.php``  页打开，但未保存更改。
5. 按 Icecream 旁边的 "Edit"。清除 "Describe your wish" 字段，然后按 "Save Changes"。将显示一条错误消息。
image::images/editWishEmptyDescription.png[]
6. 在 "Describe your wish" 字段中输入 Chocolate icecream，然后按 "Save Changes"。 ``editWishList.php``  页打开，并更新列表。
image::images/editWishListWishAdded.png[]


== 删除愿望

现在，您可以创建、读取和更新愿望，添加一个用于删除愿望的方法。

*允许用户删除愿望：*

1. 将  ``delete_wish``  函数添加到  ``db.php``  中。

*对于 MySQL 数据库：*


[source,java]
----

function delete_wish ($wishID){$this->query("DELETE FROM wishes WHERE id = " . $wishID);}

----

*对于 Oracle 数据库：*


[source,java]
----

public function delete_wish($wishID) {
    $query = "DELETE FROM wishes WHERE id = :wish_id_bv";
    $stid = oci_parse($this->con, $query);
    oci_bind_by_name($stid, ':wish_id_bv', $wishID);
    oci_execute($stid); 
}
----
2. 创建一个名为  ``deleteWish.php``  的新 PHP 文件，然后在 <? php ?> 块下键入或粘贴以下代码：

[source,java]
----

require_once("Includes/db.php");WishDB::getInstance()->delete_wish ($_POST["wishID"]);header('Location:  ``editWishList.php`` ' );
----
该代码允许使用  ``db.php``  文件。然后，它会从 WishDB 实例中调用  ``delete_wish``  函数，并将  ``wishID``  作为输入参数。最后，应用程序将重定向到  ``editWishList.php``  页。
3. 要实现 "Delete" 按钮，请在  ``editWishList.php``  的  ``while``  循环中添加另一个 HTML 表单元格，紧靠  ``editWish``  按钮的代码块下面。HTML 输入窗体包含  ``wishID``  隐藏字段以及一个标记为 "Delete" 的提交按钮。（显示的是 MySQL 数据库代码，但为 Oracle 数据库添加的代码是相同的并位于相同的位置。）

[source,php]
----

    while ($row = mysqli_fetch_array($result))*:*echo "<tr><td>" . htmlentities($row["description"]) . "</td>";echo "<td>" . htmlentities($row["due_date"]) . "</td>[.line-through]#</tr>\n#";?>
    <td>
        <form name="editWish" action="editWish.php" method="GET">
           <input type="hidden" name="wishID" value="<?php echo  ``$wish`` ID; ?>">
           <input type="submit" name="editWish" value="Edit">
        </form>
    </td>
    *<td>
        <form name="deleteWish" action="deleteWish.php" method="POST">
            <input type="hidden" name="wishID" value="<?php echo $wishID; ?>"/>
            <input type="submit" name="deleteWish" value="Delete"/>
        </form>
    </td>*
    <?php
    echo "</tr>\n";
    endwhile;
    mysqli_free_result($result);
    ?>
</table>
----

整个表（包括将 "Edit" 按钮放在  ``while``  循环内的窗体）现在显示如下：

*对于 MySQL 数据库：*


[source,php]
----

<table border="black">
    <tr><th>Item</th><th>Due Date</th></tr>
    <?php
    require_once("Includes/db.php");
    $wisherID = WishDB::getInstance()->get_wisher_id_by_name($_SESSION["user"]);
    $result = WishDB::getInstance()->get_wishes_by_wisher_id($wisherID);
    while($row = mysqli_fetch_array($result)):
        echo "<tr><td>" . htmlentities($row['description") . "</td>";
        echo "<td>" . htmlentities($row['due_date']) . "</td>";
        $wishID = $row["id"];
    ?>
    <td>
        <form name="editWish" action="editWish.php" method="GET">
            <input type="hidden" name="wishID" value="<?php echo $wishID; ?>"/>
            <input type="submit" name="editWish" value="Edit"/>
        </form>
    </td>
    <td>
        <form name="deleteWish" action="deleteWish.php" method="POST">
            <input type="hidden" name="wishID" value="<?php echo $wishID; ?>"/>
            <input type="submit" name="deleteWish" value="Delete"/>
        </form>
    </td>
    <?php
    echo "</tr>\n";
    endwhile;
    mysqli_free_result($result);
    ?>
</table>
----

*对于 Oracle 数据库：*


[source,php]
----

<table border="black">
    <tr><th>Item</th><th>Due Date</th></tr>
    <?php
    require_once("Includes/db.php");
    $wisherID = WishDB::getInstance()->get_wisher_id_by_name($_SESSION["user"]);
    $stid = WishDB::getInstance()->get_wishes_by_wisher_id($wisherID);
    while ($row = oci_fetch_array($stid)):
        echo "<tr><td>" . htmlentities($row["DESCRIPTION"]) . "</td>";
        echo "<td>" . htmlentities($row["DUE_DATE"]) . "</td>";
        $wishID = $row["ID"];
    ?>
    <td>
        <form name="editWish" action="editWish.php" method="GET">
            <input type="hidden" name="wishID" value="<?php echo $wishID; ?>"/>
            <input type="submit" name="editWish" value="Edit"/>
        </form>
    </td>
    <td>
        <form name="deleteWish" action="deleteWish.php" method="POST">
            <input type="hidden" name="wishID" value="<?php echo $wishID; ?>"/>
            <input type="submit" name="deleteWish" value="Delete"/>
        </form>
    </td>
    <?php
    echo "</tr>\n";
    endwhile;
    oci_free_statement($stid);
   ?>
</table>
----


== 测试删除愿望功能

要检查是否正确实现了该功能，请在  ``editWishList.php``  页上按任何项目旁边的 "Delete"。该项目将不再出现在列表中。

image::images/deleteWish.png[]


== 完成当前课程后的应用程序源代码

MySQL 用户：单击link:https://netbeans.org/files/documents/4/1933/lesson7.zip[+此处+]以下载源代码，该代码反映了在完成课程后的项目状态。

Oracle 数据库用户：单击link:https://netbeans.org/projects/www/downloads/download/php%252Foracle-lesson7.zip[+此处+]以下载源代码，该代码反映了在完成课程后的项目状态。


== 后续步骤

link:wish-list-lesson6.html[+<< 上一课+] 

link:wish-list-lesson8.html[+下一课 >>+] 

link:wish-list-tutorial-main-page.html[+返回到教程主页+]


link:/about/contact_form.html?to=3&subject=Feedback:%20PHP%20Wish%20List%20CRUD%207:%20Updating%20and%20Deleting%20DB%20Entries[+发送有关此教程的反馈意见+]


要发送意见和建议、获得支持以及随时了解 NetBeans IDE PHP 开发功能的最新开发情况，请link:../../../community/lists/top.html[+加入 users@php.netbeans.org 邮件列表+]。

link:../../trails/php.html[+返回至 PHP 学习资源+]

