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 :

incompréhension de strpos


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 40
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !!

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Bonjour,
    strpos() ne renvoie que false si la correspondance n'est pas trouvée et un numérique dans l'autre cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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...

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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é.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    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.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 40
    Par défaut
    Citation Envoyé par grunk Voir le message
    C'est pas par précaution , c'est même obligatoire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !!

  6. #6
    Membre chevronné
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    397
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 397
    Par défaut
    Bonjour,

    ce comportement est normal car :

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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é

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

Discussions similaires

  1. messages incompréhensibles
    Par devalender dans le forum Outils
    Réponses: 2
    Dernier message: 06/07/2004, 16h53
  2. incompréhension avec ado
    Par Orgied dans le forum Bases de données
    Réponses: 3
    Dernier message: 19/05/2004, 18h24
  3. [WSAD5] probleme incompréhensible
    Par capitaine_banane dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 07/04/2004, 11h56
  4. [JSP] Erreur incompréhensible
    Par xxaragornxx dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 09/09/2003, 16h37
  5. [sous-chaine] Avec strpos ou substring ??
    Par terziann dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 17/07/2003, 15h28

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