PHP - формы загрузки форм загрузки форм? - PullRequest
0 голосов
/ 14 ноября 2009

В настоящее время у меня есть страница PHP query.php с формой, которая представляет список стран с кнопкой отправки:

Countries
[] nation1
[] nation2
[] nation3
[] nation4
SUBMIT

это флажки для одного и того же массива, а форма ссылается на страницу <form method="post" action="query.php">

Когда нажата кнопка отправки, на базе данных запускается запрос, который выводит список участников на основе выбранных наций и создает новый список флажков под первым:

Countries
[] nation1
[] nation2
[] nation3
[] nation4
SUBMIT

You have chosen countries ____.

Actors
[] guy1
[] guy2
[] guy3
[] etc
SUBMIT

В настоящее время эта вторая форма вызывает новый файл PHP <form method="post" action="movie-query.php">, который ищет базу данных на основе выбранных актеров и возвращает все фильмы, которые их содержат.

Мне было интересно, есть ли способ сохранить все это на одной странице? Я не могу понять, как сделать так, чтобы результаты поиска отображались в query.php, когда используется вторая опция отправки. Если я установлю вторую форму на <form method="post" action="query.php">, то все, что она делает, сбрасывает query.php в исходное состояние:

Countries
[] nation1
[] nation2
[] nation3
[] nation4
SUBMIT

Вместо того, чтобы что-то сродни

Countries
[] nation1
[] nation2
[] nation3
[] nation4
SUBMIT

You have chosen countries ____.

Actors
[] guy1
[] guy2
[] guy3
[] etc
SUBMIT

You have chosen actors _____.

Movie Results
1. movietitle
2. movietitle
3. movietitle
4. etc.

все они появляются на одной странице.

Есть идеи? Спасибо.

Ответы [ 2 ]

2 голосов
/ 14 ноября 2009

Ajax?

Если вы не знакомы, посмотрите Prototype, jQuery, mootools или Dojo. Вы можете сделать запрос обратно на свой сервер с выбранными странами, чтобы получить выбор актера, а затем сделать другую, чтобы получить фильмы.

Я бы рекомендовал использовать JSON для кодирования данных. PHP json_encode () и json_decode () великолепны.

1 голос
/ 14 ноября 2009

AJAX для удобства использования, но убедитесь, что ваша форма работает, когда JS отключен / не поддерживается. В этом случае у вас может быть каскад включений: при отправке входных данных для формы она включает следующую форму.

/* At the end of query.php */
include_once('countryFields.php');
if (isset($_REQUEST['countries'])) {
    include_once('queryActor.php');
}
echo '</form>';

/* At end of queryActor.php */
include_once('actorFields.php');
if (isset($_REQUEST['actors'])) {
    // query results will end up within <form> but that's OK
    include_once('movie-query.php');
}

Каждый '* Fields.php' генерирует поля для формы; для каждого '* Fields.php' существует соответствующий '* Form.php'.

/* actorForm.php */
<form action="movie-query.php" method="POST" name="actorForm">
    <?php include('actorFields.php'); ?>
</form>
<script type="text/javascript">
    // AJAX stuff here
</script>

В этом примере ваша логика на основе AJAX будет отправляться в сценарии * Form.php, а ваша не-JS логика - в query.php Вы можете расширить каскад до бесконечности (хотя это повлияет на удобство использования). В файле '* Fields.php' проверьте пользовательский ввод из полей, которые он создает, чтобы не потерять шаг.

/* in actorFields.php */
if (!isset($_POST['countries'])) {
    $_POST['countries'] = array();
}
if (!isset($_POST['actors'])) {
    $_POST['actors'] = array();
}
...
/* Get actors from datastore. Keys of $actors are IDs from the datastore. */
$actors = Actors::forCountries($_POST['countries']);
/* when generating list of checkboxes, check any actors set in $_POST['actors'] 
   For example:
 */
foreach ($_POST['actors'] as $id) {
    $actors[$id]->checked = 'checked';
}
echo '<ul id="Actors">';
foreach ($actors as $id => $actor) {
    echo "<li><label for='actor[$id]'></label><input type='checkbox' name='actors[$id]' value='$id'",($actor->checked ? ' checked': ''),"/>{$actor->name}</li>";
}
echo '</ul>';

Часть того, что делается в примере «actorFields.php», отличается от того, что вы делаете в рабочем коде. С одной стороны, код для создания представления списка будет в другом сценарии.

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