IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Remplacement d'une chaine (contenue dans une autre) par une nouvelle chaine [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre habitué Avatar de lolymeupy
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2006
    Messages : 402
    Points : 180
    Points
    180
    Par défaut Remplacement d'une chaine (contenue dans une autre) par une nouvelle chaine
    Bonjour,
    je cherche un coup de main pour une regex qui permettrait de remplacer une chaine variable contenue dans une autre.
    En fait, j'ai cette chaine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SERVER['QUERY_STRING']
    qui correspond aux arguments passés dans mon url.
    Et je voudrais (après avoir testé que le paramètre mois existe bien, et donc que la chaine : mois=7(par exemple) est bien dans l'url) la remplacer par
    Et le problème supplémentaire, c'est que la chaine à remplacer n'est pas fixe, elle peut etre égale à :
    mois=1
    mois=2
    etc...jusqu'à :
    mois=12

    En gros, si (isset($_GET['mois']) (et donc 'mois=quelque-chose' est bien dans $_SERVER['QUERY_STRING'] ), alors il faut pouvoir remplacer la valeur du parametre mois par la valeur que je désire...
    Je sais pas si je suis très clair (), mais pour simplifier encore +, c'est tester si 'mois=1' ou 'mois=2' ou 'mois=3' ou 'mois=4' ou 'mois=5' ou 'mois=6' ou 'mois=7' ou 'mois=8' ou 'mois=9' ou 'mois=10' ou 'mois=11' ou 'mois=12' sont dans une chaine donnée, et si c'est le cas je veux la remplacer par 'mois='.$i
    Merci d'avance pour votre aide

  2. #2
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 557
    Points
    557
    Par défaut
    et tu veux remplacer ca dans quelle chaîne? dans QUERY_STRING?
    perso je n'irais pas vers les regexp, mais plutot vers un parcours du tableau $_GET, pour terminer par un implode de celui-ci pour refaire le QUERY_STRING.

    Idée (vite fait):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?php
    $i = ...;
    $query_string = '';
    $query_array = $_GET; // pour ne pas toucher au tableau d'origine
    if (isset($query_array['mois']) && <conditions supplémentaires>) {
      $query_array['mois'] = $i;
    }
    foreach ($query_string as $key => $val) {
      $query_string.=$key . '=' . $val .'&';
    }
    ?>
    tu te retrouves donc avec une chaine $query_string qui contient tous les params d'origine sauf le mois qui sera remplacé par $i.
    Merci à Microsoft pour avoir transformé un métier relativement terne et basé sur une approche bêtement technique et rigoureuse des faits, en challenge quotidien, nécessitant une remise en question permanente à l'échelle du quart d'heure

  3. #3
    Membre habitué Avatar de lolymeupy
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2006
    Messages : 402
    Points : 180
    Points
    180
    Par défaut
    Merci bkill
    Par contre, est-ce que tu peux m'aider sur la partie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $query_string = '';
    $query_array = $_GET; // pour ne pas toucher au tableau d'origine
    if (isset($query_array['mois'])) {
    $query_array['mois'] = $i;
    }
    foreach ($query_string as $key => $val) {
    $query_string.=$key . '=' . $val .'&';
    }
    parce qu'il ne construit pas $query_string...Il n'y a rien dedans...
    Merci de ton aide

    (Sinon, merci aussi ddong, mais http_build_query sert apparement quand on veut construire l'url de A à Z, et moi je ne veux que modifier un des paramètres...et comme les autres paramètres dans l'url seront aléatoires, je ne veux pas casser toute l'url, et ça sans connaitre les noms ou valeurs des autres paramètres...
    Merci quand même)

  4. #4
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 868
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 868
    Points : 16 258
    Points
    16 258
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach ($query_string as $key => $val) {

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach ($query_array as $key => $val) {
    Non ?

  5. #5
    Membre habitué Avatar de lolymeupy
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2006
    Messages : 402
    Points : 180
    Points
    180
    Par défaut
    En fait, je viens de voir ce qui clochait...
    Y'avait un "bug" dans le foreach :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach ($query_array as $key => $val) {
    $query_string.=$key . '=' . $val .'&';
    }
    Ca marche nickel maintenant.

    Et juste pour précision, j'ai rajouté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query_string = substr($query_string, 0, -1);
    pour enlever le & rajouté en fin d'url (ça avais pas l'air de gêné, mais on sait jamais...)

    Merci encore bkill

  6. #6
    Membre habitué Avatar de lolymeupy
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2006
    Messages : 402
    Points : 180
    Points
    180
    Par défaut
    Je viens seulement de voir ton message Bisûnûrs, donc oui, c'était bien le problème...

  7. #7
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 868
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 868
    Points : 16 258
    Points
    16 258
    Par défaut
    Pour t'éviter de faire un substr à la fin, tu peux aussi faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $separateur = '';
    foreach ($query_array as $key => $val) {
       $query_string.= $separateur . $key . '=' . $val;
       $separateur = '&';
    }

  8. #8
    Membre habitué Avatar de lolymeupy
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2006
    Messages : 402
    Points : 180
    Points
    180
    Par défaut
    Ok. Je te remercie pour la précision Bisûnûrs

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/06/2011, 10h02
  2. Réponses: 4
    Dernier message: 16/06/2011, 10h02
  3. Réponses: 0
    Dernier message: 12/02/2010, 16h03
  4. [C#] Recuperer un chaine contenu dans un SubItems d'une Listview
    Par superjaja dans le forum Windows Forms
    Réponses: 2
    Dernier message: 30/11/2006, 15h30
  5. [VBA] utiliser une macro contenue dans un autre classeur
    Par laloune dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 01/02/2006, 18h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo