1

私のlogin.phpページには次のものがあります:

$allowed_operations = array('foo', 'lorem');
    if(isset($_GET['p']) 
    && in_array(isset($_GET['p']), $allowed_operations)){
    switch($_GET['p']){
        case 'foo':
              // Code for 'foo' goes here
        break;
        case 'lorem':
             // Code for 'lorem' goes here
        break;
    }
}

URL http://example.com/login.php?p=fooを呼び出すと、関数fooが呼び出されます。

HTML マークアップにhref http://example.com?p=fooを追加せずにこの URL を呼び出すことは可能ですか?

たとえば、次のようなものです。

<?php

if (array_key_exists("login", $_GET)) {
    $p = $_GET['p'];
    if ($p == 'foo') {
       header("Location: login.php?p=foo");  // This doesn't work
                        // And if I remove the ?p=foo, 
                        // it redirect to the page but
                        // the 'foo' function is not called
        }
    }

    ?>

そして私のhtml:

<a href="?login&p=foo">Login Foo</a> <br />
4

3 に答える 3

1

これは、無限のページ リダイレクト ループが原因です。それはあなたのコードによって作成されます。

$p = $_GET['p'];
    if ($p == 'foo') {
       header("Location: login.php?p=foo");  // This doesn't work
                        // And if I remove the ?p=foo, 
                        // it redirect to the page but
                        // the 'foo' function is not called
        }
    }

このページでコードを実行するたびに、条件が true に設定されます。つまり、$_GET['p']常に値 foo が保持され、同じページに何度もリダイレクトされます。スクリプトの実行を停止する PHP を検出します。

条件が満たされていても、同じページに再度リダイレクトする理由が理解できません。私の提案はそれを避けることです。変数が同じページにリダイレクトするかどうかを確認するだけです。そうでない場合はページをスキップし、優先する宛先にリダイレクトします。

if (array_key_exists("login", $_GET)) {
    $p = $_GET['p'];
    if ($p == 'foo') {
      //sice the variable foo redirects to the same page skip this path and do nothing
    } else {
        //any other url redirection goes here
        header('Location: index.php?bar');
    }
}

他の方法があるかもしれませんが。上記のコードも機能するはずであり、無限のページ リダイレクト ループに入るのを回避できます。

于 2012-03-12T14:05:08.230 に答える
1

これは正しくないと思います:

$allowed_operations = array('foo', 'lorem');
if(isset($_GET['p'])  && in_array(isset($_GET['p']), $allowed_operations)){

そのはず

$allowed_operations = array('foo', 'lorem');
if(isset($_GET['p'])  && in_array($_GET['p'], $allowed_operations)){

そして、あなたは使うべきです

<a href="login&p=foo">Login Foo</a> <br />

そしてこれは無限ループです

if (array_key_exists("login", $_GET)) {
    $p = $_GET['p'];
    if ($p == 'foo') {
       header("Location: login.php?p=foo");  // This doesn't work
于 2012-03-12T14:08:50.360 に答える
0

ここにエラーがあります:

<a href="?login&p=foo">Login Foo</a> <br />

正しい:

<a href="login.php?p=foo">Login Foo</a> <br />

また、ループは無限大です。login.phpと入力すると、何度も何度も移動するように求められます...1回目以降に「ブレーク」関数を作成します。

于 2012-03-12T14:06:48.643 に答える