Soucis sur une condition "or"

WRInaute passionné
Bonjour,

Je tente de remplacer des liens présent dans un texte (variable) pour leurs attribuer un "nofollow" sous condition que l'url ne soit pas celle de mon domaine ou de mon sous-domaine.
Code:
<?php
//Mon texte
$chaine = 'Ici mon texte avec quelques liens.';
//on créé un masque
$motif='#<a href="(.*?)"(.*?)>#is';
//on cherche les urls
preg_match_all($motif,$chaine,$out,PREG_PATTERN_ORDER);
//on boucle pour sortir toutes les url de $chaine
foreach ($out[1] as $link) {
//on parse chaque url pour trouver le host
$aze = parse_url($link);
//si le host est différent, on remplace
if($aze[host]!="mon-domaine.fr" OR $aze[host]!="sousdomaine.mon-domaine.fr"){
$chaine=str_replace('<a href="'.$link.'','<a rel="nofollow" href="'.$link.'',$chaine);
}
}
echo $chaine;
?>

En supprimant la condition
Code:
 OR $aze[host]!="http://sousdomaine.mon-domaine.fr"
tout fonctionne comme je le souhaite.

Pourquoi la seconde condition "fou le bordel" et comment y remédier svp?
Merci
 
WRInaute discret
OR c'est pour sql. Pour php, il faut la remplacer par "||" même si une condition (a != 1 ou b != 2) est complètement fausse car toujours valable. Tu ne crois pas que c'est plutot ET qu'il te faut (&& en php) ?
 
WRInaute passionné
Merci jamalofski mais j'avais déjà testé et ça me retourne du nofollow partout ... ce que je ne comprend pas !!
 
WRInaute passionné
Rectificatif, ça fonctionne si la condition est remplacé par && ou AND . Merci bien jamalofski ;) .

Par contre, je ne comprend pas pourquoi la condition || ou OR est fausse ? L'un comme l'autre signifie bien "ou", ce qui donne en version traduite :
Si "domaine" est différent de "mon-domaine.fr" OU si domaine est différent de "sousdomaine.mon-domaine.fr -> remplace X par Y .
 
WRInaute discret
c'est tres simple : une variable ne peut avoir deux valeurs à la fois. OR veut dire que si une seule des deux conditions est valable alors on execute la suite.

exemple : si la condition est (x !=1 ou x != 2)

si x = 1 alors la deuxième condition est valable donc on exécute la suite.
si x = 2 alors la première condition est valable donc on exécute la suite.
si x = 3 alors x != 1 et x != 2 donc on exécute la suite.

Tu remarques qu'on execute la suite quelque soit la valeur de x. Car ta condition est fausse.

Si mnt tu met le ET, cela veut dire que les deux conditions doivent etre valables.

si x = 1 alors la deuxième condition est valable mais c'est pas le cas pour la première alors on n'exécute pas la suite.
si x = 2 alors la première condition est valable mais c'est pas le cas pour la deuxième alors on n'exécute pas la suite.
si x = 3 alors x != 1 et x != 2 donc on exécute la suite.

J'espère que c'est clair!
 
WRInaute discret
intéressant! Enfin, il faut que je comprenne déjà la différence entre une variable qui est égale à true et une une autre qui vaut true. Je crois que je commence à vieillir moi;(

Dans son cas, c'est sur que c'est "&&" qu'il lui faut et pas "and".
 
WRInaute passionné
Merci pour tes explications jamalofski :) . Je trouve parfois que ces opérateurs dit "logiques" sont un peut "couillu" dans leurs utilisations ^^.
 
Discussions similaires
Haut