Inserire più dati in database

Il problema è proprio questo, cioè nella tabella non ho nessun campo autoincrement quindi inserisce solo il primo valore, e poi interrompe il ciclo.

Si $vari = $params['Variante1'] è una stringa con valori separati da virgola
 
ciao
allora se è una stringa o la esplodi come gia detto o inserisci un solo record con il valore della stringa.
per capire meglio fai un piccolo esempio di cosa potrebbe contenere la stringa e di come vuoi che venga fuori la tabella e il record (posta come è fatta la tabella)
 
Grazie per la tua risposta, ecco il codice:

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 == false)
{

		$languages = tep_get_languages();
		for ($i = 0, $n = sizeof($languages); $i < $n; $i++)
		{
		
			$lang = $languages[$i]['id'];

$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 ('', '$lang', '$vari', '1')";
$insert = mysql_query($query);
   if(!$insert) die(mysql_error());

}
}

La tabella ha: products_options_values_id, linguages_id, products_options_values_name, products_options_sort_order.

Nessuno di questi campi è autoincrementante.

Ho provato questo codice modificando il campo products_options_values_id facendolo diventare autoincrementante e funziona, però eseguendo questo codice con la tabella senza modifiche m'inserisce solo il primo valore contenuto in Variante1 e poi si blocca.

In $_POST['Variante1'] sono contenute le taglie dei prodotti, tipo XS, S, M, L, XL.

Quindi con il codice postato sopra, nella tabella m'inserisce solo la XS nelle rispettive lingue, e poi si blocca. Il database deve essere per forza strutturato così, perchè ad esempio i valori devono essere contenuti in questo modo:

products_options_values_id languages_id products_options_values_name products_options_sort_order
0 1 XS 1
0 2 XS 1
1 1 M 1
1 2 M 1
E COSI' VIA....


Spero di essere stato chiaro.

Penso che ci sia bisogno di un'ulteriore ciclo che mi faccia ripetere la query d'inserimento tante volte quanti i valori contenuti nel valore $_POST['Varainte1'], però non so da dove partire.

Grazie
 
Ultima modifica:
ciao
per prima cosa devi trasformare $params['Variante1'];
eliminando gli spazi
$params['Variante1']=str_replace(" ","",$params['Variante1']);
poi la trasformi in array
$vari=explode(",",$params['Variante1']);
poi usi foreach per inserire tanti records quanti sono i valori in $vari

per cui la parte che ti interesa diventa

PHP:
//...............
$params['Variante1']=str_replace(" ","",$params['Variante1']);
$vari=explode(",",$params['Variante1']);
foreach($vari as $valore){
	//nella insert al posto di $vari metti $valore
	$query = "INSERT INTO products_options_values (products_options_values_id, language_id, products_options_values_name, products_options_values_sort_order) VALUES ('', '$lang', '$valore', '1')";
	//quarda che puoi scrivere così al posto della if
	$insert = mysql_query($query) or diedie(mysql_error());
}
//................
 
ciao scusa dimenticavo
$params['Variante1'] proviene da un form in cui inserisci i dati manualmente?
se si ti convine aggiungere subito sotto
$params['Variante1']=str_replace(" ","",$params['Variante1']);
l'istruzione
$params['Variante1']=strtoupper($params['Variante1']);
che trasforma tutti i caratteri in maiuscolo evitando errori del tipo xl che diventa XL
 
No, non mi da alcun errore, però dopo che ha inserito il primo valore, interrompe il ciclo senza inserirne altri
 
ciao
prova a mettere questi var_dump, echo e commenta la riga $query e $insert

