Page 1 sur 1

Parcourir des id dans une boucle

Posté : 20 juil. 2015, 07:31
par blinz
Salut à tous.
Dans mon code j'essai de parcourir plusieur id mais php travaille toujours sur le meme ....
// On défini les id à parcourir
	$id = 7690 ;
	while ($id < 7699) {
	$adresse = "http://www.lesite/$id/" ; // adresse de la page à exploiter
	$page = @file_get_contents ($adresse); // récupérer le contenu de la page
	echo 'id :' .$id .'<br>';


	// Titre
	$titre = @eregi('<h1>(.*)</h1>',$page,$nom);
	echo $nom[1].'<br>';
	
	// Adresse
	$adresse = @eregi('<p><strong>Adresse du marché :</strong><br />(.*)<br />(.*)<br />(.*)<br />(.*)</p>',$page,$adresse_evenement,$codepostal);
	echo $adresse_evenement[1] .'<br><br>';
	echo $codepostal[1] .'<br>';
	
	}

De plus je voudrais savoir comment faire pour récupérer le contenu quand j'ai plusieur recherche ds la variable comme j'ai essayer ds mon code poour codepostal, cette partie la:
// Adresse
	$adresse = @eregi('<p><strong>Adresse du marché :</strong><br />(.*)<br />(.*)<br />(.*)<br />(.*)</p>',$page,$adresse_evenement,$codepostal);
	echo $adresse_evenement[1] .'<br><br>';
	echo $codepostal[1] .'<br>';
Le code source ou je récupere l'info est tel quel:
<p><strong>Adresse du marché :</strong><br />
    Centre ville<br />
Face à l'église St Vincent<br />
33260 LA TESTE DE BUCH    <br />33260 La Teste-de-Buch</p>
    <p>

Merci à vous;)

Re: Parcourir des id dans une boucle

Posté : 20 juil. 2015, 09:21
par Ryle
Bonjour,

Si php boucle toujours sur $id = 7690, c'est tout simplement parce qu'à aucun moment dans ton code, la variable $id ne change de valeur... peut être est-ce un for() au lieu d'un while() qu'il te faut ? ou un $id++ ? ou quelque chose d'autre qui fera changer ta variable ? ... sans ça, forcément... ;)

Et au lieu d'ajouter un @ pour masquer les messages d'avertissement et d'erreur de tes fonctions, il serait bon de les mettre à jour. Les fontctions "ereg" sont dépréciées depuis un moment déjà et peuvent facilement être remplacé par un preg_match() plus performant et sans message d'erreur ;)

Tu pourras également récupérer le contenu de chaque parenthèses capturantes dans un tableau :)

Re: Parcourir des id dans une boucle

Posté : 20 juil. 2015, 17:26
par blinz
Pour le preg match j'ai essayer ca mais ca ne marche pas :

Message erreur :
Notice: Array to string conversion in C:\wamp\www\lasortie\admin\integrer_marcher.php
erreur sur la ligne 59
soit =>
echo $titre[1].'<br>';
// Titre
  preg_match_all('#<h1>(.*)</h1>#', $page, $titre);
  echo $titre[1].'<br>';

  $id++;
}

Re: Parcourir des id dans une boucle

Posté : 20 juil. 2015, 17:40
par tof73
preg_match au lieu de preg_match_all

Re: Parcourir des id dans une boucle

Posté : 20 juil. 2015, 21:33
par blinz
Bonjour,
ca ne change rien qua ça soit preg_match_all ou preg_match
// On défini les id à parcourir
	$id = 7690 ;
	while ($id < 7699) {
	$adresse = "http://www.lesite/$id/" ; // adresse de la page à exploiter
	$page = @file_get_contents ($adresse); // récupérer le contenu de la page
	echo 'id :' .$id .'<br>';

 	 // titre
	    preg_match_all('#<h1>(.*)</h1>#is', $page, $titre);
	    echo $titre[0].'<br>';

  $id++;
}
Avec ce code j'ai l'erreur suivante
Notice: Array to string conversion in C:\wamp\www\site\admin\test.php on line 57
ca correspond à echo $titre[1].'<br>';


