Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
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 02/01/2012, 11h39   #1
Invité régulier
 
Homme
Inscription : août 2011
Messages : 39
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : août 2011
Messages : 39
Points : 6
Points : 6
Par défaut incompréhension de strpos

Bonjour à tous,

voilà, cela va faire quelques heures que je m'arrache les cheveux sur un problème tout bête !!!

je souhaite, dans la cas ou le domaine du visiteur contient une certaine chaîne de caractères, le rediriger vers une page spécifique :

Code :
1
2
3
4
5
6
7
8
 
//$host = gethostbyaddr($ip); commenté pour les essais
$host = 'fhjkfdsqf.fdsqfds.qsdfdsf-test-345';
 
$domaine = 'test';
if (strpos($host, $domaine) === true) header('Location: index_test.php');
 
header('Location: index_page.php');

et bien ce code ne fonctionne pas !!! et je suis renvoyé vers index_page.php

Pourquoi ???? Merci de votre aide !!
Le_pouetch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 11h45   #2
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
Bonjour,
strpos() ne renvoie que false si la correspondance n'est pas trouvée et un numérique dans l'autre cas :
Code :
1
2
3
4
5
6
if (strpos($host, $domaine) === false) {
   header('Location: index_page.php');
}
else {
   header('Location: index_test.php');
}
Et puis dans ton cas, je te conseillerais de toujours faire proprement tes if/else. Sinon tu vas avoir un jour des surprises. Comme là. Et puis par précaution une fois le header() passé, je te conseille fortement de faire un exit; histoire de ne pas récupérer autre chose...
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 11h49   #3
Membre éprouvé
 
Développeur Web
Inscription : avril 2005
Messages : 395
Détails du profil
Informations personnelles :
Âge : 28

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2005
Messages : 395
Points : 479
Points : 479
Bonjour,

ce comportement est normal car :

Citation:
int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
Retourne la position numérique de la première occurrence de needle dans la chaîne de caractères haystack
Si "test" est bien présent dans la chaîne alors un index (chiffre) est renvoyé et un chiffre est toujours strictement différent de true.

Tu devrais écrire plutôt :

Code :
if (strpos($host, $domaine) !== false)
Cela te permet de vérifier que test est bien présent quelque soit son placement dans la chaîne.

PS : Bon bah le temps de rédiger mon texte j'ai été devancé
__________________
Zend PHP5 Certification
MySQL 4 Core Certification
Gats est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 13h43   #4
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 318
Points : 3 318
Citation:
Envoyé par rawsrc Voir le message
Et puis par précaution une fois le header() passé, je te conseille fortement de faire un exit; histoire de ne pas récupérer autre chose...
C'est pas par précaution , c'est même obligatoire.

Code :
1
2
3
if (strpos($host, $domaine) === true) header('Location: index_test.php');
 
header('Location: index_page.php');
Dans ton cas, même si tu rentre dans le if , comme tu n'as pas de exit après ton header , c'est le deuxième que tu vois.

En gros tu es redirigé une première fois , sur la bonne page , puis instantanément sur l'autre car le code n'a pas été stoppé.
grunk est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 02/01/2012, 14h01   #5
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
Citation:
Envoyé par grunk Voir le message
C'est pas par précaution , c'est même obligatoire.
L'obligation depend surtout de la manière dont le flux de traitement du code php est agencé.
Si c'est bien fait, le renvoi des headers se fait qu'en tout dernier traitement, donc en général les headers ne seront jamais suivis de choses indésirées.
Mais je te l'accorde bien volontiers, il est quasiment obligatoire de poser un exit; après un header('Location: ...'); ne serait-ce que pour éviter de longues séances de débogage.
Merci pour la précison.
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 14h11   #6
Invité régulier
 
Homme
Inscription : août 2011
Messages : 39
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : août 2011
Messages : 39
Points : 6
Points : 6
Citation:
Envoyé par grunk Voir le message
C'est pas par précaution , c'est même obligatoire.

Code :
1
2
3
if (strpos($host, $domaine) === true) header('Location: index_test.php');
 
header('Location: index_page.php');
Dans ton cas, même si tu rentre dans le if , comme tu n'as pas de exit après ton header , c'est le deuxième que tu vois.

En gros tu es redirigé une première fois , sur la bonne page , puis instantanément sur l'autre car le code n'a pas été stoppé.
youpi !!

c'est exactement ce qui se passé !!! grande classe !!

merci à vous tous !!
Le_pouetch est dé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 03h36.


 
 
 
 
Partenaires

Hébergement Web