[RESOLU] foreach dans while ?

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] foreach dans while ?

Re: foreach dans while ?

par Kaolin » 16 oct. 2014, 15:45

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.

Re: foreach dans while ?

par moogli » 16 oct. 2014, 13:01

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 ?

par juliette » 16 oct. 2014, 08:04

Arf, j'avais pas vu les preg_match, es-tu sur que les $...[1] soit les variables a parcourir ?

Re: foreach dans while ?

par juliette » 16 oct. 2014, 07:55

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 ?

foreach dans while ?

par Kaolin » 15 oct. 2014, 17:50

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