0

以下に示すようにリダイレクトスクリプトを作成しました... pの値が渡されても、有効であってもdefault.htmページにリダイレクトされます...基本的にはif/else部分をスキップし、常にそうしないと。

条件文を無視しているphpヘッダー関数に何か特別なものはありますか?

<?php

/*
Use the following link format:
<a href="goto.php?p=XXXXXX">XXXXXX</a>
*/

$p = $_GET['p'];
$link = array(

/*Links*/
'link1'=>'/link1.htm',
'link2'=>'/link2.htm',

);

/*Send Headers*/

header('Content-Type: text/html; charset=utf-8');
header('X-Robots-Tag: noindex, nofollow, noarchive', true);

if (in_array($p, $link))
{
    header('Location: '.$link[$p]); // Valid p
}  
else
{
    header('Location: /default.htm'); // Invalid p
}

exit();
?>
4

3 に答える 3

3

array_key_exists を使用して、このようなものをいくつか使用します

if ((array_key_exists('p', $_GET) && isset($link[$p]))
{
    header('Location: '.$link[$p]); // Valid p
}  
else
{
    header('Location: /default.htm'); // Invalid p
}

上記は私にとってはうまくいきました。また、array_key exists を使用しているため、インデックス未定義の警告も表示されません。

于 2012-10-06T19:02:43.740 に答える
1

それ以外の:

if (in_array($p, $link))

あなたがしたい:

if (array_key_exists($p, $link))

最初は値 (s の右側) に対してチェックします=>。2 番目は、キー (s の左側) に対してチェックします=>

参照: http://php.net/manual/en/function.array-key-exists.php

あなたの場合の短いバージョンは次のとおりです。

$link = @$link[$p] ?: '/default.htm';
header("Location: $link");

ifとを惜しみませんelse

于 2012-10-06T18:59:31.733 に答える
0

$_GET['p']の値が の値リストにあるかどうかを確認$linkしていますが、それを呼び出しのキーとして使用していheader()ます。if$_GET['p']が配列内のキーであることを意味しているようです。$link

これを行うには、配列のキーをチェックするisset()代わりに使用します (配列の値をチェックします)。in_array()in_array()

if (isset($link[$p])) {
    header('Location: '.$link[$p]); // Valid p
}
于 2012-10-06T18:56:41.100 に答える