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 :

Fabriquer des variables grâce à #


Sujet :

Langage PHP

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 551
    Points : 264
    Points
    264
    Par défaut Fabriquer des variables grâce à #
    Salut,

    J'aimerais fabriquer des variables à partir de ce qu'il y a près # de l'url, exemple d'url que j'ai dans une variable:
    $url = "http://monsite.com/lespages/#/a/b_pd/bp/429/w/btheme"
    Avec cette variable il me faudrait pouvoir fabriquer les variables suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $a = "b_pd" ;
    $bp = "429" ;
    $w = "btheme" ;
    Je peux utiliser les regexp pour ça ? Je ne m'y connais pas trop en regexp, quelqu'un peut m'aider ?

    Merci,
    Vincent.

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    pourquoi toujours des regexp ?

    pour parser une url c'est parse_url, ensuite un explode fera l'affaire

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 551
    Points : 264
    Points
    264
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    pourquoi toujours des regexp ?

    pour parser une url c'est parse_url, ensuite un explode fera l'affaire
    Salut,

    Oui, explode est suffisant, par contre, je n'arrive pas à récupérer ce qu'il y a dans l'url après le #. J'ai l'impression d'avoir tout essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo $_SERVER["SCRIPT_URI"]; 
    echo $_SERVER['HTTP_REFERER'] ;
    echo $_SERVER['REQUEST_URI'] ;
    Aucun de ses echo ne me sort ce qu'il y a dans l'url après # ! Elle ressemble à ça:
    http://localhost/pages/#/a/b_pd/bp/429/w/btheme

    C'est possible ?

    merci,
    Vincent.

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Citation Envoyé par defacta Voir le message
    par contre, je n'arrive pas à récupérer ce qu'il y a dans l'url après le #. J'ai l'impression d'avoir tout essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo $_SERVER["SCRIPT_URI"]; 
    echo $_SERVER['HTTP_REFERER'] ;
    echo $_SERVER['REQUEST_URI'] ;
    Aucun de ses echo ne me sort ce qu'il y a dans l'url après # ! Elle ressemble à ça:
    http://localhost/pages/#/a/b_pd/bp/429/w/btheme

    C'est possible ?
    Non et c'est normal : une ancre n'est pas transmise au serveur, elle n'est destinée qu'au client.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 551
    Points : 264
    Points
    264
    Par défaut
    D'après ce que j'ai pu lire, il n'est pas possible de récupérer ce qu'il y a après # en php car ce n'est pas envoyé au serveur.

    Donc, la solution que j'ai trouvé passe par Javascript et faire une redirection si window.location.hash.length est supérieur à 2 en construisant les variables avec split de javascript qui est l'équivalent d'explode en PHP.

  6. #6
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Citation Envoyé par defacta Voir le message
    Donc, la solution que j'ai trouvé passe par Javascript et faire une redirection
    Je doute que ce soit la bonne solution dans ce cas présent.

    Il faut comprendre que ce caractère # dans une URL est particulier, c'est en quelque sorte une spécification du Web.
    Tout ce qui précède le # est liée à une ancre, et ceci permet au navigateur de se positionner exactement où ce trouve cette ancre dans la page.
    C'est cela qui permet de remonter par exemple tout en haut de page en 1 clic, donc sans toucher à l'ascenseur (barre de défilement).

    Bref, c'est fait pour indiquer la position d'un contenu dans le corps de la page.
    Recherche des infos concernant les ancres au besoin.


    Dans ton cas toutes ces infos qui précède le # correspondraient à une autre page, un autre contenu.
    Par conséquent il ne faudrait pas utiliser ce #, mais un autre caractère (ou séquence) qui cette fois pourra être exploitée coté serveur et te permettre de rechercher le bon contenu, et le renvoyer tout de suite, ceci sans redirection.

    En passant par du JS + redirection, tu fais perdre du temps aux utilisateurs (un aller/retour client/serveur de trop), ça va augmenter de manière indirecte le trafic coté serveur, donc les ressources aussi.


    Revois peut être ce point, voir aussi la réécriture.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    pourquoi ne pas utiliser une adresse classique ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://monsite.com/lespages?a=b_pd&bp=429&w=btheme

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 551
    Points : 264
    Points
    264
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    pourquoi ne pas utiliser une adresse classique ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://monsite.com/lespages?a=b_pd&bp=429&w=btheme
    En fait, ce n'est pas toute la page qui est rechargée, je fait un site ou les gens passent d'une page à l'autre d'un livre, donc je ne change dynamiquement en Javascript (qui fait une requete dans une iframe en php) que la partie du texte, un peu comme twitter...

    Ce qui compte avant tout c'est la qualité de navigation d'une page à l'autre, si lors d'un partage d'une page on passe par une redirection, c'est pas très grave...

    Pour ceux que ça intéresse, juste après le <body>:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <script>
    if(window.location.hash.length > 2) {
      var url = window.location.hash ;
      url = url.substr(2) ;
      var a = url.split('/') ;
      var i = 0 ; var goto_url = '".curPageURL()."' ;
      var goto_url = goto_url.substring(0, goto_url.indexOf('?', 0)) + '?' ;
      while(a[i]) { goto_url = goto_url + a[i] + '=' + a[++i] ; if(a[(i+1)]) goto_url = goto_url + '&' ; i++}
      window.location = goto_url ;
    }
    </script>
    Et le lien
    http://monsite/book.php?bp=456#/bp/455
    va devenir
    http://monsite/book.php?bp=455

    Donc, la personne est arrivé sur la page 456, elle va à la page 455 qu'elle souhaite envoyer par mail en copiant/collant l'url:
    La personne qui clique sur http://monsite/book.php?bp=456#/bp/455 ne va pas se retrouver à la page 456 mais à la page 455.

    Voila

    redirection testée sous firefox, safari, opera, chrome, IE 7 et 9.

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 551
    Points : 264
    Points
    264
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    En passant par du JS + redirection, tu fais perdre du temps aux utilisateurs (un aller/retour client/serveur de trop), ça va augmenter de manière indirecte le trafic coté serveur, donc les ressources aussi.
    Sauf qu'en faisant une requête qui permet de ne charger que le texte de la page suivante ou précédente utilise beaucoup moins de ressource que de recharger toute la page et c'est plus agréable au niveau visuel.

    En plus la redirection n'est utilisée que dans le cas d'un partage de lien, ce qui est rare par rapport à la navigation classique...

  10. #10
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    A titre personnel, quand j'ai besoin de changer un contenu dans une partie d'une page sans recharger la page, j'utilise de l'Ajax (jQuery en autre).

    Les iframe, c'est un peu de l'histoire ancienne.
    A part rares exceptions comme vouloir intégrer une autre page Web dans sa page (ou un PDF, etc ...), pourquoi pas, mais normalement ce n'est pas conforme W3C.
    Ceci dit, chacun fait comme il veut.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 19/12/2013, 11h32
  2. Réponses: 4
    Dernier message: 15/12/2002, 04h19
  3. Gestion des variables - mémoire ?
    Par RIVOLLET dans le forum Langage
    Réponses: 4
    Dernier message: 26/10/2002, 12h44
  4. [VB6] [Fichier] Enregistrer des variables de structure
    Par de.bo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 07/10/2002, 11h09
  5. Réponses: 4
    Dernier message: 18/07/2002, 13h32

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