Parcourir des id dans une boucle

Eléphant du PHP | 372 Messages

20 juil. 2015, 07:31

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

20 juil. 2015, 09:21

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 :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 372 Messages

20 juil. 2015, 17:26

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++;
}

Mammouth du PHP | 688 Messages

20 juil. 2015, 17:40

preg_match au lieu de preg_match_all

Eléphant du PHP | 372 Messages

20 juil. 2015, 21:33

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

Eléphant du PHP | 243 Messages

21 juil. 2015, 16:36

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.
"Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent"
~~Lorenzo Strigini

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

21 juil. 2015, 16:38

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 :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 372 Messages

21 juil. 2015, 21:06

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

Eléphant du PHP | 243 Messages

21 juil. 2015, 21:41

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.
"Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent"
~~Lorenzo Strigini

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

22 juil. 2015, 09:52

Sinon, toujours avec preg_match et une expression régulière :
preg_match('#<li>(.*)<\/li>#Ug', $infos[1], $match);
print_r($match);
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...