2014-09-23 22 views
1

我正在使用以下PHP代碼,在用戶通過輸入名稱提交表單後,該代碼將處理該代碼,然後決定向用戶轉發哪個URL。在PHP開關大小寫聲明中的默認情況下並不真正起到默認作用?

我剛剛注意到,如果用戶沒有輸入foo輸入名稱的頁面(例如,讓我們假設前一頁上的表單有一個`vvv'作爲輸入名稱,而是由於一些錯誤), 那麼這個PHP代碼不會將用戶發送到默認URL。相反,它會在循環中每3秒刷新一次。

爲什麼?如果出現任何錯誤,包括上述情況,是否不應該獲得默認值?

CODE:

<?php 

if(isset($_POST['foo'])){ 

    switch ($_POST['foo']) { 

    case "aaa": 
     $url = "http://www.aaa.com/"; 
     break; 

    default: 
     $url = "http://www.bbb.com/"; 
    } 
} 

header("refresh:3;url=$url"); 


?> 
<!doctype html> 
<html> 
<head> 
<style> 
.test {display: block;} 
</style> 
</head> 
<body> 
test 
</body> 
</html> 
+0

嘗試增加休息;到默認情況 – Matheno 2014-09-23 10:52:13

+0

@DamienPirsy @ User8889'break'會跳過'switch'並且無論如何會繼續到'header'部分 – Justinas 2014-09-23 10:53:16

+0

@ User8889不會幫助.. – Bucky 2014-09-23 10:57:39

回答

0

1)我覺得你與$_POST$_GET搞亂。 Get params在URL中可見,POST不在url中顯示。

2)如果沒有$_POST['foo'],比它會拋出錯誤,因爲沒有設置$url變量。更好地改變了這種代碼:

if(isset($_GET['foo'])){ 

    switch ($_GET['foo']) { 
     case "aaa": 
      $url = "http://www.aaa.com/?foo=bbb"; 
      header("refresh:3;url={$url}"); 
      break; 
     default: 
      $url = "http://www.bbb.com/?foo=aaa"; 
      header("refresh:3;url={$url}"); 
    } 
    die(); // Optionally, if you wish not to continue any script 
} else { 
    /* Show default code */ 
} 
+0

這不是一個選項,因爲頁面必須處理使用POST方法提交的表單。 – Bucky 2014-09-23 11:00:57

+0

@Bucky不僅僅是把'$ _GET'改成'$ _POST',但是你不能用'header'發送參數,你必須使用'cUrl' – Justinas 2014-09-23 11:08:12

0

請覈實時,該頁面導航到不foo參數達到switch snipet。

在您的情況下,$url尚未啓動(可能是if條件失敗)。因此,header函數實際上會向瀏覽器發送以下標頭:refresh:3;url=url=後面的空字符串),這會導致瀏覽器每3秒刷新一次當前 url。

+0

你是什麼意思來驗證它?你所說的基本上是問題的原因(因爲如果在表單中提交'foo'參數,它會工作正常),但是我希望'default'在任何情況下都可以工作,是不是默認的目的是爲了處理這種情況,以便不會出現空字符串? – Bucky 2014-09-23 11:04:52

+0

如果您從來沒有首先進入'switch'語句,那麼缺省值不起作用。當'isset($ _ POST ['foo'])'爲false時,您可以跳過整個塊。 – Barmar 2014-09-23 11:05:51

+0

你可以在'switch'函數後面或'header'函數之前'死掉','var_dump'是'$ url'的值。 – 2014-09-23 11:06:41

0
<?php 
$url = "http://www.bbb.com/"; 
if(isset($_POST['foo'])){ 

    switch ($_POST['foo']) { 

    case "aaa": 
     $url = "http://www.aaa.com/"; 
     break; 

    } 
} 

header("refresh:3;url=$url"); 


?> 
<!doctype html> 
<html> 
<head> 
<style> 
.test {display: block;} 
</style> 
</head> 
<body> 
test 
</body> 
</html> 

如果您在上方設置默認網址,會更好。所以,即使沒有任何案件得到匹配。默認值將始終存在。如果情況下的值得到匹配,那麼它將被替換。

0

$_POST['foo']有什麼價值嗎? 嘗試轉儲值,以檢查是否有什麼在裏面:

var_dump($_POST['foo']) 

如果這樣做的結果是空再有就是你的形式出現錯誤。

像這樣的東西應該工作:

<form method='post' action = $this->url()> 
    <div> 
    <input type='text' name='foo' value='foo'> 
    </div> 
    <div> 
    <input type='submit' value='submit' name='submit'> 
    </div> 
</form> 

和動作:

if(isset($_POST['foo']) && !empty($_POST['foo'])){ 

    switch ($_POST['foo']) { 

    case "aaa": 
     $url = "http://www.aaa.com/"; 
     break; 

    default: 
     $url = "http://www.bbb.com/"; 
    } 
}