Расположение заголовка PHP с ключом массива и разрешенные операции - PullRequest
1 голос
/ 12 марта 2012

На моей странице 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 .

Возможно ли, что я могу вызвать этот URL без добавления href http://example.com? P = foo в моей HTML-разметке?

Например, что-то вроде этого:

<?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 />

Ответы [ 3 ]

1 голос
/ 12 марта 2012

Я не думаю, что это правильно:

$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
1 голос
/ 12 марта 2012

это из-за бесконечных циклов перенаправления страниц. который будет создан вашим кодом.

$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');
    }
}

пока может быть другой путь. приведенный выше код также должен работать, и он позволит избежать попадания в бесконечный цикл перенаправления страниц.

0 голосов
/ 12 марта 2012

Здесь ошибка:

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

Правильно:

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

А также, цикл бесконечен. Когда вы входите в login.php, то вы просите идти снова и снова ... Создайте функцию "break" после первого раза.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...