2017-08-14 72 views
-1

我想根據選定的選項值重定向頁面,如果我從選項標記中選擇一個比它將重定向google.com頁面其他我選擇了另一個選項,它將重定向gmail.com page.I編寫這些代碼,但它會重定向相同的值,如果我選擇其他選項任何解決方案這些。根據選擇的選項值重定向頁面

<?php 
$package = isset($_GET['package_select']); 
if ($package == 'one') 
{ 
    header("Location: http://google.com"); 
} 
else if ($package == 'two') 
{ 
    header("Location: http://youtube.com"); 
} 

?> 
<html> 
<body> 
<form action="#" method="get" id="packageForm" > 
<select name="package_select"> 
     <option value="">Select package</option> 
     <option value="one">One listing</option> 
     <option value="two">Two listings</option> 
    </select> 
<input id="submitButton" type="submit" value="Submit" /> 
</form> 
</body> 
</html> 
+1

'isset($ _ GET ['package_select'])'將始終被視爲已設置。 –

+0

@ Fred-ii-除非表格尚未提交,對吧? –

+0

@ Don'tPanic種/有點;-)有趣的是,如果'會'做什麼吧? –

回答

0

的Try ...

if(isset($_GET['package_select'])){ 
    if ($_GET['package_select'] == 'one') 
    { 
     header("Location: http://google.com"); 
     exit; 
    } 
    else if ($_GET['package_select'] == 'two') 
    { 
     header("Location: http://youtube.com"); 
     exit; 
    } 
} 

或者,更好的...

if(isset($_GET['package_select'])){ 
    switch($_GET['package_select']){ 
     case('one'):{ header("Location: http://google.com"); exit; } 
     case('two'):{ header("Location: http://youtube.com"); exit; } 
    } 
} 
+0

當然,但你能解釋一下爲什麼他們的語法失敗嗎?有一個你知道的原因。 –

+0

最好在每個頭後添加'exit;'。 –

+0

這是一個很好的觀點,@ Fred-ii-。我會更新答案以反映最佳做法。 – JBH

2

isset將返回根據給定的變量是否被設置truefalse。所以,當你這樣做:

$package = isset($_GET['package_select']); 

$package將是要麼truefalse

因此,當您將其與if ($package == 'one')else if ($package == 'two')進行比較時,這些相等性將永遠無法正確實現。如果任一onetwo被選中,然後$package == 'one'的值爲true,因爲使用==進行比較時true等於既'one''two',你會總是第一個重定向。


相反,你可以使用內置的過濾功能,如果$_GET['package_select']未設置爲$_GET['package_select']值分配給$packagenull值。 (這隻會是如果表單沒有提交的情況下,如果選擇了空「選擇包」選項,然後isset($_GET['package_select'])仍然會返回true。)

$package = filter_input(INPUT_GET, 'package_select'); 

然後你if/elseif將正常工作,因爲$package可以包含onetwo而不是bool。

相關問題