Использование поля формы для поиска Php ассоциативного массива
Код:
<?php
echo "<h1>Testing your Trivia</h1>";
$ages['1943'] = "Casablanca";
$ages['1956'] = "Around The World in 80 Days";
$ages['1970'] = "Patton";
$ages['1977'] = "Annie Hall";
$ages['1981'] = "Chariots of Fire";
$ages['1990'] = "Dances With Wolves";
$ages['2005'] = "Crash";
$ages['2006'] = "The Departed";
echo "Give the year below won academy award<br>";
echo "<Strong>Movie: </strong> <input type='text' name='' id='' readonly='readonly' /><br>";
echo "<Strong>Year it Won the Oscar: </Strong> <form method='get'><input type='text' name='year' /></form><input type='submit' /> ";
echo '<pre>';
foreach( $ages as $key => $value){
print_r("Year: $key, Title: $value <br />");
}
echo '</pre>';
if(isset($_GET['year']))
{
if(array_key_exists($_GET['year'], $ages))
{
echo "<h2>" . $ages[$_GET['year']] . "</h2>";
}
else
{
echo 'Cannot find data';
}
}
?>
В основном, пытаясь настроить его так, чтобы я мог получить входные данные для фильма, выбрать случайный заголовок и отобразить его в поле ввода для "фильма", тогда пользователь должен угадать год, в который он был сделан. Если их значение слишком высокое, отображается страница с сообщением, что, если оно слишком низкое, это также показывает ошибку.
Я чувствую, что мне нужно добавить еще один If/Else, если он высокий или слишком низкий. Кто-нибудь?
Спасибо!!
2 ответа
Есть ли причина, по которой ваши ключи массива являются строками? Кажется, что в этом случае имело бы смысл быть целыми числами.
<?php
$ages['1977'] = "Annie Hall";
$ages['1956'] = "Around The World in 80 Days";
$ages['1990'] = "Dances With Wolves";
$ages['2006'] = "The Departed";
$ages['2005'] = "Crash";
$ages['1943'] = "Casablanca";
$ages['1981'] = "Chariots of Fire";
$ages['1970'] = "Patton";
if(isset($_GET['year']))
{
if(array_key_exists($_GET['year'], $ages))
{
echo $ages[$_GET['year']];
}
else
{
echo 'Cannot find data';
}
}
?>
<form method="GET">
<input type="text" name="year" value="1984" />
<input type="submit" />
</form>
Если пользователь отправляет, скажем, значение из выпадающего меню / списка переключателей, вы можете проверить, есть ли $ages
Массив имеет этот год, и если нет, отобразить сообщение по умолчанию:
$year = $_GET['year'];
echo isset($ages[$year]) ? $ages[$year] : 'DOES NOT COMPUTE';
Расширенное Править
Мужчины MVC, скорее всего, нанесут удар по мне за то, что я сказал это (если они этого еще не сделали), но я бы хотел, чтобы подобные вещи были независимыми. Это означает, что страница (скажем, index.php
) это выглядит в основном так:
<?php
// All of your PHP goes here.
?>
<!DOCTYPE html>
<!-- All of your HTML goes here. -->
Я начну с HTML. Вам понадобится форма, например так:
<form action="" method="get">
<div>
<label>Movie Year: <input type="text" name="year" />
<input type="submit" value="Look Up Movie" />
</div>
</form>
Обратите внимание, что форма action
оставлено пустым Это означает, что форма будет отправлена на текущую страницу. Вот где PHP в верхней части вашего документа вступает в игру.
Сначала вы захотите инициализировать массив лет и названий:
$ages = array(
'1977' => 'Annie Hall',
// ...
'1970' => 'Patton'
);
Затем вы проверяете, отправил ли пользователь форму:
if (isset($_GET['year'])) {
$year = $_GET['year'];
$message = isset($ages[$year]) ? 'The film for that year is called '.$ages[$year].'.' : 'There is no film for that year.';
}
Это устанавливает переменную $message
к некоторому тексту, который вы хотите отобразить пользователю.
Теперь мы сделаем последний переход к HTML-части вашего документа, прямо над формой:
<?php
if (!empty($message)) {
echo '<p>', $message, '</p><p>Want to go again?</p>';
}
?>
И вот, у вас это есть, поиск по названию фильмов, организованных по годам.