2012-02-20 106 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*/ 
}