2017-08-14 60 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。