Emploi de strstr + else

dudo
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 456
Inscription: 10 Jan 2004

Emploi de strstr + else

Message le Jeu Avr 29, 2010 16:22

Bonjour,

j'ai une petite question sur l'emploi de strstr,
je ne comprends pas pourquoi mon écriture ligne 2
ne fonctionne pas alors que c'est parfait en ligne 1 ?

Code: Tout sélectionner
/1/ OK
if($productUrl[5] == strstr($productUrl[5],'18975')) { $note="(vert)";}
else { $note="(rouge)";}

/2/ Ne fonctionne pas
if($productUrl[5] == strstr($productUrl[5],'18975')) { $note="(vert)";}
elseif ($productUrl[5] == strstr($productUrl[5],'99079')) { $note="(rouge)";}
else { $note="";}

merci ludo


Dr DLP
WRInaute impliqué
WRInaute impliqué
 
Messages: 673
Inscription: 28 Juin 2003

Re: Emploi de strstr + else

Message le Jeu Avr 29, 2010 17:12

Dépend ce que tu entends par "ne marche pas".

Je ne comprends pas du tout ton code surtout, je ne vois pas de condition dans laquelle
Code: Tout sélectionner
$productUrl[5] == strstr($productUrl[5],'18975')

peut être vraie en dehors de
Code: Tout sélectionner
$productUrl[5] == '18975'


Si tu pouvais dire ce que tu cherches à faire :)

dudo
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 456
Inscription: 10 Jan 2004

Re: Emploi de strstr + else

Message le Jeu Avr 29, 2010 17:40

Dr DLP a écrit:Dépend ce que tu entends par "ne marche pas".

Je ne comprends pas du tout ton code surtout, je ne vois pas de condition dans laquelle
Code: Tout sélectionner
$productUrl[5] == strstr($productUrl[5],'18975')

peut être vraie en dehors de
Code: Tout sélectionner
$productUrl[5] == '18975'


Si tu pouvais dire ce que tu cherches à faire :)


Je vérifie la présence ou non de 18975 au sein de la chaine $productUrl[5] s'il le trouve
affichage de $note corespondant, et ainsi de suite s'il trouve le chiffre suivant affichage du note correspondant,
puis si il ne trouve rien on affiche une variable $note vide

et c'est tout,


bilos
WRInaute impliqué
WRInaute impliqué
 
Messages: 946
Inscription: 11 Oct 2005

Re: Emploi de strstr + else

Message le Jeu Avr 29, 2010 17:40

Un peu curieux comme DR DLP :)

@dudo d'après ton code là où tu mentionne OK,
$note ne prend que rouge !

il parait que $productUrl[5] est l'url d'un produit ! Une url ne peut jamais contenir uniquement "18975" !

Donc la condition d'égalité est toujours fausse :)


bilos
WRInaute impliqué
WRInaute impliqué
 
Messages: 946
Inscription: 11 Oct 2005

Re: Emploi de strstr + else

Message le Jeu Avr 29, 2010 17:47

Désolé j'ai pas lu ta nouvelle réponse ! il faut que tu change ton code :)

Code: Tout sélectionner
if (preg_match("/18975/", $productUrl[5]){ $note="vert";} ...


Dr DLP
WRInaute impliqué
WRInaute impliqué
 
Messages: 673
Inscription: 28 Juin 2003

Re: Emploi de strstr + else

Message le Jeu Avr 29, 2010 17:55

Juste parce que j'aime être contrariant:
Code: Tout sélectionner
if (strpos($productUrl[5], '18975')){ $note="vert";}

sera plus rapide :mrgreen:

Ah oui, si tu analyses plusieurs résultats possibles, passe par un tableau pour éviter des conditions en boucle :)


bilos
WRInaute impliqué
WRInaute impliqué
 
Messages: 946
Inscription: 11 Oct 2005

Re: Emploi de strstr + else

Message le Jeu Avr 29, 2010 18:06

T'as raison Dr DLP :) Habitué par pregmatch pour plusieurs mots clés ... ;)

dudo
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 456
Inscription: 10 Jan 2004

Re: Emploi de strstr + else

Message le Jeu Avr 29, 2010 18:11

bilos a écrit:Désolé j'ai pas lu ta nouvelle réponse ! il faut que tu change ton code :)

