Использование поля формы для поиска 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>';
}
?>

И вот, у вас это есть, поиск по названию фильмов, организованных по годам.

Другие вопросы по тегам