blob: d437a2484ea7a7b30a215cda33d1029a2d69a4b5 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--
Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
-->
<html>
<head>
<title>PHPを使用するデータベース駆動型アプリケーションの作成MySQLデータベースのレコードの編集更新および削除</title>
<meta name="KEYWORDS" content="CRUD, Update, Delete, MySQL, PHP, NetBeans">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="DESCRIPTION" content="Creating a Database Driven Application With PHP. Edit / Update and Delete record in MySQL database" >
<link rel="stylesheet" type="text/css" href="../../../netbeans.css" media="screen">
</head>
<body>
<h1>PHPを使用するデータベース駆動型アプリケーションの作成 </h1>
<h1>レッスン7: データベース内のエントリの更新および削除 </h1>
<div style="margin-left:-3px">
<div class="feedback-box margin-around float-left" style="margin-right:15px">
<h4>チュートリアルの目次:</h4>
<ol start="0">
<li><a href="wish-list-tutorial-main-page.html">PHPを使用するデータベース駆動型アプリケーションの作成 - メイン・ページ</a></li>
<li><p>データベースの作成</p> <ol type="a"><li><a href="wish-list-lesson1.html">MySQLデータベースの作成</a></li>
<li><a href="wish-list-oracle-lesson1.html">Oracleデータベース表の作成</a></li>
</ol></li>
<li>
<p><a href="wish-list-lesson2.html">アプリケーションの設計。データベースからの読取り</a></p>
</li>
<li><a href="wish-list-lesson3.html">新規アプリケーション・ユーザーの作成</a></li>
<li><a href="wish-list-lesson4.html">コードの最適化</a></li>
<li><a href="wish-list-lesson5.html">セキュリティの追加。アプリケーション・ユーザー・ログオンの実装</a></li>
<li><a href="wish-list-lesson6.html">データベースへの新しいウィッシュの追加</a></li>
<li>
<p><b>=> データベース内のエントリの更新および削除</b></p>
<ul>
<li><a href="#previousLessonSourceCode">前のレッスンからのアプリケーション・ソース・コード</a></li>
<li><a href="#editWish">ウィッシュの編集</a>
<ul>
<li><a href="#addEditButton">「Edit」ボタンの実装</a></li>
<li><a href="#wishArrayUpdate">$wish配列の拡張</a></li>
<li><a href="#updateInputForm">HTML入力フォームの更新</a></li>
<li><a href="#updateWishRecord">データベース内のウィッシュの更新</a></li>
</ul>
</li>
<li><a href="#testingEditWishFunctionality">ウィッシュの編集機能のテスト</a></li>
<li><a href="#deleteWish">ウィッシュの削除</a></li>
<li><a href="#testingDeleteWishFunctionality">ウィッシュの削除機能のテスト</a></li>
<li><a href="#lessonResultSourceCode">現在のレッスン完了後の<br>アプリケーション・ソース・コード</a></li>
<li><a href="#nextSteps">次の手順</a></li>
</ul>
</li>
<li><a href="wish-list-lesson8.html">CSSテクノロジを使用したアプリケーションの外観の改良</a></li>
<li><a href="wish-list-lesson9.html">リモートWebサーバーへのアプリケーションのデプロイ</a></li>
</ol>
</div>
</div>
<img alt="このページの内容は、NetBeans IDE 7.2、7.3、7.4および8.0に適用されます" class="stamp" src="../../../images_www/articles/73/netbeans-stamp-80-74-73.png" title="このページの内容は、NetBeans IDE 7.2、7.3、7.4および8.0に適用されます">
<p>このレッスンでは、次の2つの機能を使用してアプリケーションの機能を拡張します。</p>
<ul>
<li style="margin-left:40em"><a href="#editWish">ウィッシュの編集</a></li>
<li style="margin-left:40em"><a href="#deleteWish">ウィッシュの削除</a></li>
</ul>
<p>これらの機能を実装するには、<tt>editWishList.php</tt>ファイルと<tt>editWish.php</tt>ファイルを編集します。また、<tt>deleteWish.php</tt>という名前の新しいファイルも作成します。</p>
<img alt="レッスン7で影響を受けるPHPプロジェクト・フロー" class="margin-around" src="../../../images_www/articles/72/php/oracle-wishlist/page-flow-diagram-l7.png">
<p>現在のドキュメントは、PHP向けのNetBeans IDEでのCRUDアプリケーションの作成というPHPチュートリアルの一部です。</p><br style="clear:left">
<h2><a name="previousLessonSourceCode"></a>前のレッスンからのアプリケーション・ソース・コード</h2>
<p>MySQLユーザー: 前のレッスンが完了した後のプロジェクトの状態を反映したソース・コードをダウンロードするには、<a href="https://netbeans.org/files/documents/4/1932/lesson6.zip" target="_blank">ここ</a>をクリックします。 </p>
<p>Oracleデータベース・ユーザー: 前のレッスンが完了した後のプロジェクトの状態を反映したソース・コードをダウンロードするには、<a href="https://netbeans.org/projects/www/downloads/download/php%252Foracle-lesson6.zip" target="_blank">ここ</a>をクリックします。</p>
<h2><a id="editWish" name="editWish"></a>ウィッシュの編集</h2>
この機能は、次のユース・ケースをサポートしています。
<ul>
<li><tt>editWishList.php</tt>ページで、ユーザーがウィッシュの右にある「Edit」ボタンを押す。選択したウィッシュのデータがある<tt>editWish.php</tt>ページが開く。</li>
<li>ユーザーがウィッシュの説明または期日(あるいはその両方)を変更し、「Save Changes」ボタンを押す。 </li>
<li>説明が入力されて<em>いない</em>場合、エラー・メッセージが表示され、ユーザーが<tt>editWish.php</tt>ページに戻される。 </li>
<li>説明が入力されている場合、アプリケーションはウィッシュが更新される<tt>editWishList.php</tt>ページに戻る。</li>
</ul>
<p>この実装は、次の手順から構成されます。</p>
<ul>
<li><a href="#addEditButton">editWishListページに「Edit」ボタンを追加する</a></li>
<li><a href="#wishArrayUpdate">editWish.phpページで、ウィッシュのデータを格納する配列$wishを更新する</a></li>
<li><a href="#updateInputForm">editWish.phpページの入力フォームを更新する</a></li>
<li><a href="#updateWishRecord">送信されたデータを検証し、データベース内のウィッシュを更新する</a> </li>
</ul>
<div class="indent"><h3><a id="addEditButton" name="addEditButton"></a>「Edit」ボタンの実装 </h3>
<p><tt>editWishList.php</tt>では、ウィッシャのウィッシュを含む表は、ウィッシュがデータベースから選択されるときに、ウィッシュを含む行を表示するループ(<tt>while</tt>文)によって実装されています。行の一番右のセルとして「Edit」ボタンを追加します。</p>
<ol><li>HTML入力フォームを使用してウィッシュのIDを転送するには、そのIDを変数に格納します。次のコード行を<tt>while</tt>ループの末尾に入力します。
<pre class="examplecode">while ($row = ...) {<br> echo ...<br> echo ...<br> <strong>$wishID = $row[&quot;id&quot;];</strong><br>
}
?&gt;</pre>
</li>
<li>編集ボタンを実装します。editWishフォームを使用して、終了の&lt;/table>タグの前に別の表のセルを追加します。このフォームには、ボタン・コンポーネントと、ボタンがクリックされたときに<tt>$wishID</tt>の値を送信する非表示コンポーネントが含まれています。(MySQLデータベース用のコードが示されていますが、追加されるコードはOracleデータベースの場合も同じで、同じ場所になります。)
<pre class="examplecode">
Hello &lt;?php echo $_SESSION[&quot;user&quot;]; ?&gt;&lt;br/&gt;<br> &lt;table border=&quot;black&quot;&gt;<br> &lt;tr&gt;&lt;th&gt;Item&lt;/th&gt;&lt;th&gt;Due Date&lt;/th&gt;&lt;/tr&gt;<br> &lt;?php<br> require_once(&quot;Includes/db.php&quot;);<br> $wisherID = WishDB::getInstance()-&gt;get_wisher_id_by_name($_SESSION[&quot;user&quot;]);<br> $result = WishDB::getInstance()-&gt;get_wishes_by_wisher_id($wisherID);<br> while ($row = mysqli_fetch_array($result)) {<br> echo &quot;&lt;tr&gt;&lt;td&gt;&quot; . htmlentities($row[&quot;description&quot;]) . &quot;&lt;/td&gt;&quot;;<br> echo &quot;&lt;td&gt;&quot; . htmlentities($row[&quot;due_date&quot;]) . &quot;&lt;/td&gt;&lt;/tr&gt;\n&quot;;<br> }<br> mysqli_free_result($result);<br> ?&gt;
<strong>&lt;td>
&lt;form name="editWish" action="editWish.php" method="GET">
&lt;input type="hidden" name="wishID" value="&lt;?php echo <tt>$wish</tt>ID; ?>">
&lt;input type="submit" name="editWish" value="Edit">
&lt;/form>
&lt;/td></strong><br> &lt;/table&gt;</pre>
</li>
<li><tt>while</tt>ループを変更して<a href="http://www.php.net/manual/en/control-structures.alternative-syntax.php" target="_blank">代替構文</a>を使用します。これにより、<tt>while</tt>ループ内のHTMLブロックを実行しやすくなります。代替の<tt>while</tt>ループ構文では、開始の中括弧{がコロン(:)に置き換えられ、終了の中括弧}が<tt>endwhile;</tt>文に置き換えられます。開始の中括弧をコロンに置き換え、終了の中括弧を削除し、<tt>endwhile;</tt>文を使用して終了の&lt;/table>タグの前に新しいPHPブロックを追加します。これにより、新しい表のセルが<tt>while</tt>ループに組み込まれます。結果または文を解放するコードを<tt>endwhile;</tt>文の後に移動します。(ここでも、MySQL用のコードが示されていますが、コード変更および場所はOracleデータベースの場合も同じです。)
<pre class="examplecode"> while ($row = mysqli_fetch_array($result))<del>{</del><strong>:</strong><br> echo &quot;&lt;tr&gt;&lt;td&gt;&quot; . htmlentities($row[&quot;description&quot;]) . &quot;&lt;/td&gt;&quot;;<br> echo &quot;&lt;td&gt;&quot; . htmlentities($row[&quot;due_date&quot;]) . &quot;&lt;/td&gt;&lt;/tr&gt;\n&quot;;<br><del> }<br> mysqli_free_result($result);</del><br> ?&gt;
&lt;td>
&lt;form name="editWish" action="editWish.php" method="GET">
&lt;input type="hidden" name="wishID" value="&lt;?php echo <tt>$wish</tt>ID; ?>">
&lt;input type="submit" name="editWish" value="Edit">
&lt;/form>
&lt;/td>
<strong> &lt;?php
endwhile;
mysqli_free_result($result);
?&gt;</strong>
&lt;/table&gt;</pre>
</li>
<li>
<p>表の行の構文を修正します。行を終了する&lt;/tr>\n文字を、期日のecho文から<tt>endwhile;</tt>のすぐ上の新しいecho文に移動します。</p>
<pre class="examplecode"> while ($row = mysqli_fetch_array($result))<del></del><strong>:</strong><br> echo &quot;&lt;tr&gt;&lt;td&gt;&quot; . htmlentities($row[&quot;description&quot;]) . &quot;&lt;/td&gt;&quot;;<br> echo &quot;&lt;td&gt;&quot; . htmlentities($row[&quot;due_date&quot;]) . &quot;&lt;/td&gt;<del>&lt;/tr&gt;\n</del>&quot;;<br> ?&gt;
&lt;td>
&lt;form name="editWish" action="editWish.php" method="GET">
&lt;input type="hidden" name="wishID" value="&lt;?php echo <tt>$wish</tt>ID; ?>">
&lt;input type="submit" name="editWish" value="Edit">
&lt;/form>
&lt;/td>
&lt;?php
<strong>echo &quot;&lt;/tr&gt;\n&quot;;</strong>
endwhile;
mysqli_free_result($result);
?&gt;
&lt;/table&gt;</pre>
</li>
<li>
<p><tt>while</tt>ループ内に「Edit」ボタンを持つフォームを含む表の全体は、次のようになります。</p>
<p><b>MySQLデータベースの場合:</b></p>
<pre class="examplecode">&lt;table border=&quot;black&quot;&gt;
&lt;tr&gt;&lt;th&gt;Item&lt;/th&gt;&lt;th&gt;Due Date&lt;/th&gt;&lt;/tr&gt;
&lt;?php
require_once(&quot;Includes/db.php&quot;);
$wisherID = WishDB::getInstance()-&gt;get_wisher_id_by_name($_SESSION[&quot;user&quot;]);
$result = WishDB::getInstance()-&gt;get_wishes_by_wisher_id($wisherID);
while($row = mysqli_fetch_array($result)):
echo &quot;&lt;tr&gt;&lt;td&gt;&quot; . htmlentities($row['description']) . &quot;&lt;/td&gt;&quot;;
echo &quot;&lt;td&gt;&quot; . htmlentities($row['due_date']) . &quot;&lt;/td&gt;&quot;;
$wishID = $row[&quot;id&quot;];
?&gt;
&lt;td&gt;
&lt;form name=&quot;editWish&quot; action=&quot;editWish.php&quot; method=&quot;GET&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;wishID&quot; value=&quot;&lt;?php echo $wishID; ?&gt;&quot;/&gt;
&lt;input type=&quot;submit&quot; name=&quot;editWish&quot; value=&quot;Edit&quot;/&gt;
&lt;/form&gt;
&lt;/td&gt;
&lt;?php
echo &quot;&lt;/tr&gt;\n&quot;;
endwhile;
mysqli_free_result($result);
?&gt;
&lt;/table&gt;</pre>
<p><b>Oracleデータベースの場合:</b></p>
<pre class="examplecode">&lt;table border=&quot;black&quot;&gt;
&lt;tr&gt;&lt;th&gt;Item&lt;/th&gt;&lt;th&gt;Due Date&lt;/th&gt;&lt;/tr&gt;
&lt;?php
require_once(&quot;Includes/db.php&quot;);
$wisherID = WishDB::getInstance()-&gt;get_wisher_id_by_name($_SESSION[&quot;user&quot;]);
$stid = WishDB::getInstance()-&gt;get_wishes_by_wisher_id($wisherID);
while ($row = oci_fetch_array($stid)):
echo &quot;&lt;tr&gt;&lt;td&gt;&quot; . htmlentities($row[&quot;DESCRIPTION&quot;]) . &quot;&lt;/td&gt;&quot;;
echo &quot;&lt;td&gt;&quot; . htmlentities($row[&quot;DUE_DATE&quot;]) . &quot;&lt;/td&gt;&quot;;
$wishID = $row[&quot;ID&quot;];
?&gt;
&lt;td&gt;
&lt;form name=&quot;editWish&quot; action=&quot;editWish.php&quot; method=&quot;GET&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;wishID&quot; value=&quot;&lt;?php echo $wishID; ?&gt;&quot;/&gt;
&lt;input type=&quot;submit&quot; name=&quot;editWish&quot; value=&quot;Edit&quot;/&gt;
&lt;/form&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;form name=&quot;deleteWish&quot; action=&quot;deleteWish.php&quot; method=&quot;POST&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;wishID&quot; value=&quot;&lt;?php echo $wishID; ?&gt;&quot;/&gt;
&lt;input type=&quot;submit&quot; name=&quot;deleteWish&quot; value=&quot;Delete&quot;/&gt;
&lt;/form&gt;
&lt;/td&gt;
&lt;?php
echo &quot;&lt;/tr&gt;\n&quot;;
endwhile;
oci_free_statement($stid);
?&gt;
&lt;/table&gt;</pre>
</li>
</ol>
<h3><a id="wishArrayUpdate" name="wishArrayUpdate"></a><tt>$wish</tt>配列の拡張 </h3>
<p><tt>editWishList.php</tt>ページで「Edit」ボタンを押すと、選択したウィッシュのIDがサーバー・リクエスト・メソッドGETを介して<tt>editWish.php</tt>ページに転送されます。ウィッシュのIDを格納するには、<tt>$wish</tt>配列に新しい要素を追加する必要があります。 </p>
<p>新しいウィッシュを追加するときに、それを保存しようとして失敗した後で、<tt>editWishList.php</tt>ページと<tt>editWish.php</tt>ページの両方から入力フォームにアクセスできます。データを転送するサーバー・リクエスト・メソッドによって、ケースが識別されます。GETは、ユーザーが「Edit Wish」を押して最初にページに達するときに、フォームが表示されることを示します。POSTは、説明なしでウィッシュを保存しようとした後、ユーザーがフォームにリダイレクトされることを示します。 </p>
<p><tt>editWish.php</tt>内で、HTML &lt;body>内の<tt>EditWish</tt>入力フォームの上にあるPHPブロックを、<tt>$wish</tt>配列の拡張されたコードで置き換えます。</p>
<p><strong>MySQLデータベースの場合:</strong></p>
<pre class="examplecode">&lt;?php<br>if ($_SERVER[&quot;REQUEST_METHOD&quot;] == &quot;POST&quot;)<br>$wish = array(&quot;id&quot; =&gt; $_POST[&quot;wishID&quot;], &quot;description&quot; =&gt;
$_POST[&quot;wish&quot;], &quot;due_date&quot; =&gt; $_POST[&quot;dueDate&quot;]);<br>else if (array_key_exists(&quot;wishID&quot;, $_GET))<br>$wish = mysqli_fetch_array(WishDB::getInstance()-&gt;get_wish_by_wish_id($_GET[&quot;wishID&quot;]));<br>else<br>$wish = array(&quot;id&quot; =&gt; &quot;&quot;, &quot;description&quot; =&gt; &quot;&quot;, &quot;due_date&quot; =&gt; &quot;&quot;);<br>?&gt;</pre>
<p><strong>Oracleデータベースの場合:</strong></p>
<pre class="examplecode">&lt;?php
if ($_SERVER[&quot;REQUEST_METHOD&quot;] == &quot;POST&quot;)
$wish = array(&quot;id&quot; =&gt; $_POST[&quot;wishID&quot;], &quot;description&quot; =&gt;
$_POST[&quot;wish&quot;], &quot;due_date&quot; =&gt; $_POST[&quot;dueDate&quot;]);
else if (array_key_exists(&quot;wishID&quot;, $_GET)) {
$stid = WishDB::getInstance()-&gt;get_wish_by_wish_id($_GET[&quot;wishID&quot;]);
$row = oci_fetch_array($stid, OCI_ASSOC);
$wish = array(&quot;id&quot; =&gt; $row[&quot;ID&quot;], &quot;description&quot; =&gt;
$row[&quot;DESCRIPTION&quot;], &quot;due_date&quot; =&gt; $row[&quot;DUE_DATE&quot;]);
oci_free_statement($stid);
} else
$wish = array(&quot;id&quot; =&gt; &quot;&quot;, &quot;description&quot; =&gt; &quot;&quot;, &quot;due_date&quot; =&gt; &quot;&quot;);
?&gt;</pre>
<p>このコードは、<tt>id</tt><tt>description</tt>、および<tt>due_date</tt>の3つの要素を持つ<tt>$wish</tt>配列を初期化します。これらの要素の値はサーバー・リクエスト・メソッドに依存します。サーバー・リクエスト・メソッドがPOSTの場合、値は入力フォームから受け取ります。また、サーバー・リクエスト・メソッドがGETで、$_GET配列にキー「wishID」を持つ要素が含まれている場合、値は関数get_wish_by_wish_idによってデータベースから取得されます。最後に、サーバー・リクエスト・メソッドがPOSTおよびGET以外の場合、つまり新しいウィッシュの追加のユース・ケースが行われた場合、要素は空になります。 </p>
<p>前述のコードは、ウィッシュを作成および編集するケースをカバーしています。また、入力フォームを両方のケースに使用できるように、入力フォームを更新する必要があります。 </p>
<h3><a id="updateInputForm" name="updateInputForm"></a>HTML入力フォームの更新</h3>
現時点では、新しいウィッシュを作成するとき、ウィッシュIDがなくても入力フォームは機能します。既存のウィッシュを編集する場合にフォームが機能するようにするには、ウィッシュのIDを転送するための非表示フィールドを追加する必要があります。非表示フィールドの値は、$wish配列から取得されます。新しいウィッシュの作成中、この値は空の文字列です。ウィッシュが編集される場合、非表示フィールドの値がウィッシュのIDに変わります。この非表示フィールドを作成するには、<tt>editWish.php</tt><tt>EditWish</tt>入力フォームの先頭に次の行を追加します。
<pre class="examplecode">&lt;input type=&quot;hidden&quot; name=&quot;wishID&quot; value=&quot;&lt;?php echo <tt>$wish</tt>[&quot;id&quot;];?&gt;&quot; /&gt;</pre>
<h3><a id="updateWishRecord" name="updateWishRecord"></a>データベース内のウィッシュの更新 </h3>
<p>入力データを確認してウィッシュをデータベースに挿入するコードを更新する必要があります。現在のコードは、新しいウィッシュを作成するケースと既存のウィッシュを更新するケースを区別しません。現在の実装では、コードが入力フォームから転送されたウィッシュIDの値を確認しないため、新しいレコードは常にデータベースに追加されます。 </p>
<p>次の機能を追加する必要があります。</p>
<ul>
<li>転送された要素「wishID」が空の文字列の場合、新しいウィッシュを作成する。</li>
<li>また、要素「wishID」が空の文字列でない場合、ウィッシュを更新する。</li>
</ul>
<p><strong>ウィッシュが新規であるかどうかを確認し、新規でない場合はウィッシュを更新するようにeditWish.phpを更新するには:</strong></p>
<ol>
<li>
<p><tt>update_wish</tt>関数を<tt>db.php</tt>に追加します。 </p>
<p><b>MySQLデータベースの場合:</b></p>
<pre class="examplecode">public function update_wish($wishID, $description, $duedate){
$description = $this-&gt;real_escape_string($description);<br> if ($duedate==''){<br> $this-&gt;query(&quot;UPDATE wishes SET description = '&quot; . $description . &quot;',<br> due_date = NULL WHERE id = &quot; . $wishID);<br> } else<br> $this-&gt;query(&quot;UPDATE wishes SET description = '&quot; . $description .<br> &quot;', due_date = &quot; . $this-&gt;format_date_for_sql($duedate)<br> . &quot; WHERE id = &quot; . $wishID);<br>} </pre>
<p><b>Oracleデータベースの場合:</b></p>
<pre class="examplecode">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);
}</pre>
</li>
<li>
<p><tt>get_wish_by_wish_id</tt>関数を<tt>db.php</tt>に追加します。 </p>
<p><b>MySQLデータベースの場合:</b></p>
<pre class="examplecode">public function get_wish_by_wish_id ($wishID) {<br> return $this-&gt;query(&quot;SELECT id, description, due_date FROM wishes WHERE id = &quot; . $wishID);<br>}</pre>
<p><b>Oracleデータベースの場合:</b></p>
<pre class="examplecode">public function get_wish_by_wish_id($wishID) {
$query = &quot;SELECT id, description, due_date FROM wishes WHERE id = :wish_id_bv&quot;;
$stid = oci_parse($this-&gt;con, $query);
oci_bind_by_name($stid, ':wish_id_bv', $wishID);
oci_execute($stid);
return $stid;
}</pre>
</li>
<li><tt>editWish.php</tt>のメインとなる先頭のPHPブロックで、最後の<code>else</code>文に条件を追加します。これはデータベースにウィッシュを挿入する<tt>else</tt>文です。これを<tt>else if</tt>文に変更します。
<pre class="examplecode">else if ($_POST[&quot;wishID&quot;]==&quot;&quot;) {<br> WishDB::getInstance()-&gt;insert_wish($wisherID, $_POST[&quot;wish&quot;], $_POST[&quot;dueDate&quot;]);<br> header('Location: <tt>editWishList.php</tt>' );<br> exit;<br>}</pre></li>
<li>
別の<tt>else if</tt>文を、前に編集した文の下に入力するか、または貼り付けます。
<pre class="examplecode">else if ($_POST[&quot;wishID&quot;]!=&quot;&quot;) {<br> WishDB::getInstance()-&gt;update_wish($_POST[&quot;wishID&quot;], $_POST[&quot;wish&quot;], $_POST[&quot;dueDate&quot;]);<br> header('Location: <tt>editWishList.php</tt>' );<br> exit;
} </pre>
</li>
</ol>
<p>このコードは、<tt>$_POST</tt>配列内の<tt>wishID</tt>要素が空の文字列ではないことを確認します(これは、ユーザーが「Edit」ボタンを押すことによって<tt>editWishList.php</tt>ページからリダイレクトされたこと、および、ユーザーがウィッシュの説明を入力していたことを意味します)。確認が成功すると、コードは入力パラメータ<tt>wishID</tt><tt>description</tt>、および<tt>dueDate</tt>を使用して関数<tt>update_wish</tt>をコールします。これらのパラメータは、HTML入力フォームからPOSTメソッドを介して受け取ります。<tt>update_wish</tt>がコールされた後、アプリケーションは<tt>editWishList.php</tt>ページにリダイレクトされ、PHP処理は取り消されます。 </p>
</div>
<h2><a name="testingEditWishFunctionality"></a>ウィッシュの編集機能のテスト </h2>
<ol>
<li>アプリケーションを実行します。index.phpページで、「Username」フィールドに「Tom」、「Password」フィールドに「tomcat」と入力します。<br> <img alt="ウィッシュ・リストを編集するためのユーザー・ログオン" class="margin-around" src="../../../images_www/articles/72/php/wish-list-lesson7/user-logon-to-edit-wish-list.png"></li>
<li> 「Edit My Wish List」ボタンを押します。<tt>editWishList.php</tt>ページが開きます。<br> <img alt="「Edit」ボタンが追加された&lt;tt&gt;editWishList.php&lt;/tt&gt;ページ" class="margin-around" src="../../../images_www/articles/72/php/wish-list-lesson7/edit-wish-list-edit-wish.png"></li>
<li>「Icecream」の横の「Edit」をクリックします。<tt>editWish.php</tt>ページが開きます。<br><img alt="ウィッシュの編集用フォームがある&lt;tt&gt;editWish.php&lt;/tt&gt;ページ。フィールドにウィッシュ・データが入力されています。" class="margin-around" src="../../../images_www/articles/72/php/wish-list-lesson7/edit-wish.png"></li>
<li>フィールドを編集して「Back to the List」を押します。<tt>editWishList.php</tt>ページが開きますが、変更は保存されていません。</li>
<li>「Icecream」の横の「Edit」を押します。「Describe your wish」フィールドをクリアして「Save Changes」を押します。エラー・メッセージが表示されます。<br><img alt="エラー・メッセージが表示されたウィッシュの編集用フォーム: 説明は入力されていません" class="margin-around" src="../../../images_www/articles/72/php/wish-list-lesson7/editWishEmptyDescription.png"></li>
<li>「Describe your wish」フィールドに「Chocolate icecream」と入力し、「Save Changes」を押します。<tt>editWishList.php</tt>ページが開き、更新されたリストが表示されます。<br><img alt="editWishList.phpページ: リスト上の更新されたウィッシュ" class="margin-around" src="../../../images_www/articles/72/php/wish-list-lesson7/editWishListWishAdded.png"> </li>
</ol>
<h2><a id="deleteWish" name="deleteWish"></a>ウィッシュの削除 </h2>
<p>ウィッシュの作成、読取り、更新ができるようになったので、ウィッシュを削除するメソッドを追加します。</p>
<p><strong>ユーザーがウィッシュを削除できるようにするには:</strong></p>
<ol>
<li><p><tt>delete_wish</tt>関数を<tt>db.php</tt>に追加します。</p>
<p><b>MySQLデータベースの場合:</b></p>
<pre class="examplecode">function delete_wish ($wishID){<br> $this-&gt;query(&quot;DELETE FROM wishes WHERE id = &quot; . $wishID);<br>}
</pre>
<p><b>Oracleデータベースの場合:</b></p>
<pre class="examplecode">public function delete_wish($wishID) {
$query = &quot;DELETE FROM wishes WHERE id = :wish_id_bv&quot;;
$stid = oci_parse($this-&gt;con, $query);
oci_bind_by_name($stid, ':wish_id_bv', $wishID);
oci_execute($stid);
}</pre>
</li>
<li><tt>deleteWish.php</tt>という名前の新しいPHPファイルを作成し、次のコードを&lt;?php?>ブロック内に入力します。
<pre class="examplecode">require_once(&quot;Includes/db.php&quot;);<br>WishDB::getInstance()-&gt;delete_wish ($_POST[&quot;wishID&quot;]);<br>header('Location: <tt>editWishList.php</tt>' );</pre>
このコードにより、<tt>db.php</tt>ファイルが使用できるようになります。入力パラメータとして<tt>wishID</tt>を使用し、WishDBのインスタンスから<tt>delete_wish</tt>関数をコールします。最後に、アプリケーションが<tt>editWishList.php</tt>ページにリダイレクトされます。</li>
<li>「Delete」ボタンを実装するには、別のHTML表のセルを、<tt>editWishList.php</tt><tt>while</tt>ループの内部で、<tt>editWish</tt>ボタンのコード・ブロックのすぐ下に追加します。HTML入力フォームには、<tt>wishID</tt>用の非表示フィールドと、「Delete」というラベルが付いた送信ボタンが含まれています。(MySQLデータベース用のコードが示されていますが、追加されるコードはOracleデータベースの場合も同じで、同じ場所になります。)
<pre class="examplecode"> while ($row = mysqli_fetch_array($result))<del></del><strong>:</strong><br> echo &quot;&lt;tr&gt;&lt;td&gt;&quot; . htmlentities($row[&quot;description&quot;]) . &quot;&lt;/td&gt;&quot;;<br> echo &quot;&lt;td&gt;&quot; . htmlentities($row[&quot;due_date&quot;]) . &quot;&lt;/td&gt;<del>&lt;/tr&gt;\n</del>&quot;;<br> ?&gt;
&lt;td>
&lt;form name="editWish" action="editWish.php" method="GET">
&lt;input type="hidden" name="wishID" value="&lt;?php echo <tt>$wish</tt>ID; ?>">
&lt;input type="submit" name="editWish" value="Edit">
&lt;/form>
&lt;/td>
<strong>&lt;td&gt;
&lt;form name=&quot;deleteWish&quot; action=&quot;deleteWish.php&quot; method=&quot;POST&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;wishID&quot; value=&quot;&lt;?php echo $wishID; ?&gt;&quot;/&gt;
&lt;input type=&quot;submit&quot; name=&quot;deleteWish&quot; value=&quot;Delete&quot;/&gt;
&lt;/form&gt;
&lt;/td&gt;</strong>
&lt;?php
echo &quot;&lt;/tr&gt;\n&quot;;
endwhile;
mysqli_free_result($result);
?&gt;
&lt;/table&gt;</pre>
</li></ol>
<p><tt>while</tt>ループ内に「Edit」ボタンを持つフォームを含む表の全体は、次のようになります。</p>
<p><b>MySQLデータベースの場合:</b></p>
<pre class="examplecode">&lt;table border=&quot;black&quot;&gt;
&lt;tr&gt;&lt;th&gt;Item&lt;/th&gt;&lt;th&gt;Due Date&lt;/th&gt;&lt;/tr&gt;
&lt;?php
require_once(&quot;Includes/db.php&quot;);
$wisherID = WishDB::getInstance()-&gt;get_wisher_id_by_name($_SESSION[&quot;user&quot;]);
$result = WishDB::getInstance()-&gt;get_wishes_by_wisher_id($wisherID);
while($row = mysqli_fetch_array($result)):
echo &quot;&lt;tr&gt;&lt;td&gt;&quot; . htmlentities($row['description") . &quot;&lt;/td&gt;&quot;;
echo &quot;&lt;td&gt;&quot; . htmlentities($row['due_date']) . &quot;&lt;/td&gt;&quot;;
$wishID = $row[&quot;id&quot;];
?&gt;
&lt;td&gt;
&lt;form name=&quot;editWish&quot; action=&quot;editWish.php&quot; method=&quot;GET&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;wishID&quot; value=&quot;&lt;?php echo $wishID; ?&gt;&quot;/&gt;
&lt;input type=&quot;submit&quot; name=&quot;editWish&quot; value=&quot;Edit&quot;/&gt;
&lt;/form&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;form name=&quot;deleteWish&quot; action=&quot;deleteWish.php&quot; method=&quot;POST&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;wishID&quot; value=&quot;&lt;?php echo $wishID; ?&gt;&quot;/&gt;
&lt;input type=&quot;submit&quot; name=&quot;deleteWish&quot; value=&quot;Delete&quot;/&gt;
&lt;/form&gt;
&lt;/td&gt;
&lt;?php
echo &quot;&lt;/tr&gt;\n&quot;;
endwhile;
mysqli_free_result($result);
?&gt;
&lt;/table&gt;</pre>
<p><b>Oracleデータベースの場合:</b> </p>
<pre class="examplecode">&lt;table border=&quot;black&quot;&gt;
&lt;tr&gt;&lt;th&gt;Item&lt;/th&gt;&lt;th&gt;Due Date&lt;/th&gt;&lt;/tr&gt;
&lt;?php
require_once(&quot;Includes/db.php&quot;);
$wisherID = WishDB::getInstance()-&gt;get_wisher_id_by_name($_SESSION[&quot;user&quot;]);
$stid = WishDB::getInstance()-&gt;get_wishes_by_wisher_id($wisherID);
while ($row = oci_fetch_array($stid)):
echo &quot;&lt;tr&gt;&lt;td&gt;&quot; . htmlentities($row[&quot;DESCRIPTION&quot;]) . &quot;&lt;/td&gt;&quot;;
echo &quot;&lt;td&gt;&quot; . htmlentities($row[&quot;DUE_DATE&quot;]) . &quot;&lt;/td&gt;&quot;;
$wishID = $row[&quot;ID&quot;];
?&gt;
&lt;td&gt;
&lt;form name=&quot;editWish&quot; action=&quot;editWish.php&quot; method=&quot;GET&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;wishID&quot; value=&quot;&lt;?php echo $wishID; ?&gt;&quot;/&gt;
&lt;input type=&quot;submit&quot; name=&quot;editWish&quot; value=&quot;Edit&quot;/&gt;
&lt;/form&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;form name=&quot;deleteWish&quot; action=&quot;deleteWish.php&quot; method=&quot;POST&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;wishID&quot; value=&quot;&lt;?php echo $wishID; ?&gt;&quot;/&gt;
&lt;input type=&quot;submit&quot; name=&quot;deleteWish&quot; value=&quot;Delete&quot;/&gt;
&lt;/form&gt;
&lt;/td&gt;
&lt;?php
echo &quot;&lt;/tr&gt;\n&quot;;
endwhile;
oci_free_statement($stid);
?&gt;
&lt;/table&gt;</pre>
<h2><a name="testingDeleteWishFunctionality"></a>ウィッシュの削除機能のテスト</h2>
<p>機能が正しく実装されたことを確認するには、<tt>editWishList.php</tt>ページで任意の項目の横にある「Delete」を押します。その項目がリストに表示されなくなります。</p>
<img alt="editWishList.phpページ: ウィッシュの削除" class="margin-around" src="../../../images_www/articles/72/php/wish-list-lesson7/deleteWish.png">
<h2><a name="lessonResultSourceCode"></a>現在のレッスン完了後のアプリケーション・ソース・コード </h2>
<p>MySQLユーザー: このレッスンが完了した後のプロジェクトの状態を反映したソース・コードをダウンロードするには、<a href="https://netbeans.org/files/documents/4/1933/lesson7.zip" target="_blank">ここ</a>をクリックします。</p>
<p>Oracleデータベース・ユーザー: このレッスンが完了した後のプロジェクトの状態を反映したソース・コードをダウンロードするには、<a href="https://netbeans.org/projects/www/downloads/download/php%252Foracle-lesson7.zip" target="_blank">ここ</a>をクリックします。</p>
<h2><a name="nextSteps"></a>次の手順</h2>
<p> <a href="wish-list-lesson6.html">&lt;&lt; 前のレッスン</a><br><br><a href="wish-list-lesson8.html">次のレッスン>></a><br><br><a href="wish-list-tutorial-main-page.html">チュートリアルのメイン・ページに戻る</a> </p>
<br>
<div class="feedback-box" ><a href="/about/contact_form.html?to=3&amp;subject=Feedback:%20PHP%20Wish%20List%20CRUD%207:%20Updating%20and%20Deleting%20DB%20Entries">このチュートリアルに関するご意見をお寄せください</a></div>
<br style="clear:both;" >
<p><a href="../../../community/lists/top.html">users@php.netbeans.orgメーリング・リストに登録する</a>ことによって、NetBeans IDE PHP開発機能に関するご意見やご提案を送信したり、サポートを受けたり、最新の開発情報を入手したりできます。
<p><a href="wish-list-tutorial-main-page.html"></a>
<p>
<a href="../../trails/php.html">PHPの学習に戻る</a><br>
</p>
</body>
</html>