Переключатель в PHP - PullRequest
       11

Переключатель в PHP

3 голосов
/ 20 февраля 2012

Я пытаюсь сделать некоторые проверки ошибок.Я хочу сделать так, чтобы, если ни одна радио-кнопка не была отмечена на html-странице, она перешла на php и сказала пользователю выбрать радио-кнопку и ссылку для возврата на эту страницу.

Включеномой текущий код:

PHP

<?php


switch($_POST["city"]){
    case "sf":
        echo "Welcome to San Francisco, enjoy the beautiful weather.";
        break;
    case "tokyo":
        echo "Welcome to Tokyo, enjoy the sushi.";
        break;
    case "paris";
        echo "Welcome to Paris, enjoy the Eiffel Tower.";
        break;
    Default:
        echo "Please pick a city.";
        echo "<a href=\"/week7.html\">Go Back</a>";


}

?>

HTML

<!DOCTYPE html>
<html>
    <head>
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <div>
            <form action="Week7PHP.php" method="post">
                <input type="radio" name="city" value="sf">San Francisco<br />
                <input type="radio" name="city" value="paris">Paris<br/>
                <input type="radio" name="city" value="tokyo">Tokyo<br/>
                <input type="submit" id="Submit">
            </form>
        </div>
    </body>
</html>

Выдает ошибку, когда не находит ни одну из переключенных кнопок.

Это ошибка, если не выбран ни один параметр: Примечание: неопределенный индекс: город

Ответы [ 3 ]

3 голосов
/ 20 февраля 2012

Проблема в том, что оператор switch пытается получить доступ к $_POST["city"] в тех случаях, когда он не задан. Это идеальное применение для функции isset() :

if (isset($_POST["city")) {
   /* switch statement */
} else {
   /* form element*/
}
3 голосов
/ 20 февраля 2012

Причина, по которой вы можете получить ошибку, заключается в том, что вы использовали $_POST["city"] до того, как она была установлена ​​путем публикации

Лично я бы не использовал глобальные значения _POST _GET _REQUEST в коммутаторе.Я бы написал код контроллера независимо от того, насколько базовый сценарий проверяет и обрабатывает эти «специальные» переменные.

Что-то простое, как:

<?php 
if(isset($_POST['city'])){
    $city=$_POST['city'];
}else{
    $city='';
}
//Or simpler
$city=(isset($_POST['city']))?$_POST['city']:'';



//The use $city
switch($city){
    case "sf":
        echo "Welcome to San Francisco, enjoy the beautiful weather.";
        break;
    case "tokyo":
        echo "Welcome to Tokyo, enjoy the sushi.";
        break;
    ...
    ...

?>
3 голосов
/ 20 февраля 2012

Вам необходимо добавить break; после опции default:.И после "париса" у вас есть неправильная точка с запятой. Это должно быть двоеточие.

<?php


switch($_POST["city"]){
    case "sf":
        echo "Welcome to San Francisco, enjoy the beautiful weather.";
        break;
    case "tokyo":
        echo "Welcome to Tokyo, enjoy the sushi.";
        break;
    case "paris":
        echo "Welcome to Paris, enjoy the Eiffel Tower.";
        break;
    default:
        echo "Please pick a city.";
        echo "<a href=\"/week7.html\">Go Back</a>";
        break;

}

?>
...