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

Petit nouveau ! | 7 Messages

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' ;
 }
?>

Eléphant du PHP | 353 Messages

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 ?

Petit nouveau ! | 7 Messages

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.

Eléphant du PHP | 353 Messages

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.

Petit nouveau ! | 7 Messages

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';