2010-11-17 103 views
0

我一直在學習一些PHP和MySQL的書,教你如何創建一個簡單的數據庫驅動的網站。在本書的例子中,我們創建了一個存儲作者姓名,笑話文本,日期和ID的笑話數據庫。進展我已經被教過如何在我的主控制器index.php中使用include。我被卡在一部分,他們告訴我爲笑話數據庫創建一個搜索功能,編碼如下:Searchform和結果只在一個頁面上,而不是兩個。解決方案?

這是名爲'index.php'的控制器的第一部分,它只是顯示搜索形成。

// Display search form 
include $_SERVER['DOCUMENT_ROOT'] . '/includes/db.inc.php'; 
include 'searchform.html.php'; //CHANGE 1 
?> 

控制器的下一部分構建SQL,然後將其發送到jokes.html.php,非常簡單...這裏沒有問題。

if (isset($_GET['action']) and $_GET['action'] == 'search') 
{ 
include $_SERVER['DOCUMENT_ROOT'] . '/includes/db.inc.php'; 
//Build SQL statement and output results into an array code here 
} 
include 'jokes.html.php'; //CHANGE 2 
exit(); 
} 

你將如何修改上面的代碼,如果你searchform.html和jokes.html僅僅是一個HTML文件?我發現使用2個文件進行搜索很不方便。

我的第一次嘗試(我將搜索表單和笑話合併到「jokesearch.html.php」中)是在CHANGE 1中包含'jokesearch.html.php',並在CHANGE 2中再次包含'jokesearch.html.php',但是這並沒有幫助。它只是重新加載頁面。

第二次嘗試是使用header('Location:。')...這裏沒有運氣,它只是重新加載。

編輯:根據大衆的需求,我會包含兩個html文件。

searchform.html.php:

<?php include_once $_SERVER['DOCUMENT_ROOT'] . 
'/includes/helpers.inc.php'; ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
<title>Manage Jokes</title> 
<meta http-equiv="content-type" 
content="text/html; charset=utf-8"/> 
</head> 
<body> 
<h1>Manage Jokes</h1> 
<p><a href="?add">Add new joke</a></p> 
<form action="" method="get"> 
<p>View jokes satisfying the following criteria:</p> 
<div> 
<label for="author">By author:</label> 
<select name="author" id="author"> 
<option value="">Any author</option> 
<?php foreach ($authors as $author): ?> 
<option value="<?php htmlout($author['id']); ?>"><?php 
htmlout($author['name']); ?></option> 
<?php endforeach; ?> 
</select> 
</div> 
<div> 
<label for="category">By category:</label> 
<select name="category" id="category"> 
<option value="">Any category</option> 
<?php foreach ($categories as $category): ?> 
<option value="<?php htmlout($category['id']); ?>"><?php 
htmlout($category['name']); ?></option> 
<?php endforeach; ?> 
</select> 
</div> 
<div> 
<label for="text">Containing text:</label> 
<input type="text" name="text" id="text"/> 
</div> 
<div> 
<input type="hidden" name="action" value="search"/> 
<input type="submit" value="Search"/> 
</div> 
</form> 
<p><a href="..">Return to JMS home</a></p> 
</body> 
</html> 

jokes.html.php

<?php include_once $_SERVER['DOCUMENT_ROOT'] . 
'/includes/helpers.inc.php'; ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
<title>Manage Jokes: Search Results</title> 
<meta http-equiv="content-type" 
content="text/html; charset=utf-8"/> 
</head> 
<body> 
<h1>Search Results</h1> 
<?php if (isset($jokes)): ?> 
<table> 
<tr><th>Joke Text</th><th>Options</th></tr> 
<?php foreach ($jokes as $joke): ?> 
<tr valign="top"> 
<td><?php htmlout($joke['text']); ?></td> 
<td> 
<form action="?" method="post"> 
<div> 
<input type="hidden" name="id" value="<?php 
htmlout($joke['id']); ?>"/> 
<input type="submit" name="action" value="Edit"/> 
<input type="submit" name="action" value="Delete"/> 
</div> 
</form> 
</td> 
</tr> 
<?php endforeach; ?> 
</table> 
<?php endif; ?> 
<p><a href="?">New search</a></p> 
<p><a href="..">Return to JMS home</a></p> 
</body> 
</html> 
+0

只是好奇,什麼是給'.inc.php'和'.html.php'擴展的原因是什麼? – zerkms 2010-11-17 09:48:23

+0

您可以將包含的內容粘貼到您的問題中嗎? – babonk 2010-11-17 09:51:56

+0

沒問題。這本書說給他們的名字讓我可以很容易地識別文件類型。 – stockoverflow 2010-11-17 10:25:19

回答

0

從MVC的角度來看,您的初始設置是正確的選擇。 您的控制器收集並處理數據並將其發送到視圖(您的.html.php文件)。

將不同視圖分離爲不同視圖是一種很好的做法。因此,搜索框或搜索結果與笑話不同。

將兩個邏輯不同元素放在一個視圖文件中會使維護變得更加困難。

的問候, 歐文Vrolijk snow.nl

+0

是的,我會同意維護...但不幸的是我需要在一個文件中。以比薩餅訂單搜索/結果頁面爲例,其中包含3列:1個用於搜索表單,另一個用於結果,最後是訂單或購物車。你會想同時顯示它們。 – stockoverflow 2010-11-17 10:04:35

+0

您可以同時顯示它們,在您的情況下使用多個包含語句。重新加載可能是因爲包含文件的一些代碼白化而發生的。檢查是否沒有設置標題或元標記來清除包含的文件。 – 2010-11-17 10:14:19

+0

我會發布HTML文件。 – stockoverflow 2010-11-17 10:24:36

0

也許這樣的事情

如果(isset($ _ GET [ '行動'])與$ _GET ['action'] =='search'){ //搜索結果 }其他{ //顯示搜索表格 }

+0

我試過你的方法...沒有運氣。只是刷新自己沒有數據輸入。感謝您的回覆。 – stockoverflow 2010-11-17 11:38:12

相關問題