現在我們已經有了允許用戶輸入一個笑話并將其加入到我們的數據庫中的程序代碼。現在剩下的就是將其加入到我們已做好的笑話顯示頁面。因為絕大多數的用戶只會想要看看笑話,所以我們不想對我們的頁面做大的更改,除非用戶表示想要添加一個新的笑話。因為這個原因,我們的應用程序應該是一個多功能的頁面。下面是程序的代碼:
<HTML> ... <BODY> <?php // If the user wants to add a joke if (isset($addjoke)): ?> <FORM ACTION="<?php echo($PHP_SELF); ?>" METHOD=POST> <P>Type your joke here:<BR> <TEXTAREA NAME="joketext" ROWS=10 COLS=40 WRAP></TEXTAREA><BR> <INPUT TYPE=SUBMIT NAME="submitjoke" VALUE="SUBMIT"> </FORM>
<?php else:
// Connect to the database server $dbcnx = @mysql_connect("localhost", "root", "mypasswd"); if (!$dbcnx) { echo( "<P>Unable to connect to the " . "database server at this time.</P>" ); exit(); }
// Select the jokes database if (! @mysql_select_db("jokes") ) { echo( "<P>Unable to locate the joke " . "database at this time.</P>" ); exit(); }
// If a joke has been submitted, // add it to the database. if ("SUBMIT" == $submitjoke) { $sql = "INSERT INTO Jokes SET " . "JokeText='$joketext', " . "JokeDate=CURDATE()"; if (mysql_query($sql)) { echo("<P>Your joke has been added.</P>"); } else { echo("<P>Error adding submitted joke: " . mysql_error() . "</P>"); } } echo("<P> Here are all the jokes " . "in our database: </P>"); // Request the text of all the jokes $result = mysql_query( "SELECT JokeText FROM Jokes"); if (!$result) { echo("<P>Error performing query: " . mysql_error() . "</P>"); exit(); } // Display the text of each joke in a paragraph while ( $row = mysql_fetch_array($result) ) { echo("<P>" . $row["JokeText"] . "</P>"); } // When clicked, this link will load this page // with the joke submission form displayed. echo("<P><A HREF='$PHP_SELF?addjoke=1'>" . "Add a Joke!</A></P>"); endif; ?> </BODY> </HTML>
現在我們有了一個單獨的文件,這個文件包含不太多的PHP代碼,通過這個文件,我們可以顯示我們的MySQL數據庫中的笑話并能向我們的MySQL數據庫中添加笑話。
一個挑戰
作為家庭作業,你可以看看你是不是能解決這么一個問題:在頁面上顯示的每一個笑話后面放置一個叫“Delete this Joke”的超連接,當單擊這個連接時,會從數據庫中刪除這個笑話并顯示更改過以后的笑話列表。下面是對你的一些提示:
你可以還在一個多功能頁面完成全部的功能。
你需要使用SQL的DELETE命令,這個命令我們曾在第二章中學習過。
這是一個關鍵的問題。要刪除一個指定的數據庫,你需要能夠唯一地標識它。Jokes表中的ID可以完成這個功能。你必須將要被刪除的笑話的ID傳遞到刪除笑話的請求中。將這個值放到“Delete this Joke”連接的查詢字符串中是比較合適的。
如果你覺得你已經有了答案,或者你只想知道解決方案,那就去看看下一頁。祝你好運!
結語
在這一章中,我們學習了一些新的用來實現與MySQL數據庫服務接口的PHP函數。使用這些函數,我們建立了我們的第一個數據庫驅動的網站,我們的這個網站可以在線地發布我們數據庫中笑話并允許訪問者向其中添加他們自己的笑話。
在第五章中,我們會回到MySQL命令行去學習如何使用關系型數據庫的原理以及其他一些更高級的SQL查詢去描述更為復雜的信息,并給予訪問者對他們自己添加的笑話以特別的權限!
挑戰的解決
這是我們上面提出的“家庭作業”的解決方案。要在每一個笑話后面添加一個“Delete this Joke”連接,必須作下面的改動:
之前,我們曾經在我們的頁面的底端的“Add a Joke!”連接中傳遞過一個$addjoke變量,通過這個變量來通知我們的腳本不再顯示通常的笑話列表,而是顯示一個錄入笑話的表單。與此相類似,我們在我們的“Delete this Joke”連接中傳遞一個$deletejoke變量來表示我們想要刪除一個笑話。
在獲得每一個笑話的JokeText列的同時,我們還獲得了ID列的值,所以我們獲得了與數據庫中每一個笑話關聯的ID。
我們將要刪除的笑話的ID值賦予$deletejoke變量。這是通過將從數據庫中獲得的ID值插入到每一個笑話的“Delete this Joke”連接中來實現的。
使用了一個if 語句,如果在載入這一頁時,我們的$deletejoke被賦予了一個值(使用isset函數),我們會在一個SQLDELETE語句中使用這個值(將被刪除的笑話的ID)來刪除指定的笑話。
這兒是全部的源代碼:
<HTML> ... <BODY> <?php // If the user wants to add a joke if (isset($addjoke)): ?>
<FORM ACTION="<?php echo($PHP_SELF); ?>" METHOD=POST> <P>Type your joke here:<BR> <TEXTAREA NAME="joketext" ROWS=10 COLS=40 WRAP></TEXTAREA><BR> <INPUT TYPE=SUBMIT NAME="submitjoke" VALUE="SUBMIT"> </FORM> <?php else:
// Connect to the database server $dbcnx = @mysql_connect( "localhost", "root", "mypasswd"); if (!$dbcnx) { echo( "<P>Unable to connect to the " . "database server at this time.</P>" ); exit(); }
// Select the jokes database if (! @mysql_select_db("jokes") ) { echo( "<P>Unable to locate the joke " . "database at this time.</P>" ); exit(); } // If a joke has been submitted, // add it to the database. if ("SUBMIT" == $submitjoke) { $sql = "INSERT INTO Jokes SET " . "JokeText='$joketext', " . "JokeDate=CURDATE()"; if (mysql_query($sql)) { echo("<P>Your joke has been added.</P>"); } else { echo("<P>Error adding submitted joke: " . mysql_error() . "</P>"); } }
// If a joke has been deleted, // remove it from the database. if (isset($deletejoke)) { $sql = "DELETE FROM Jokes " . "WHERE ID=$deletejoke"; if (mysql_query($sql)) { echo("<P>The joke has been deleted.</P>"); } else { echo("<P>Error deleting joke: " . mysql_error() . "</P>"); } } echo("<P> Here are all the jokes " . "in our database: </P>"); // Request the ID and text of all the jokes $result = mysql_query( "SELECT ID, JokeText FROM Jokes"); if (!$result) { echo("<P>Error performing query: " . mysql_error() . "</P>"); exit(); } // Display the text of each joke in a paragraph // with a "Delete this Joke" link next to each. while ( $row = mysql_fetch_array($result) ) { $jokeid = $row["ID"]; $joketext = $row["JokeText"]; echo("<P>$joketext " . "<A HREF='$PHP_SELF?deletejoke=$jokeid'>" . "Delete this Joke</A></P>"); } // When clicked, this link will load this page // with the joke submission form displayed. echo("<P><A HREF='$PHP_SELF?addjoke=1'>" . "Add a Joke!</A></P>"); endif; ?> </BODY> </HTML>
|