Форма поиска и результаты на одной странице, а не на двух. Решения? - PullRequest
0 голосов
/ 17 ноября 2010

Я изучил некоторые PHP и MySQL из книги, которая учит вас, как создать простой сайт, управляемый базой данных. В примерах к книге мы создаем базу данных шуток, в которой хранятся имена авторов, текст шутки, дата и идентификатор. Прогресс Я научился использовать включает в свой основной контроллер, index.php. Я застрял в части, где мне говорят, чтобы создать функцию поиска для базы данных шутки, кодируя следующим образом:

Это первая часть контроллера под названием «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") состояла в том, чтобы включить 'jokesearch.html.php' в CHANGE 1 и снова в CHANGE 2, однако это не помогло .. . он просто перезагрузил страницу.

2-я попытка была использовать заголовок ('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>

Ответы [ 2 ]

0 голосов
/ 17 ноября 2010

С точки зрения MVC ваша первоначальная установка - правильный путь. Ваш контроллер собирает и обрабатывает данные и отправляет их в представления (ваши файлы .html.php).

Хорошей практикой является разделение различных элементов на разные виды. Таким образом, окно поиска или результаты поиска отображаются иначе, чем шутки.

Помещение обоих логически различных элементов в один файл представления усложняет обслуживание.

С уважением, Эрвин Вролейк snow.nl

0 голосов
/ 17 ноября 2010

может быть что-то вроде этого

if (isset ($ _ GET ['action']) и $ _GET ['action'] == 'search') {// результат поиска} else {// showформа поиска}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...