[RESOLU] foreach dans while ?

Eléphanteau du PHP | 12 Messages

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 ;)
Modifié en dernier par moogli le 16 oct. 2014, 12:48, modifié 2 fois.
Raison : bbcode php

Mammouth du PHP | 790 Messages

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 ?
Les fautes de grammaire et d'orthographe contenu dans mes postes sont sous copyright, vous pouvez les utiliser pour un usage personnelle mais vous ne devrez en aucun cas les utiliser a des fins commercial sans une autorisation écrite de ma part.

Mammouth du PHP | 790 Messages

16 oct. 2014, 08:04

Arf, j'avais pas vu les preg_match, es-tu sur que les $...[1] soit les variables a parcourir ?
Les fautes de grammaire et d'orthographe contenu dans mes postes sont sous copyright, vous pouvez les utiliser pour un usage personnelle mais vous ne devrez en aucun cas les utiliser a des fins commercial sans une autorisation écrite de ma part.

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

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 />";
        }
    }
}

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 12 Messages

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.
Modifié en dernier par moogli le 16 oct. 2014, 21:40, modifié 1 fois.
Raison : Bbcode php