Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/11/2011, 18h32   #1
Membre habitué
 
Inscription : mai 2004
Messages : 383
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 383
Points : 129
Points : 129
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 :
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.
defacta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 18h38   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 173
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 173
Points : 8 547
Points : 8 547
pourquoi toujours des regexp ?

pour parser une url c'est parse_url, ensuite un explode fera l'affaire
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 21h54   #3
Membre habitué
 
Inscription : mai 2004
Messages : 383
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 383
Points : 129
Points : 129
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 :
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.
defacta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 22h46   #4
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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 :
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.
julp est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/11/2011, 08h42   #5
Membre habitué
 
Inscription : mai 2004
Messages : 383
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 383
Points : 129
Points : 129
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.
defacta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 09h21   #6
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 722
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 722
Points : 3 293
Points : 3 293
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]
RunCodePhp est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 09h31   #7
Modérateur
 
Inscription : septembre 2010
Messages : 7 173
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 173
Points : 8 547
Points : 8 547
pourquoi ne pas utiliser une adresse classique ?

Code :
http://monsite.com/lespages?a=b_pd&bp=429&w=btheme
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 10h37   #8
Membre habitué
 
Inscription : mai 2004
Messages : 383
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 383
Points : 129
Points : 129
Citation:
Envoyé par stealth35 Voir le message
pourquoi ne pas utiliser une adresse classique ?

Code :
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 :
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.
defacta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 10h53   #9
Membre habitué
 
Inscription : mai 2004
Messages : 383
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 383
Points : 129
Points : 129
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...
defacta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 11h01   #10
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 722
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 722
Points : 3 293
Points : 3 293
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]
RunCodePhp est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h47.


 
 
 
 
Partenaires

Hébergement Web