Eseguire foreach una volta

intimoviro

Utente Attivo
18 Ago 2009
272
0
0
Salve ragazzi ho questo codice che esegue questo cilco foreach (come logica) 2 volte.

Il mio problema che eseguendo il ciclo 2 volte m'inserisce i dati nel database 2 volte, però se non eseguo il foreach non prelevo i dati che m'interessano, come posso fare?

Ecco il codice:

PHP:
//prelevo il file
$xml = simplexml_load_file("articoli.xml");

//eseguo il ciclo su tutti i prodotti per prelevare il codice dei prodotti
  foreach($xml->Products->Product as $product)
    {
     $codice = $product->Code;

//eseguo il ciclo sul nodo più basso "Variant" di ogni prodotto
      foreach($xml->xpath("Products/Product[Code = '".(string)$product->Code."']/Variant") as $variant)
    {
//prelevo i dati taglia e colori
     $taglia = $variant->Size;
     $colore = $variant->Color;

//prelevo l'id della taglia
$sql = "SELECT * FROM products_options_values WHERE products_options_values_name = '$taglia'";
$rows = $db->query($sql);
  while ($r = $db->fetch_array($rows)){
      $p_att= $r[products_options_values_id];
}

//prelevo l'id del prodotto
$sql = "SELECT * FROM products WHERE products_model = '$codice'";
$rows = $db->query($sql);
  while ($r = $db->fetch_array($rows)){
      $pid= $r[products_id];
}

//inserisco i dati nel database
$query = "INSERT INTO products_attributes (products_id, options_id,  options_values_id) VALUES ('$pid', '1', '$p_att')";
$insert = mysql_query($query);
   if(!$insert) die(mysql_error());



}
    
}

Come potete notare il codice viene eseguito perfettamente, però non mi da il risultato sperato visto che m'inserisce ogni prodotto 2 volte nel database. Come potrei ovviare questa situazione?

Spero di essere stato abbastanza chiaro.

Grazie :crying:
 
Ciao...
Una "pezza" potrebbe essere di non inserire se già esiste (tra l'altro questo controllo già ci vorrebbe).....
 
ciao
un'altra pezza potrebbe essere:
PHP:
<?php
//prelevo il file 
$xml = simplexml_load_file("articoli.xml"); 
$flag=0;//metto un controllo ==0
//eccetera..............
if($flag==0){// se flag ==0 faccio l'insert
	$insert = mysql_query($query);
   if(!$insert){
   		die(mysql_error());
	}else{
		$flag=1;//se inserito porto il flag a 1
	}//fine if-else inserimento
}//fine if flag
//eccetera.......
?>
 
Ho provato come dici tu, ma niente, potresti farmi un'esempio sul mio codice perfavore?

Grazie
 
ciao
dovrebbe essere così

PHP:
<?php
//prelevo il file 
$xml = simplexml_load_file("articoli.xml"); 
$flag=0;//metto un controllo a zero
//eseguo il ciclo su tutti i prodotti per prelevare il codice dei prodotti 
  foreach($xml->Products->Product as $product) 
    { 
     $codice = $product->Code; 

//eseguo il ciclo sul nodo più basso "Variant" di ogni prodotto 
      foreach($xml->xpath("Products/Product[Code = '".(string)$product->Code."']/Variant") as $variant) 
    { 
//prelevo i dati taglia e colori 
     $taglia = $variant->Size; 
     $colore = $variant->Color; 

//prelevo l'id della taglia 
$sql = "SELECT * FROM products_options_values WHERE products_options_values_name = '$taglia'"; 
$rows = $db->query($sql); 
  while ($r = $db->fetch_array($rows)){ 
      $p_att= $r[products_options_values_id]; 
} 

//prelevo l'id del prodotto 
$sql = "SELECT * FROM products WHERE products_model = '$codice'"; 
$rows = $db->query($sql); 
  while ($r = $db->fetch_array($rows)){ 
      $pid= $r[products_id]; 
} 

//inserisco i dati nel database 
if($flag==0){//se il flag è zero inserisco
	$query = "INSERT INTO products_attributes (products_id, options_id,  options_values_id) VALUES ('$pid', '1', '$p_att')"; 
	$insert = mysql_query($query); 
    if(!$insert){//verifico l'inserimento
		die(mysql_error());//l'inserimento KO
	}else{//l'inserimento OK
		$flag=1;//inserimento OK quindi metto flag a uno o qualsiasi altro valore diverso da 0
	}//finer if-else inserimento KO/OK
}//fine if flag

} 
     
}  

?>
 

Discussioni simili