[RESOLU] Problème de parametrage de masque dans preg_match

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Problème de parametrage de masque dans preg_match

Re: Problème de parametrage de masque dans preg_match

par Laplume » 15 févr. 2013, 20:36

Merci beaucoup pour la réponse !

ça m'a permis de trouver la solution... avec ce masque là tout fonctionne bien. Merci encore.
$motif ='/<\/span>\s*(oui)\s*<\/li>/Us';

Re: Problème de parametrage de masque dans preg_match

par nicolas » 15 févr. 2013, 19:13

Tu peux faire quelque chose comme ça :
$s = '<span>Disponibilité : </span> oui </li>';
$pattern = '`.*<span>Disponibilité\s*:\s*</span>\s*(oui|non)\s*</li>.*`';
if (preg_match($pattern, $s, $matches)) {

}
Après tu testes si $macthes[1] existe, et si c'est égal à oui ou non.

Re: Problème de parametrage de masque dans preg_match

par Laplume » 15 févr. 2013, 18:58

voilà l'exemple de ligne valide :

Code : Tout sélectionner

<span>Disponibilité : </span> oui </li>
Je n'arrive pas à trouver comment en faire un masque qui fonctionne.

Re: Problème de parametrage de masque dans preg_match

par nicolas » 15 févr. 2013, 18:28

Tu as un exemple de ligne qui devrait être valide ?
C'est de ce genre : <span>oui</span></li> ?
Il suffit de trouver ça sur la page ? Mais peut-il y a avoir des espaces, des retour à la ligne ?
Est-ce que <span> oui </span> </li> est correct ?
Est-ce que <span>
oui
</span>
</li> est correct ?

Problème de parametrage de masque dans preg_match

par Laplume » 15 févr. 2013, 16:43

Bonjour tout le monde, ceci est ma première question, alors je salue tout le monde bien amicalement.

Voici ma question. Je souhaite tester à partir d'une fiche produit si un produit chez mon fournisseur est disponible. Pour cela, je récupère ma variable de code produit que j'associe à une URL me permettant de regarder la même fiche produit chez le fournisseur. A partir de là, je teste mon masque, car j'ai besoin de retrouver un "oui" encadré par un </span> et un </li>.

Si le test est positif alors le produit est dispo, sinon, c'est qu'il ne l'est pas. Voilà ce que j'ai réussi... ça fonctionne sauf que ça me valide tout ce qui trouve entre les balises </span> et </li>. Je n'arrive pas à inclure le mot "oui" dans mon masque, ce qui serait l'idéal !

J'ai utilisé la structure preg_match_all un peu par défaut pour récupérer tout les lignes </span>-</li> mais en fait du coup je réalise que ça foire mon test.
<?php
$idprod = "40202";
$url ="xxx&identifiant=$idprod";
echo $url;
//echo htmlspecialchars(implode('', file($url)));

$code_page = file_get_contents($url);
$motif ='/<\/span>(.*\n?)<\/li>/Us';

preg_match_all($motif, $code_page, $sortie);

if(preg_match($motif,$code_page)){
       echo 'Le produit <em>' . $idprod . '</em> est disponible';
 } else {
       echo 'Le produit <em>' . $idprod  . '</em> est indisponible' ;
 }
?>