Inserire più dati in database

intimoviro

Utente Attivo
18 Ago 2009
272
0
0
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
 

borgo italia

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

intimoviro

Utente Attivo
18 Ago 2009
272
0
0
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:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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());
}
//................
 

borgo italia

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

intimoviro

Utente Attivo
18 Ago 2009
272
0
0
No, non mi da alcun errore, però dopo che ha inserito il primo valore, interrompe il ciclo senza inserirne altri
 

borgo italia

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

intimoviro

Utente Attivo
18 Ago 2009
272
0
0
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:
 

borgo italia

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

borgo italia

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

intimoviro

Utente Attivo
18 Ago 2009
272
0
0
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
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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
Autore Titolo Forum Risposte Data
M PHP/SQL Inserire più valori in una colonna di tipo integer - Checkbox - PHP 3
filippino Inserire un articolo in più categorie è penalizzante lato seo? SEO e Posizionamento 0
JackIlPazzo Inserire array in più righe PHP 9
W Inserire più input dinamicamente Javascript 6
nim inserire più frasi in un record MySQL 8
B inserire più musiche di sfondo HTML e CSS 9
L Inserire più record in una sola volta PHP 1
D inserire più Include PHP 0
D inserire più valori in una POST PHP 4
B inserire link a più pagine HTML e CSS 2
L inserire menu su più pagine HTML e CSS 6
Elisacau [Contact form 7] Inserire Numero auto incrementante WordPress 1
gara1 inserire immagine di sfondo in canvas Javascript 0
FDF182 Inserire pdf in db PHP 3
otto9due Inserire o aggiornare tabella my sql controllando una coppia di valori PHP 7
Couting95 inserire dati da un file di testo in una tabella in php PHP 1
D Inserire link PHP 0
L PHPSpreadsheet inserire dati da file .xlsx/.xls su database PHP 2
P inserire due voci in un titolo post wp WordPress 1
R inserire video nel sito HTML e CSS 15
J Inserire blog wordpress in angular CMS (Content Management System) 0
A inserire variabile php colore in div html PHP 2
L inserire dati multi livello PHP 8
G Inserire una scritta Java 1
M Inserire variabile nella value di una hidden PHP 3
S Inserire foto in ogni cella di una tabella Javascript 0
G inserire dati automaticamente in mysql PHP 0
B Vorrei inserire una finestra con messaggio ad un history.back PHP 16
Shyson Inserire placeholder nel campo cerca PHP 5
M Lanciare alert se il codice fiscale è già presente nel db e lasciare la scelta di inserire all'utente PHP 42
atipika INSERIRE ICONE DOWNLOAD E STAMPA WORDPRESS WordPress 10
F Creare un set di date a seconda del frazionamento scelto da inserire in MySQL PHP 6
B inserire valori da una tabella a un altra mysql PHP 34
D [Javascript] inserire uno script in un file php Javascript 6
napuleone [HTML] type="file" inserire path di partenza HTML e CSS 4
Monital [Javascript] inserire dati estratti dal db in html fisso Javascript 1
R [WordPress] Inserire campi aggiuntivi ad un Submit Form già dato dal template (front-end) WordPress 0
M inserire i dati ottenuti da una jquery in una tabella già esistente jQuery 1
G Inserire "Leggi il resto dell'articolo" con link al post sul sito preso via RSS Email Marketing 0
M [PHP] Come inserire codice html in un ciclo while PHP 2
P [PHP] Inserire stringhe in input(text),memorizzarle e stamparle in file successivo PHP 0
J [Javascript] Inserire un caricamento con animazione prima dell'esecuzione di un'azione Javascript 1
Shyson [PHP] Inserire testo nel codice PHP 2
D Mailchimp - Possibile inserire doppia condizione per i triggers? Email Marketing 0
A [MS Access] Pulsante per inserire allegati in campo maschera MS Access 0
Shyson [HTML] Inserire nuovo font con @font-face HTML e CSS 5
Alex_70 Inserire photo in php PHP 0
D [Javascript] [HTML] Inserire slash dopo 3 numeri Javascript 5
F INSERIRE IN UN'UNICA CASELLA DI TESTO REPORT ACCESS I VALORI DELLA TABELLA DI UN'INTERA COLONNA MS Access 2
A [HTML] Come inserire google review stars nelle pagine del mio sito HTML e CSS 0

Discussioni simili