Code: Tout sélectionner
if (preg_match("/18975/", $productUrl[5]){ $note="vert";} ...


Merci !
bon, avec preg_match ce n'est pas pire, pas mieux c'est à dire ok avec

if (preg_match("18975", $productUrl[5])) { $note="(vert)";} else { $note="(rouge)";}

mais inoperant sur
if (preg_match("18975", $productUrl[5])) { $note="(vert)";} elseif (preg_match("99079", $productUrl[5])) { $note="(rouge)";}
{ $note="(Nuitée/par personne)";}

dudo
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 456
Inscription: 10 Jan 2004

Re: Emploi de strstr + else

Message le Jeu Avr 29, 2010 18:52

bilos a écrit:T'as raison Dr DLP :) Habitué par pregmatch pour plusieurs mots clés ... ;)



Voilou, donc juste pour info, ni preg_match ou strposs ne fonctionne ce qui est bizarre, y compris dans le
second cas que je vous précise, j'ai repris mon code et recherchez le début d'une url et c'est ok,

if($productUrl[5] == strstr($productUrl[5],'http://www.tintin.com')) { $note="(vert)";}
elseif($productUrl[5] == strstr($productUrl[5],'http://www.kiki.com')) { $note="(rouge)";}


anemone-clown
WRInaute passionné
WRInaute passionné
 
Messages: 1277
Inscription: 11 Nov 2007

Re: Emploi de strstr + else

Message le Jeu Avr 29, 2010 18:53

Qu'est-ce qui marche et qu'est-ce qui ne fonctionne pas??? Quel test?

jcaron
WRInaute accro
WRInaute accro
 
Messages: 2685
Inscription: 13 Fév 2004

Re: Emploi de strstr + else

Message le Jeu Avr 29, 2010 19:10

Ton test ($toto == strstr($toto,'xxx')) n'est vrai que si $toto commence par xxx. Je ne pense pas du tout que ce soit ce que tu veux. Utilise effectivement strpos ou preg_match comme suggéré. Si ça ne fonctionne pas, c'est probablement que les variables que tu testes ne contiennent pas ce que tu penses.

Jacques.

dudo
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 456
Inscription: 10 Jan 2004

Re: Emploi de strstr + else

Message le Jeu Avr 29, 2010 19:47

jcaron a écrit:Ton test ($toto == strstr($toto,'xxx')) n'est vrai que si $toto commence par xxx. Je ne pense pas du tout que ce soit ce que tu veux. Utilise effectivement strpos ou preg_match comme suggéré. Si ça ne fonctionne pas, c'est probablement que les variables que tu testes ne contiennent pas ce que tu penses.

Jacques.


Je ne conteste pas l'utilisation de strpos ou preg_match comme suggéré, je dis que le 1er code
est viable dans ce cadre précis d'utilisation, que le contenu des variables est bien sûr vérifié et que je n'ai pas encore
trouvé pourquoi strpos ou preg_match ne fonctionne pas dans ce cadre, avec ci-dessous un code très proche
du code réel.

Code: Tout sélectionner
<?
$productUrl[5]='http://www.tintin.com/fr/coco';
if($productUrl[5] == strstr($productUrl[5],'http://www.tintin.com')) { $note="(vert)";}
elseif($productUrl[5] == strstr($productUrl[5],'http://www.kiki.com')) { $note="(rouge)";}

echo $note;


if  (strpos($productUrl[5],'http://www.tintin.com')) { $note="(vert)";}
elseif (strpos($productUrl[5],'http://www.kiki.com')) { $note="(rouge)";}

echo $note;

?>


bilos
WRInaute impliqué
WRInaute impliqué
 
Messages: 946
Inscription: 11 Oct 2005

Re: Emploi de strstr + else

Message le Jeu Avr 29, 2010 20:31

De retour au hackaton :)

@dudo peux-tu nous envoyer le format de la chaine que $productUrl[5] est censé contenir !
et avant de poster ta réponse fais un print_r($productUrl[5]);

Dans la suite je vais supposer que $productUrl[5] est de la forme : "ht*tp://tonsite.com/tapage-1555.html "
Voilà ce que tu dois faire :

Code: Tout sélectionner
preg_match('/([0-9]+)\.html/', $productUrl, $val);
$n = $val[1];

switch ($n) {
    case "18975":
        $note = "vert";
        break;
    case "99079":
        $note = "rouge";
        break;
    default:
       $note = "(Nuitée/par personne)";
}


Sinon si tes adresses ne contiennent qu'un seul numéro tu peux simplement remplacer le Regex par :

Code: Tout sélectionner
preg_match('{(\d+)}', $productUrl, $val);

jcaron
WRInaute accro
WRInaute accro
 
Messages: 2685
Inscription: 13 Fév 2004

Re: Emploi de strstr + else

Message le Jeu Avr 29, 2010 21:10

Ton test avec strpos ne fonctionne pas parce que la chaîne que tu cherches est au début de la chaîne que tu examines, donc strpos renvoie 0. Il faut donc utiliser === false pour tester si ça n'y est pas (ou === 0 pour vérifier que la chaîne recherchée est bien au début).

Perso, j'utiliserais un preg_match ancré (avec un ^ au début de la regex). Evidemment il faut faire attention à escaper les caractères spéciaux (en particulier le . et éventuellement le / si tu l'utilises comme délimiteur).

Jacques.


Titan
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 28
Inscription: 7 Avr 2004

Re: Emploi de strstr + else

Message le Jeu Avr 29, 2010 23:17

C'est réécrit avec Apache ? pourquoi ne pas tout simplement faire un $_GET['productId'] ? ou bien si réécriture utiliser un séparateur type '-' ou ',' dans l'url, et prendre la fin de la chaîne comme identifiant numérique du produit ?

parce que là ça a l'air un peu aléatoire comme résultat...

Emploi de strstr + else

Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités