仅在一个页面上搜索和结果,而不是两个。解决方案?

时间:2010-11-17 09:42:01

标签: php search

我从一本书中学习了一些PHP和MySQL,教你如何创建一个简单的数据库驱动的站点。在本书的示例中,我们创建了一个存储作者姓名,笑话文本,日期和ID的笑话数据库。进展我已经被教过如何在我的主控制器index.php中使用includes。我被困在他们告诉我为笑话数据库创建搜索功能的部分,编码如下:

这是名为'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中再次包含,但是这没有帮助..它只是重新加载页面。

第二次尝试是使用标题('位置:。')...这里没有运气也只是重新加载。

编辑:根据大众需求,我将包含两个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>

2 个答案:

答案 0 :(得分:0)

也许是这样的

if(isset($ _ GET ['action'])和$ _GET ['action'] =='search'){ // 搜索结果 } else { //显示搜索表单 }

答案 1 :(得分:0)

从MVC的角度来看,您的初始设置是正确的方法。 您的控制器收集并处理数据并将其发送到视图(您的.html.php文件)。

将不同的元素分成不同的视图是一种好习惯。所以搜索框或搜索结果的视图与笑话不同。

将两个逻辑上不同的元素放在一个视图文件中会使维护更加困难。

此致 Erwin Vrolijk snow.nl