2012-02-20 103 views
3

我想做一些错误检查。我想这样做,如果在html页面上没有选中单选按钮,它将传递给php并告诉用户选择单选按钮和链接返回到该页面。在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> 

这是给当它没有发现任何检查单选按钮的错误。

这是如果没有选项选择了错误:注意:未定义指数:城市

+1

什么 “错误” 它给? – penartur 2012-02-20 05:29:12

+0

在切换前echo $ _POST [“city”]。检查它给出了什么。 – 2012-02-20 05:30:04

+0

注意:未定义索引:city 多数民众赞成除了在“巴黎”语法明智之后的分号错误 – stytown 2012-02-20 05:33:11

回答

2

的原因,然后才通过张贴

我个人不会内使用_POST_GET_REQUEST全局设置,你可能会得到的您使用$_POST["city"]错误开关。 无论脚本检查和处理这些“特殊”变量的脚本多么基本,我都会编写一个控制器。

事情就这么简单:

<?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; 
    ... 
    ... 

?> 
+0

如果没有对数据进行操作,我不明白分配第二个变量的好处。在'isset()'内的'switch'会被适当调用的情况是零。 – amindfv 2012-02-20 05:47:01

+0

你也应该检查是否设置提交按钮if(isset($ _ POST ['submit']))'如果你的PHP应该来的 – 2012-02-20 05:49:56

+0

应该在使用前总是检查变量,并且总是检查输入变量,即使我的答案没有添加消毒它似乎仍然合乎逻辑 – 2012-02-20 05:53:02

3

您需要default:选项后添加break;。 你在“巴黎”之后有一个错位的分号,它应该是冒号。

<?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; 

} 

?> 
+6

最后一个选项后,您不需要'bre​​ak',因为这是最后一个选项,没有更多'case'可以匹配。 – deceze 2012-02-20 05:29:40

+0

这仍然给出一个错误,因为$ _POST ['city']没有设置。 – amindfv 2012-04-09 10:58:23

3

的问题是,switch语句试图访问$_POST["city"]在情况下,有没有被设定。这是isset() function一个完美的使用:

if (isset($_POST["city")) { 
    /* switch statement */ 
} else { 
    /* form element*/ 
}