2017-08-14 19 views
-1

オプションタグから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カインド/ソートの;-)面白い何が 'if'はハァッか。 –

答えて

0

...

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が与えられた変数が設定されているか否かに応じて、trueまたはfalseを返します。だから、これを行うとき:

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

$packagetrueまたはfalseのいずれかになります。

したがって、if ($package == 'one')またはelse if ($package == 'two')と比較すると、これらの一致が決して正しく達成されません。 oneまたはtwoのいずれかを選択した場合、true==と比較した場合、'one''two'の両方に等しいので、$package == 'one'はtrueと評価され、常に最初のリダイレクトを取得します。


代わりに、あなたは$_GET['package_select']が設定されていない場合$package、またはnull値に$_GET['package_select']の値を割り当てるには内蔵のフィルタ機能を使用することができます。 (フォームが送信されていない場合。空「を選択したパッケージ」オプションを選択した場合は、isset($_GET['package_select'])はまだtrueを返します。これは、唯一のケースとなります。)

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

次に、あなたのif/elseifは、正常に動作します$packageには、ブールの代わりにoneまたはtwoのいずれかを含めることができるためです。

関連する問題