[RESOLU] comment tester la présence de 2 valeurs

Eléphant du PHP | 62 Messages

12 févr. 2015, 16:15

Bonjour,

Je veux tester la présence du mot "mot1" et la présence du mot "mot2" dans une url $_SERVER["REQUEST_URI"] pour écrire une condition.

J'ai écrit

Code : Tout sélectionner

$url = '$_SERVER["REQUEST_URI"]'; if (false !== strpos($url,'collier')) {
Pour l'instant ça ne teste que la présence du mot collier dans l'url mais je voudrait que cela teste la présence du mot "collier" + le mot "dreissage" même si ces 2 mots ne sont pas l'un à côté de l'autre

Comme je peux faire ?

Merci pour votre aide

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

12 févr. 2015, 16:47

Hello !

Il suffit de mettre deux conditions dans ton if :)
$url = $_SERVER["REQUEST_URI"];
if (strpos($url, 'collier')!==false && strpos($url, 'dreissage')!==false) {

}
Ainsi la condition du if() n'est vraie que si la chaîne contient "collier" (en minuscule) ET contient "dreissage" (en minuscule)



EDIT : attention d'ailleurs à ton code, tu as des apostrophes en trop autour de $_SERVER["REQUEST_URI"] :
$url = '$_SERVER["REQUEST_URI"]'; // la variable $url contient le texte $_SERVER["REQUEST_URI"] en toutes lettres

$url = $_SERVER["REQUEST_URI"]; // la variable $url contient la valeur retournée par $_SERVER["REQUEST_URI"] (et donc l'url de la page demandée)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 62 Messages

12 févr. 2015, 17:08

Au départ je testai la présence de la valeur ml de cette manière car je testai si l'internaute venait de ma mailing list

Code : Tout sélectionner

if(isset($_GET['ml'])){
Est ce que je peux ajouter ta syntaxe

Code : Tout sélectionner

$url = $_SERVER["REQUEST_URI"]; if (strpos($url, 'collier')!==false && strpos($url, 'dreissage')!==false) { }
c'est à dire tester en plus la présence de ml dans le GET

Comment je peux l'écrire à utilisant le tout c'est à dire tester la présence de collier et de dreissage et la présence du ml dans le GET

Merci beaucoup pour ta réponse et l'aide que tu pourra m'apporter

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

12 févr. 2015, 17:20

Tu as deux solutions :

- Soit tu passes par des conditions imbriquées (un if dans un if) :
if (isset($_GET['ml'])) { 
   // si le paramètre "ml" est passé en get dans l'url
   $url = $_SERVER["REQUEST_URI"];
   if (strpos($url, 'collier')!==false && strpos($url, 'dreissage')!==false) {
      // si l'url contient "collier" ET l'url contient "dreissage"

   }
}
- Soit tu ajoutes d'autres conditions dans ton if, en utilisant les opérateurs appropriés ( && pour un ET, || pour un OU, etc.) :
$url = $_SERVER["REQUEST_URI"];
if (isset($_GET['ml']) && strpos($url, 'collier')!==false && strpos($url, 'dreissage')!==false) {
   // si le paramètre "ml" est passé en get dans l'url ET l'url contient "collier" ET l'url contient "dreissage"
}
Le choix se fait en général en fonction du besoin d'avoir un ELSE ou non pour les différents IF, de la lisibilité et de la compréhension du code (le 2nd est plus court, mais le premier est découpé selon une logique métier, donc peut être plus facile à relire dans 3 mois si tu as besoin de corriger quelque chose) et surtout du confort et de ce qui te parait le plus clair à maintenir quand tu reviendras dessus dans 6 mois pour ajouter une nouvelle fonctionnalité ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 62 Messages

12 févr. 2015, 18:42

ça marche !

Merci beaucoup pour ton aide