Page 1 sur 1

foreach dans while ?

Posté : 15 oct. 2014, 17:50
par Kaolin
Re-Bonjour tout le monde,

Pour ceux qui ont vu mon post précédent dans la journée, je m'en suis sorti pour mon étape 1.

Par contre là je ne saisi pas tout. Voici mon code :
<?php
if(isset($_POST['recup'])){
	$query = "SELECT * FROM urls";
	$result = mysql_query($query);
	while ($row = mysql_fetch_array($result)){
	  $link = $row['url'];
      $file = file_get_contents($link);
      preg_match_all('/<dt>Famille :</dt><dd>(.*)</dd>/i', $file, $type);
      preg_match_all('/<dt>Marque :</dt><dd>(.*)</dd>/i', $file, $marque);
      preg_match_all('/<dt>Type :</dt><dd>(.*)</dd>/i', $file, $ref);
      foreach ($type[1] as $ajouttype){
        $query1 = "INSERT INTO 'materiel' (id,type,marque,ref,photo) VALUES (NULL,'".$ajouttype."',NULL,NULL,NULL)";
		$result1 = mysql_query($query1);
      }
      foreach ($marque[1] as $ajoutmarque){
        $query2 = "INSERT INTO 'materiel' (id,type,marque,ref,photo) VALUES (NULL,NULL,'".$ajoutmarque."',NULL,NULL)";
		$result2 = mysql_query($query2); 
      }
      foreach ($ref[1] as $ajoutref){
        $query3 = "INSERT INTO 'materiel' (id,type,marque,ref,photo) VALUES (NULL,NULL,NULL,'".$ajoutref."',NULL)";
		$result3 = mysql_query($query3); 
      }
	  echo $row['url']."_____________________RECUPERATION&nbsp;OK!<br />";
	}
}
Je rentre bien dans mon if, je rentre bien dans mon while MAIS impossible de rentrer dans le foreach ! Quelqu'un aurait une idée ?

Merci d'avance ;)

Re: foreach dans while ?

Posté : 16 oct. 2014, 07:55
par juliette
Salut, en regardant vite fait comme ca, je pense que déjà tu cherche a faire 3, foreach pour 3 requêtes.
A mon avis, tu devrais avoir un array ['marque', 'type', ref]; et fairre un foreach dessus pour ne faire qu'une requete...
A ce propos, peux tu faire voir un var_dump(); de $_POST['recup'], est tu sur qu'il contienne 3 tableau ?

Re: foreach dans while ?

Posté : 16 oct. 2014, 08:04
par juliette
Arf, j'avais pas vu les preg_match, es-tu sur que les $...[1] soit les variables a parcourir ?

Re: foreach dans while ?

Posté : 16 oct. 2014, 13:01
par moogli
salut,

pour être plus clair :
le var_dump c'est pour être certain que tu as bien des données en retour.

tes fichier c'est du xml ?
si oui utilise plutôt simplexml tu va te simplifier la tâche.

de ce que je vois un seul foreach suffit et surtout une seule requête la tu insert n'importe quoi tu perds les relation entres info.
ceci devrait suffire (bon il manque les vérification d'usage sur la présence des index, je suis partis sur le fait que les infos étaient toujours présentes).
<?php
if (isset($_POST['recup'])) {
    $query = "SELECT url FROM urls";
    $result = mysql_query($query);
    if ($result === false) {
        echo 'Erreur SQL : ' . mysql_error();
    } else {
        while ($row = mysql_fetch_array($result)) {
            $file = file_get_contents($row['url']);
            preg_match_all('/<dt>Famille :</dt><dd>(.*)</dd>/i', $file, $type);
            preg_match_all('/<dt>Marque :</dt><dd>(.*)</dd>/i', $file, $marque);
            preg_match_all('/<dt>Type :</dt><dd>(.*)</dd>/i', $file, $ref);

            foreach ($type[1] as $index => $ajouttype) {
                $query1 = 'INSERT INTO materiel (id,type,marque,ref,photo) VALUES (NULL, \'' . $ajouttype . '\', \'' . $marque[1][$index] . '\', \'' .
                    $ref[1][$index] . '\',NULL)';
                $result1 = mysql_query($query1);
            }
            echo $row['url'] . "_____________________RECUPERATION&nbsp;OK!<br />";
        }
    }
}

@+

Re: foreach dans while ?

Posté : 16 oct. 2014, 15:45
par Kaolin
Tout d'abord, merci pour vos retours. Je n'ai pas eu le temps (trop concentré apparement ^^) pour me connecter au forum ce matin.

J'ai réussi à résoudre mon problème. Je met le code au cas ou ça serve un jour à quelqu'un qui passerait par là :
<?php
if(isset($_POST['recup'])){
    $query = "SELECT * FROM urls";
    $result = mysql_query($query);
    while ($row = mysql_fetch_array($result)){
      $link = $row['url'];
      $file = file_get_contents($link);
      preg_match_all('~<dd>(.*)</dd>~i', $file, $info);
        $query1 = "INSERT INTO `materiel`(`type`,`marque`,`ref`) VALUES ('".$info[1][2]."','".$info[1][1]."','".$info[1][0]."')";
        $result1 = mysql_query($query1);
	  print_r($info[1][2]);
	  echo "&nbsp;";
	  print_r($info[1][1]);
	  echo "&nbsp;";
	  print_r($info[1][0]);
      echo "_____________________RECUPERATION&nbsp;OK!<br />";
    }
}
Je me prenais la tête à faire plusieurs requêtes alors qu'une seule suffisait.