Vu que je n'arrive pas avec preg_match et je ne sais pas pourquoi je suis resté sur l'ancienne syntaxe est je me retrouve donc avec :
// On défini les id à parcourir
	$id = 7690 ;
	while ($id < 7699)
	{
		$adresse = "http://www.lesite.fr/$id/" ; 
		$page = @file_get_contents ($adresse); 
		echo '<strong>ID :</strong>'.$id .'<br>';
	
		// Titre
		$titre = @eregi('<h1>(.*)</h1>',$page,$nom);
		echo '<strong>Titre :</strong>'. $nom[1].'<br>';
		
		// Adresse
		$complement = @eregi('<p><strong>Adresse :</strong><br />(.*)<br />',$page,$adresse);
		echo '<strong>Adresse :</strong>'. $adresse[1].'<br><br>';
		
		
		// Codepostal
		$codepostal = @eregi('<p><strong>Adresse du marché :</strong><br />
    (.*)    <br />(.*)</p>
    <p>
    <strong>Informations complémentaires</strong>',$page,$postcode);
		echo '<strong>Code postal :</strong>'. $postcode[1].'<br><br>';
		
	  
		echo'<hr>';
		$id++;
   }

?>


Ca marche mais je n'arrive pas a récupèrer le codepostal comme je souhaite c'est à dire le deuxième (.*)
Je m'y prend peut etre mal
// Codepostal
		$codepostal = @eregi('<p><strong>Adresse du marché :</strong><br />
    (.*)    <br />(.*)</p>
    <p>
    <strong>Informations complémentaires</strong>',$page,$postcode);
		echo '<strong>Code postal :</strong>'. $postcode[1].'<br><br>';
Merci encore à vous

Re: Parcourir des id dans une boucle

Posté : 21 juil. 2015, 16:36
par Ascla
Je ne m'y connais pas trop avec cette fonction mais pour récupérer le deuxième (.*), tu devrais normalement utiliser $postcode[2]
En effet :
$regs[1] contiendra la sous-chaîne qui commence à la première parenthèse la plus à gauche ; $regs[2], la seconde, et ainsi de suite. $regs[0] contiendra une copie complète de la chaîne matchée.

Re: Parcourir des id dans une boucle

Posté : 21 juil. 2015, 16:38
par Ryle
Bonjour,

Le message "Notice: Array to string conversion" signifie que tu utilises un tableau comme s'il s'agissait d'une chaine de caractère.
Quand cette erreur apparaît, contrôle les valeurs de $page (avec un echo) et de $titre (avec un print_r). Tu devrais alors voir les valeurs récupérées par php et ajuster ton expression régulière et/ou adapter le traitement qui en découle. Au besoin poste nous les valeurs de ces deux éléments :)

Re: Parcourir des id dans une boucle

Posté : 21 juil. 2015, 21:06
par blinz
Re, j'ai put faire tout ce que je voulais avec eregi cependant j'ai quelque chose à récupérer et je bloque sérieusement:

Je recupere mon contenu ainsi:
// Description
	  $renseignement_complementaire = @eregi('<p><strong>Adresse de club :</strong><br />'.$adresse[1].'<br />(.*)</p>',$page,$infos);
	  echo $infos[1];
Il en ressort le code source suivant:
<p>
    <strong>Informations complémentaires</strong>
    <ul>
				<li>equipe minime</li>
                <li>fille :
        <ul>
        	<li>johana</li><li>sabine</li><li>fleur</li><li>maud</li><li>mia</li>        </ul>
        
        </li>
    </ul>
    </p>
Moi je ne souhaite que ce qu'il y a entre les <li></li> et les mettre dans des variable séparé
pour en suite faire quelque chose du genre: Voici l'équipe minime de .... avec sabine, johana,....

Je blok grave tt le reste est ok sinan,
merci encore

Re: Parcourir des id dans une boucle

Posté : 21 juil. 2015, 21:41
par Ascla
Re, j'ai put faire tout ce que je voulais avec eregi cependant j'ai quelque chose à récupérer et je bloque sérieusement:

Je recupere mon contenu ainsi:
// Description
	  $renseignement_complementaire = @eregi('<p><strong>Adresse de club :</strong><br />'.$adresse[1].'<br />(.*)</p>',$page,$infos);
	  echo $infos[1];
Il en ressort le code source suivant:
<p>
    <strong>Informations complémentaires</strong>
    <ul>
				<li>equipe minime</li>
                <li>fille :
        <ul>
        	<li>johana</li><li>sabine</li><li>fleur</li><li>maud</li><li>mia</li>        </ul>
        
        </li>
    </ul>
    </p>
Moi je ne souhaite que ce qu'il y a entre les <li></li> et les mettre dans des variable séparé
pour en suite faire quelque chose du genre: Voici l'équipe minime de .... avec sabine, johana,....

Je blok grave tt le reste est ok sinan,
merci encore
Si tu souhaites garder seulement ce qu'il y a entre les balises, tu pourrais utiliser la fonction "explode".
Voici un lien : http://php.net/manual/fr/function.explode.php
A ce moment là, tu découpes ta variable $infos[1] et tu pourras les insérer manuellement pour ainsi obtenir "Voici l'équipe minime de (ici le premier explode qui t’intéresse), avec (et les autres explodes).
Je reste présent si tu as d'autres questions.

Re: Parcourir des id dans une boucle

Posté : 22 juil. 2015, 09:52
par Ryle
Sinon, toujours avec preg_match et une expression régulière :
preg_match('#<li>(.*)<\/li>#Ug', $infos[1], $match);
print_r($match);