PHP:
//............... 
$params['Variante1']=str_replace(" ","",$params['Variante1']);
var_dump($params['Variante1'];//vardump 1
echo "<br>";
$vari=explode(",",$params['Variante1']); 
var_dump($vari);//vardump2
echo "<br>";
foreach($vari as $valore){ 
    //nella insert al posto di $vari metti $valore 
    //$query = "INSERT INTO products_options_values (products_options_values_id, language_id, products_options_values_name, products_options_values_sort_order) VALUES ('', '$lang', '$valore', '1')"; 
    var_dump($valore);//vardump3
	echo "<br>";
	//quarda che puoi scrivere così al posto della if 
    //$insert = mysql_query($query) or diedie(mysql_error()); 
} 
//................

il vardump1 dovrebbe darti string (nn) valore dove nn lunghezza della stringa e valore (es) "XL,M,XM"
il vardump2 array (NN) e valori dove NN numero elementi array e valori i vari valori "XL" "M" "XM"
il vardump3 vari output (NN) tipo
string (2) "XL"
srting (1) "M"
string (2) "XM"

fai una prova e sappimi dire cosa risulta
 
Grazie per la risposta, però i valori sono corretti, perchè con il codice che ti ho dato prima e facendo diventare autoincrementane il campo id della tabella funziona, quindi non è un problema dei valori, anche perchè non posso fare il var_dump dei dati, poichè la pagina che invia i dati è un gestionale, e li salva immediatamente nel database e non mi permette di visualizzare immediatamente i dati in una pagina, quello che penso io che non so come fare, è che oltre ai due cicli che fa cioè quello di contare i dati contenuti in $param['Variante1'], e contare le lingue, ce ne vorrebbe un'altro che aumenterebbe di valore il campo products_options_values id di 1 ad ogni query.

Ti posto anche il codice di come è formata la tabella:

-- --------------------------------------------------------

--
-- Struttura della tabella `products_options_values`
--

CREATE TABLE IF NOT EXISTS `products_options_values` (
`products_options_values_id` int(11) NOT NULL default '0',
`language_id` int(11) NOT NULL default '1',
`products_options_values_name` varchar(64) NOT NULL default '',
`products_options_values_sort_order` int(11) NOT NULL default '0',
PRIMARY KEY (`products_options_values_id`,`language_id`),
KEY `idx_products_options_values_name_zen` (`products_options_values_name`),
KEY `idx_products_options_values_sort_order_zen` (`products_options_values_sort_order`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Se invece la tabella è strutturata così funziona:

-- --------------------------------------------------------

--
-- Struttura della tabella `products_options_values`
--

CREATE TABLE IF NOT EXISTS `products_options_values` (
`products_options_values_id` int(11) NOT NULL autoincrement,
`language_id` int(11) NOT NULL default '1',
`products_options_values_name` varchar(64) NOT NULL default '',
`products_options_values_sort_order` int(11) NOT NULL default '0',
PRIMARY KEY (`products_options_values_id`,`language_id`),
KEY `idx_products_options_values_name_zen` (`products_options_values_name`),
KEY `idx_products_options_values_sort_order_zen` (`products_options_values_sort_order`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


Scusami se non riesco a spiegarmi bene::crying:
 
ciao
se metti

`products_options_values_id` int(11) NOT NULL autoincrement,

si incrementa di uno da solo ad ogni query non ti serve un qualcosa per incrementarlo, se lo metti autoincrement non serve nemmeno che lo metti nella query di insert ne come nome ne come valore (avevi messo '') ci pensa mysql ad autoincrementarsi
 
ciao dimenticavo

...perchè non posso fare il var_dump dei dati, poichè la pagina che invia i dati è un gestionale,...
non è una pagina php?
se non è una php da dove hai pescato quegli script che hai postato?
se è php basta che tu commenti tutte le query mettendo tutti i var dump che vuoi
 
Esatto, ho bisogno che sia non autoincrement, perchè quando vengono inseriti i valori nel database pur essendo in due lingue diverse, devono avere lo stesso id, cioè:

id = 1 -------- lingua = 1 -----------nome = XS -------------


id = 1 -------- lingua = 2 -----------nome = XS -------------

perchè poi richiamo questo valore con un id univoco, quindi id = 1 equivale ad XS in entrambe le lingue.

Grazie
 
ciao
ecco allora perhè non ti inserisce
tu hai messo
PRIMARY KEY (`products_options_values_id`,`language_id`),
non possono esistere due primary con lo stesso valore

cioe se hai inserito
id = 1 -------- lingua = 1 -----------nome = XS -------------
non puoi inserire un altro
id = 1 -------- lingua = -----------nome = XS -------------
 

Discussioni simili