web-dev-qa-db-fra.com

Plusieurs paramètres HTTP GET avec le même identifiant

Disons que je reçois des demandes telles que:

http://www.example.com/index.php?id=123&version=3&id=234&version=4

Est-il possible de les extraire de manière simple dans mon code php? Je me rends compte que je pourrais obtenir l'intégralité de la chaîne de requête avec javascript à l'aide de window.location.href et la gérer manuellement, mais je recherche quelque chose de plus élégant. Les requêtes peuvent contenir un nombre illimité de paires version/id, mais je peux supposer que la requête est bien formée et n’a aucune obligation de gérer des chaînes non valides.

11
MatsT

Selon ce commentaire du manuel PHP , l'analyseur de chaîne de requête PHP supprimera les paramètres en double ... donc je ne pense pas que PHP convienne parfaitement pour ce que vous voulez faire (sauf qu'il a la même capacité que javascript pour obtenir la chaîne de requête brute, avec laquelle vous pouvez faire ce que vous voulez)

7
Brian Driscoll

Si vous pouvez modifier le nom du champ pour inclure [], alors PHP créera un tableau contenant toutes les valeurs correspondantes:

http://www.example.com/index.php?id[]=123&version[]=3&id[]=234&version[]=4

Si vous n'avez pas la possibilité de changer les noms de champs, alors comme vous le dites, vous devrez analyser la chaîne de requête vous-même.

24
Jacob Mattison

En supposant que vous ayez un certain contrôle sur la requête, ajoutez le suffixe [] et le nom PHP qui générera des tableaux au lieu de tout supprimer sauf un.

http://www.example.com/index.php?id[]=123&version[]=3&id[]=234&version[]=4

Puisqu'ils sont paires , vous voudrez probablement corriger l'ordre dans lequel ils apparaissent en utilisant des index.

http://www.example.com/index.php?id[0]=123&version[0]=3&id[1]=234&version[1]=4
1
Quentin

Il suffit d'extraire les clés et les valeurs de $ _GET, utilisez la fonction comme:

print_array('$_GET...',$_GET);

... et le code de fonction sera:

function print_array($title, $arr) {
    echo '<table width="100%" style="padding:10;">';
    echo '<tr><td width="30%" style="text-align:right; background-color:bisque;">key of </td><td style="background-color:bisque;">'.$title.'</td></tr>';
    foreach($arr as $key => $value) {
        echo '<tr>';
            echo '<td style="text-align:right; color:grey;">';
                echo $key;
            echo '</td>';
            echo '<td>';
                echo $value;
            echo '</td>';
        echo '</tr>';
    }
    echo '</table>';
}
1
Vitor Marques

Pas aussi complet ni aussi fiable que les méthodes mentionnées ci-dessus, mais je l’utilise pour supprimer le besoin de [] dans les URL sans me soucier de la réécriture.

$aQuery = explode("&", $_SERVER['QUERY_STRING']);
$aQueryOutput = array();
foreach ($aQuery as $param) {
    if(!empty($param)){
        $aTemp = explode('=', $param, 2);
        if(isset($aTemp[1]) && $aTemp[1] !== ""){
            list($name, $value) = explode('=', $param, 2);
            $aQueryOutput[ strtolower(urldecode($name)) ][] = urldecode(preg_replace('/[^a-z 0-9\'+-]/i', "", $value));
        }
    }
}
0
atoms