Inserire più dati in database

intimoviro

Utente Attivo
18 Ago 2009
272
0
0
Salve ragazzi, volevo chiedervi come inserire più dati in un database, cioè:

Nella variabile $varianti, sono contenuti: XS, S, M, L

ora vorrei inserire questi dati in un database ma uno per riga, cioè ognuno con un'id differente, come posso fare?

es.
id = 1 Taglia = XS
id = 2 Taglia = S
id = 3 Taglia = M
e così via...

Grazie
 
esplodi la varibile, poi con un foreach sull'array esegui tante query quanti sono i valori presenti in esso
 
PHP:
$dati = explode(",", $dati);
foreach($dati as $value) {
  $query = "INSERT INTO tabella (campo) VALUES('$value')";
   mysql_query($query);
}
 
Comunque se la variabile che hai scritto è così come compare nel codice dovrai usare , (con lo spazio dopo) invece di , come stringa da esplodere (non carinissimo questo termine, explode sta per dividere, separare come in un'esplosione in questo caso :D).
 
Cioè in questo modo:

PHP:
$dati = explode(", ", $dati);
foreach($dati as $value) {
  $query = "INSERT INTO tabella (campo) VALUES('$value')";
   mysql_query($query);
}
 
ciao
secondo me gli spazi sono noiosi anche perchè delle volte scrivendo uno li tralascia o ne scrive due
prima di explode io metterei

PHP:
$dati=str_replace(" ","",$dati);
//per cui l'explode diventa
$dati = explode(",", $dati); 
//ecc....
 
Salve ragazzi e grazie per le numerose risposte, però volevo sapere, con quella variabile contenente l'array, devo fare anche una select, cioè:

$dati=str_replace(" ","",$dati);
$dati = explode(",", $dati);
$query ="SELECT * FROM tabella WHERE nome = $dati";

Così va bene, oppure no?

Grazie
 
A prima vista direi di no...
Poi dipende da cosa ti serve...
1. alla query stai passando un array e non un valore...
Quindi se ad esempio ti servisse tirar fuori dalla tabella tutti i campi che cotengono la taglia S,M e XL la query sarebbe:

$query ="SELECT * FROM tabella WHERE (nome = $dati[0])||(nome = $dati[1])||(nome = $dati[2])";
 
Cioè, questo
PHP:
$dati=str_replace(" ","",$dati);
$dati = explode(",", $dati);
è corretto ma poi devi passare alla condizione (where) della query un valore per volta... quindi
... where (nome = $dati[0])||(nome = $dati[1])||(nome = $dati[2])
che significa semplicemente:
dove (nome è = a S)oppure(nome è = a M)oppure(nome è = a XL)...

Spero di averti aiutato... se è questo che ti serviva...
 
ciao
sono d'accordo con lakanka
A prima vista direi di no...
anche alla seconda.
per quanto riguarda la select anche li ha ragione
Poi dipende da cosa ti serve...

se ti serve per selezionare una taglia dovresti trasmettere via $_post o $_get cosa vuoi selezionare

es.
PHP:
$voglio_la_taglia=(int)$_POST['taglia'];//dove taglia = 0, 1, 2, 3.....

$dati=str_replace(" ","",$dati); 
$dati = explode(",", $dati); 

$query ="SELECT * FROM tabella WHERE (nome = $dati[$voglio_la_taglia])";
//ecc...
 
Grazie ragazzi per i numerosi aiuti, però volevo chiedervi un'ulteriore cosa, cioè:
Dal riultato della query
PHP:
$query ="SELECT * FROM tabella WHERE (nome = $dati[$voglio_la_taglia])";
//ecc...

Prelevo un valore in questo modo:
PHP:
      $variante = $row['products_options_name'];

Poi vorrei fare un confronto:
Se i valori contenuti in $variante, sono uguali a quelli $dati[$voglio_la_taglia] deve fare una cosa, altrimenti un'altra, ho fatto così, ma non scrive niente:
PHP:
if($variante == $dati[$voglio_la_taglia]){
fa una cosa, 
}else{
fa un'altra cosa
}
In verità dovrebbe controllare i valori in $variante in questo modo, cioè se tutti i valori corrispondo e anche uno no, deve inserire quel nuovo valore che non corrisponde nel database, altrimenti passa alla seconda condizione.

Spero di essere stato chiaro

Grazie
 
Scusatemi ragazzi, vi metto il codice:

PHP:
//$params['Variante1'] equivale a $_POST['Variante1'];
$voglio_la_taglia=(int)$params['Variante1'];

$dati=str_replace(" ","",$params['Variante1']); 
$dati = explode(",", $params['Variante1']);  

$q = "SELECT * FROM products_options_values WHERE products_options_values_name = '$dati'";
$s = mysql_query($q) or die (mysql_error());
while ($row = mysql_fetch_array($s)){
      $variante = $row['products_options_name'];
}

 
if($params['Variante1'] != $variante){
$vari = $params['Variante1'];

  $query = "INSERT INTO products_options_values (products_options_values_id, language_id, products_options_values_name, products_options_values_sort_order) VALUES ('', '1', '$vari', '1')";
$insert = mysql_query($query);
   if(!$insert) die(mysql_error());


}
else{

$vari = setstockvar($params['Variante1']);
$pid = $params['products_attributes_id'];

$query = "INSERT INTO products_attributes (products_attributes_id, products_id, options_id, options_values_id, product_attribute_is_free, attributes_discounted, attributes_price_base_included) VALUES ('', '$pid', '$vari', '1', '1', '1', '1')";
$insert = mysql_query($query);
   if(!$insert) die(mysql_error());
}

Così, mi scrive sempre i valori nel database senza curarsi dell'if

Grazie
 
ciao, non puoi fare
$q = "SELECT * FROM products_options_values WHERE products_options_values_name = '$dati'";
perchè $dati è un array con enne possibili valori

$dati[0] = pinco
$dati[1] = pallino
...........
$dati[enne] = sempronio

se vuoi estrarre tutti i dati con i vaori delle variabile array devi fare come ha detto lakanka (con tutti glio OR) oppure in un altra maniera rendendo il WHERE dinamico. se hai pazienza ti faccio un esempio

poi ci sono altri errori di logica
 
Ultima modifica:
ciao,
1. $params['Variante1'] che cosa contiene?
perchè se il suo valore è (es) XS, L, M o simile
la riga
$voglio_la_taglia=(int)$params['Variante1'];
ti darà in $voglio_la_taglia sempre il valore 0
poi comunque non vedo da alcuna altra parte $voglio_la_taglia
quindi se non usi la variabile a che ti serve la riga (assurda tra l'altro)?

2. nell'estrazione ddalla select (errata comunque) fai

$s = mysql_query($q) or die (mysql_error());
while ($row = mysql_fetch_array($s)){
$variante = $row['products_options_name'];
}

o non ti serve il ciclo while o comunque in $variante troverai sempre ed esclusivamente
il valore dell'ultimo record estratto, se ti servono tutti i valori (anche dei record prima dell'ultimo)
$variante deve essere un array
$variante[] = $row['products_options_name'];

poi mi fermo qui, anche perchè credo di non aver capito bene quello che vuoi fare
 
In pratica devo fare in modo che quando viene inviato il form devo recuperare il valore delle varianti, poi devo fare un controllo nel database per vedere se esiste qualche variante nel database, se non esiste una o tutte le variabili li deve inserire nella tabella delle varianti, altrimenti se esistono deve eseguire un'altra funzione.

Grazie
 
ciao,
per capire meglio ed ventualmente darti una mano
1. in $params['Variante1'] hai una stringa del tipo "XL, M, XM" o simile
che esplodi nei singoli elementi 'XL' 'M' e 'XM'?
2. cosa hai (o potresti avere) nel campo products_options_values_name? un singolo elemento
o una serie di elementi?
questo perchè se hai un elemento è una cosa se una serie un'altra
 
Ho risolto in questo modo:

PHP:
$variante=array();
$q = "SELECT * FROM products_options_values WHERE products_options_values_name = '".$_POST['Variante1']."'";
$s = mysql_query($q) or die (mysql_error());
while ($row = mysql_fetch_array($s)){
      $variante[] = $row['products_options_values_name'];
}

$array = explode("," ,$_POST['Variante1']); 

$array = $array;
 $var1=count($array); 
$res = false;

for($i=0;$i<$var1;$i++)
{
if ($array[$i]==$variante[$i])
    {
$res=true;
    }
} 
if($res == true)
{

$vari = setstockvar($params['Variante1']);
	$pid = $_POST['Model'];


$query = "INSERT INTO products_attributes (products_attributes_id, products_id, options_id, options_values_id, product_attribute_is_free, attributes_discounted, attributes_price_base_included) VALUES ('', '$pid', '$vari', '1', '1', '1', '1')";
$insert = mysql_query($query);
   if(!$insert) die(mysql_error());


}else{


$vari = $params['Variante1'];


  $query = "INSERT INTO products_options_values (products_options_values_id, language_id, products_options_values_name, products_options_values_sort_order) VALUES ('', '1', '$vari', '1')";
$insert = mysql_query($query);
   if(!$insert) die(mysql_error());


}

Però ora non so come far eseguire un ciclo su una query, cioè eseguire una query tante volte quanti sono i valori contenuti nella variabile $vari, praticamente qui:

PHP:
$vari = $params['Variante1'];

$query = "INSERT INTO products_options_values (products_options_values_id, language_id, products_options_values_name, products_options_values_sort_order) VALUES ('', '1', '$vari', '1')";
$insert = mysql_query($query);
   if(!$insert) die(mysql_error());

Grazie
 
ciao
prima di tutto una cosa
cerca di non dare nomi alle variabili che siano anche parole chiave
non dovrebbero esserci problemi ma un piccolo errore di battitura (es uno spazio tra $ e nome) può
crearti problemi $array chiamala $arrai

poi se $vari = $params['Variante1']; è un array (a me sembrerebbe più che altro una stringa)
puoi fare così

PHP:
foreach($arrai as $valore){
  $query = "INSERT INTO products_options_values (products_options_values_id, language_id, products_options_values_name, products_options_values_sort_order) VALUES ('', '1', '$valore', '1')"; 
  $insert = mysql_query($query) or die(mysql_error(); 
}

altra piccola cosa se products_options_values_id, language_id è una primarykey autoincrement non serve metterla nell'insert (ne come valore ne come valore '')
 
Non sono d'accordo con il fatto di non dare alle variabili il nome di parole chiave (che poi array non è una parola chiave). Dopotutto anche se la variabile la chiami $pincopallino e scrivi $ pincopallino PHP ti restituirà un errore, quindi direi che puoi anche chiamarla tranquillamente $array.
 

Discussioni simili