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:
 

lotus

Utente Attivo
5 Mag 2009
543
8
0
Ciao...
Una "pezza" potrebbe essere di non inserire se già esiste (tra l'altro questo controllo già ci vorrebbe).....
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
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.......
?>
 

intimoviro

Utente Attivo
18 Ago 2009
272
0
0
Ho provato come dici tu, ma niente, potresti farmi un'esempio sul mio codice perfavore?

Grazie
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
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
Autore Titolo Forum Risposte Data
G eseguire calcoli matematici su risultati 2 tabelle mysql PHP 4
antoniomanuel Eseguire più files audio in sequenza Sviluppo app per Android 0
G Eseguire codice solo al termine della chiamata ajax Ajax 1
maxnegri Eseguire un'azione con php ad ogni condivisione su Facebook PHP 0
C Eseguire .sh da php PHP 6
W [Javascript] Eseguire script residente nel sistema da html remota Javascript 0
W Aiutino per compilare o eseguire un App Java Java 0
W [C#] Eseguire contemporaneamente tutti i Thresad su "Multithread" .NET Framework 0
G [Javascript] eseguire test-case Selenium da riga di comando... Javascript 0
P [Javascript] eseguire una funzione dopo un'altra Javascript 0
S [PHP] Eseguire differenza su dati SQL presenti sulla stessa colonna PHP 1
N eseguire pagina php senza aggiornare la pagina Ajax 3
S Eseguire funzione jquery all'interno della risposta ajax Ajax 0
A eseguire funzione dopo scelta dal form PHP 4
L eseguire programmi in c PHP 0
gandalf1959 Chiedere conferma all'utente prima di eseguire una funzione PHP 5
JackIlPazzo Eseguire funzione php senza ricaricare pagina? PHP 3
T [JavaScript & Ajax] Eseguire script dopo chiamata A Ajax 2
felino [Oracle] Eseguire uno split di un record Oracle 1
felino Funzione get_node(): eseguire un replace WordPress 1
J Eseguire un redirect a sito mobile PHP 0
N Eseguire una query MySQL dopo 10 secondi PHP 0
M Eseguire codice php contenuto in una variabile e salvarne il risultato in un'altra PHP 2
G Dividere stringa ed eseguire query PHP 3
F Eseguire PHP in jQuery jQuery 3
A eseguire codice js caricandolo dinamicamente in un DIV Javascript 2
ivarello eseguire exec() lato Client PHP 1
A eseguire codice html da funzione javascript Javascript 2
X Eseguire controllo su variabili php PHP 1
M eseguire un comando da php PHP 2
1 eseguire operazioni pianificate PHP 3
Z Eseguire una Query tramite linguaggi client-side è possibile? Ajax 3
M Ajax: eseguire chiamate cross-domain Ajax 1
S Eseguire controlli sul form delle foto PHP 17
I Eseguire funz. Javascript caricata tramite la funzione Ajax di JQuery in onChange Javascript 0
I Eseguire funz. Javascript caricata tramite la funzione Ajax di JQuery in onChange Javascript 0
G eseguire un ciclo for next su applicazione di un sito web Javascript 1
S [Vb.net] Eseguire un programma richiamando l'explorer di windows o il comando esegui .NET Framework 1
C Eseguire script ajax nella stessa pagina index.php Ajax 2
S [Vb.net] Eseguire un exe contenuto nel file di risorse .NET Framework 1
G eseguire gedit con shell_exec() PHP 3
neo996sps Eseguire script perl da pagina PHP PHP 3
I Eseguire query con ciclo PHP 2
I Eseguire query in funzione PHP 2
X eseguire due query aiuto PHP 1
N Eseguire codice javascript HTML e CSS 1
R Eseguire variabile da pulsante PHP 0
D Eseguire file exe su aruba Hosting 7
M Script da eseguire su più elementi div in una singola pagina web Javascript 0
A Eseguire comandi senza cambiare pagina [Era: Messaggi] PHP 1

Discussioni simili