Question

Un de mes sites propose des fonctions de tri très complexes, en plus d’une pagination, et les différentes variables s’ajoutent à une URL assez complexe, ce qui est très pénible à gérer. Existe-t-il un moyen de gérer efficacement QUERY_STRING?

Par cela, je veux dire ... si l'URL est index.php? catid = 3 et trier = date et année = 2009 et page = 2 et si je souhaite que l'utilisateur passe à la page 3 ou modifie la méthode de tri ..... comment pourrais-je conserver les vars restants sans vérifier chaque var avec une condition if / else et les renvoyer dans le lien qui mènerait à la page 3 ou à une autre méthode de tri.

Était-ce utile?

La solution

Pour gérer les chaînes de requête (format de chaîne) de la requête, vous pouvez utiliser parse_str ( ) . Lorsque vous souhaitez créer une chaîne de requête, utilisez http_build_query () .

Il y a quelques exemples sur ces pages de documentation.

Si, pour une raison quelconque, vous ne pouvez pas utiliser http_build_query , consultez ma question sur le le moyen le plus rapide d'imploser un tableau associatif .

<?php
$QueryString = 'catid=3&sort=date&year=2009&page=2'; // sample querystring
parse_str($QueryString, $HttpQuery);

print_r($HttpQuery); // will be an associative array

$HttpQuery['page'] = 3; // change any values

$NewQueryString = http_build_query($HttpQuery); // rebuild the querystring

Autres conseils

PHP vous fournit un $ _GET global qui contient votre chaîne de requête parfaitement analysée en éléments

PHP vous fournit un $ _GET global qui contient votre chaîne de requête parfaitement analysée en éléments

$get = array_intersect_key(

PHP vous fournit un $ _GET global qui contient votre chaîne de requête parfaitement analysée en éléments

PHP vous fournit un $ _GET global qui contient votre chaîne de requête parfaitement analysée en éléments

<*>

etc

Vous pouvez désélectionner ceux que vous ne voulez pas transmettre, puis passer à la nouvelle URL à l'aide de quelque chose comme:

<*>GET['catid'] will be '3'

PHP vous fournit un $ _GET global qui contient votre chaîne de requête parfaitement analysée en éléments

<*>

etc

Vous pouvez désélectionner ceux que vous ne voulez pas transmettre, puis passer à la nouvelle URL à l'aide de quelque chose comme:

<*>GET['sort'] will be 'date'

PHP vous fournit un $ _GET global qui contient votre chaîne de requête parfaitement analysée en éléments

<*>

etc

Vous pouvez désélectionner ceux que vous ne voulez pas transmettre, puis passer à la nouvelle URL à l'aide de quelque chose comme:

<*>GET['year'] will be '2009'

etc

Vous pouvez désélectionner ceux que vous ne voulez pas transmettre, puis passer à la nouvelle URL à l'aide de quelque chose comme:

<*>GET, array_keys(

PHP vous fournit un $ _GET global qui contient votre chaîne de requête parfaitement analysée en éléments

PHP vous fournit un $ _GET global qui contient votre chaîne de requête parfaitement analysée en éléments

<*>

etc

Vous pouvez désélectionner ceux que vous ne voulez pas transmettre, puis passer à la nouvelle URL à l'aide de quelque chose comme:

<*>GET['catid'] will be '3'

PHP vous fournit un $ _GET global qui contient votre chaîne de requête parfaitement analysée en éléments

<*>

etc

Vous pouvez désélectionner ceux que vous ne voulez pas transmettre, puis passer à la nouvelle URL à l'aide de quelque chose comme:

<*>GET['sort'] will be 'date'

PHP vous fournit un $ _GET global qui contient votre chaîne de requête parfaitement analysée en éléments

<*>

etc

Vous pouvez désélectionner ceux que vous ne voulez pas transmettre, puis passer à la nouvelle URL à l'aide de quelque chose comme:

<*>GET['year'] will be '2009'

etc

Vous pouvez désélectionner ceux que vous ne voulez pas transmettre, puis passer à la nouvelle URL à l'aide de quelque chose comme:

<*>GET)); unset($get['sort']); $url = 'target.php?' . http_build_query($get);

