Question

Dans mon login.php la page j'ai ceci:

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

Où si j'appelle l'url http://example.com/login.php?p=foo la fonction foo est appelé.

Est-il possible que je peux appeler cette url sans ajouter de a href http://example.com?p=foo dans ma balise html?

Par exemple quelque chose de aime ceci:

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

    ?>

et mon code html:

<a href="?login&p=foo">Login Foo</a> <br />
Était-ce utile?

La solution

c'est à cause de l'infinie page de redirection en boucle.qui sera créé par votre code.

$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
        }
    }

chaque fois que vous exécutez le code dans cette page, la condition est définie à true, c'est $_GET['p'] toujours tenir la valeur foo et il va rediriger encore et encore à la même page.la détection de PHP qui va arrêter l'exécution de votre script.

Je suis incapable de comprendre pourquoi vous voulez rediriger à nouveau la même page, même si la condition est remplie.ma suggestion est de l'éviter.il suffit de vérifier si la variable veut rediriger vers la même page si oui.ensuite, sautez la page si non, alors rediriger vers la destination préférée.

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

alors qu'il pourrait y avoir d'autre moyen.le code ci-dessus devrait également fonctionner, et éviter de tomber dans l'infini de la page de redirection en boucle.

Autres conseils

Je ne pense pas que c'est correct:

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

il devrait être

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

et vous devez l'utiliser

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

et c'est une boucle sans fin

if (array_key_exists("login", $_GET)) {
    $p = $_GET['p'];
    if ($p == 'foo') {
       header("Location: login.php?p=foo");  // This doesn't work

Il y a une erreur ici:

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

Correct:

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

Et aussi, la boucle est infinie.Lorsque vous entrez login.php ensuite vous demander d'aller encore et encore...Créer une "pause" de la fonction après le 1er temps.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top