etc

Vous pouvez désélectionner ceux que vous ne voulez pas transmettre, puis passer à la nouvelle URL à l'aide de quelque chose comme:

<*>GET['catid'] will be '3'

PHP vous fournit un $ _GET global qui contient votre chaîne de requête parfaitement analysée en éléments

<*>

etc

Vous pouvez désélectionner ceux que vous ne voulez pas transmettre, puis passer à la nouvelle URL à l'aide de quelque chose comme:

<*>GET['sort'] will be 'date'

PHP vous fournit un $ _GET global qui contient votre chaîne de requête parfaitement analysée en éléments

<*>

etc

Vous pouvez désélectionner ceux que vous ne voulez pas transmettre, puis passer à la nouvelle URL à l'aide de quelque chose comme:

<*>GET['year'] will be '2009'

etc

Vous pouvez désélectionner ceux que vous ne voulez pas transmettre, puis passer à la nouvelle URL à l'aide de quelque chose comme:

<*>

Si vous voulez dire que vous aimeriez que le lien vers la page 3 ne soit que

index.php?page=3

ou un lien pour changer de méthode de tri ne serait que

index.php?sort=date

Vous devez stocker les autres variables dans les variables de session . (ou des cookies, si vous souhaitez qu'ils persistent plus longtemps).

Quelque chose comme ça:

<?php

  session_start();

  foreach(

Si vous voulez dire que vous aimeriez que le lien vers la page 3 ne soit que

index.php?page=3

ou un lien pour changer de méthode de tri ne serait que

index.php?sort=date

Vous devez stocker les autres variables dans les variables de session . (ou des cookies, si vous souhaitez qu'ils persistent plus longtemps).

Quelque chose comme ça:

<*>GET as $var => $val) { // filter any malicious stuff and invalid variables out of $var and $val here // like if (in_array($var, $array_of_valid_variable_names)) { if ($var == 'page') $val = intval($val);

Si vous voulez dire que vous aimeriez que le lien vers la page 3 ne soit que

index.php?page=3

ou un lien pour changer de méthode de tri ne serait que

index.php?sort=date

Vous devez stocker les autres variables dans les variables de session . (ou des cookies, si vous souhaitez qu'ils persistent plus longtemps).

Quelque chose comme ça:

<*>SESSION[$var] = $val; } } // do stuff based on the values stored in

Si vous voulez dire que vous aimeriez que le lien vers la page 3 ne soit que

index.php?page=3

ou un lien pour changer de méthode de tri ne serait que

index.php?sort=date

Vous devez stocker les autres variables dans les variables de session . (ou des cookies, si vous souhaitez qu'ils persistent plus longtemps).

Quelque chose comme ça:

<*>SESSION echo '<a href="index.php?page='.(

Si vous voulez dire que vous aimeriez que le lien vers la page 3 ne soit que

index.php?page=3

ou un lien pour changer de méthode de tri ne serait que

index.php?sort=date

Vous devez stocker les autres variables dans les variables de session . (ou des cookies, si vous souhaitez qu'ils persistent plus longtemps).

Quelque chose comme ça:

<*>SESSION['page'] + 1).'">Next page</a>'; ?>

Bien que la plupart des solutions présentées ici fonctionnent, je pense que le moyen le plus simple de le faire sera

// parse query string into an array
$queryData = array();
parse_str(

Bien que la plupart des solutions présentées ici fonctionnent, je pense que le moyen le plus simple de le faire sera

<*>

C'est ça. Veuillez consulter la documentation sur http_build_query () et parse_str () (c'est l'une de ces fonctions dont le nom était completey foiré - personne ne s’attend à ce que la fonction fasse ce qu’elle fait en regardant le nom).

SERVER['QUERY_STRING'], $queryData); /* * ... manipulate array $queryData */ // rebuild query string $queryString = http_build_query($queryData, null, '&amp;'); // or use & if you don't need XHTML compliance

C'est ça. Veuillez consulter la documentation sur http_build_query () et parse_str () (c'est l'une de ces fonctions dont le nom était completey foiré - personne ne s’attend à ce que la fonction fasse ce qu’elle fait en regardant le nom).

J'ai eu exactement le même problème avec un général "construisez-moi une table triable et paginable" classe. C'est pourquoi quelqu'un a inventé des sous-procédures appelées "fonctions". en php.

Vous devez créer une fonction qui gère exactement le processus de création de liens. comme si:

/**
* $set: associative array of changing vars
* $unset : normal array of vars to delete
**/
function get_link($set,$unset=array())
{
 $set+=

J'ai eu exactement le même problème avec un général "construisez-moi une table triable et paginable" classe. C'est pourquoi quelqu'un a inventé des sous-procédures appelées "fonctions". en php.

Vous devez créer une fonction qui gère exactement le processus de création de liens. comme si:

<*>

CODE INATTENDU! Utilisez votre cerveau

ou vous pouvez utiliser $ _SESSION-vars pour le pagination et le tri (un 'matos) et avoir des liens qui ne changent que ceux (ce que je fais le plus souvent de nos jours)

GET; if ($unset && is_array($unset)) foreach($unset as $idx) unset($set[$idx]); if ($set) foreach($set as $name=>$value) $pairs[]=$name.'='.urlencode($value); return

J'ai eu exactement le même problème avec un général "construisez-moi une table triable et paginable" classe. C'est pourquoi quelqu'un a inventé des sous-procédures appelées "fonctions". en php.

Vous devez créer une fonction qui gère exactement le processus de création de liens. comme si:

<*>

CODE INATTENDU! Utilisez votre cerveau

ou vous pouvez utiliser $ _SESSION-vars pour le pagination et le tri (un 'matos) et avoir des liens qui ne changent que ceux (ce que je fais le plus souvent de nos jours)

SERVER['SCRIPT_NAME']."?".join('&',$pairs); }

CODE INATTENDU! Utilisez votre cerveau

ou vous pouvez utiliser $ _SESSION-vars pour le pagination et le tri (un 'matos) et avoir des liens qui ne changent que ceux (ce que je fais le plus souvent de nos jours)

Ajoutez le nom de la variable et la valeur à la fin de la chaîne de requête (en modifiant la page en 3):

index.php?catid=3&sort=date&year=2009&page=2&x=page&y=3

Ensuite, après avoir extrait $ _GET, utilisez une fonction simple pour vérifier si x et y sont définis.

Si tel est le cas, définissez la variable dont le nom est contenu dans x sur la valeur y.

Vous pouvez utiliser le même lien partout avec un simple ajout à la fin et la quantité de programmation est minimale.

Ne gérez pas directement la chaîne, mais gérez-en une représentation sous forme de tableau (clé = > valeur) et traduisez-la uniquement en chaîne si nécessaire.

Une façon de le faire:

function explodeQueryString( $queryString )
{
    $parts = array();
    if ( strlen( $queryString ) > 1 && substr( $queryString, 0, 1 ) == '?' )
    {
        $q = explode( '&', substr( $queryString, 1 ) );
        foreach( $q as $part )
        {
            list( $key, $value ) = explode( '=', $part );
            $parts[ urldecode( $key ) ] = urldecode( $value );
        }
    }
    return $parts;
}

function implodeQueryString( array $arguments )
{
    $parts = array();
    foreach( $arguments as $key => $value )
    {
        $parts[ ] = sprintf( '%s=%s', urlencode( $key ), urlencode( $value ) );
    }
    return sprintf( '?%s', implode( '&', $parts ) );
}

// $query = 

Ne gérez pas directement la chaîne, mais gérez-en une représentation sous forme de tableau (clé = > valeur) et traduisez-la uniquement en chaîne si nécessaire.

Une façon de le faire:

<*>GET; $query = '?something=1&somethingelse=2&page=1&yetsomethingelse=3'; $q = explodeQueryString( $query ); print_r( $q ); $q[ 'page' ] += 1; $query = implodeQueryString( $q ); echo $query;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top