Autor | Zpráva | ||
---|---|---|---|
maks Profil |
#1 · Zasláno: 22. 8. 2010, 14:34:29
Ahoj,
mám propojovací tabulku obsahující 3 sloupce - ID (AutoIncrement), ID_produktu. Jde o to (ID_produktu je ID z jiné tabulky, to je asi jasné), že mám sadu checkboxů v HTML a podle těch, které jsou zaškrtnuté, potřebuji vložit neznámé množství řádků sem do DB. <input type="checkbox" name="products[1]"> <input type="checkbox" name="products[2]"> <input type="checkbox" name="products[3]"> <input type="checkbox" name="products[4]"> ... <input type="checkbox" name="products[30]"> Po odeslání v dumpu mám např.: ["products"]=> array(7) { [1]=> string(2) "on" [2]=> string(2) "on" [6]=> string(2) "on" [7]=> string(2) "on" [17]=> string(2) "on" [21]=> string(2) "on" [28]=> string(2) "on" } A tudíž by mělo do tabulky přibýt 7 řádků ve tvaru 5 | 1 5 | 2 5 | 6 5 | 7 5 | 17 5 | 21 5 | 28 Jde tenhle INSERT provést jedním dotazem? Děkuji. |
||
Taps Profil |
#2 · Zasláno: 22. 8. 2010, 14:42:51
maks:
vložit řádky do databáze přes foreach |
||
maks Profil |
#3 · Zasláno: 22. 8. 2010, 15:01:19 · Upravil/a: maks
Taps:
zkoušel jsem takto mysql_query ("INSERT INTO table VALUES " . foreach($_POST['products'] as $prod => $value) . "('', $id, " . $prod . ")"); // na konci dotazu bude asi chyba, to zatím nevadí, neladil jsem ten dotaz, jen přepsaal Tapsovu myšlenku // potřeboval jsem toto: INSERT INTO table VALUES (1, 5, 1), (2, 5, 2), (3, 5, 6), (4, 5, 7), (5, 5, 17), (6, 5, 21), (7, 5, 28) Ale skončí to Parse errorem - unexpected foreach. Samozřejmě, možnost je udělat pro každý checked checkbox vlastní dotaz, ale to se mi nelíbí, možností může být až 50 (krát počet uživatelů, krát počet stránek, kde něco podobného bude... Nic moc). |
||
Keeehi Profil |
#4 · Zasláno: 22. 8. 2010, 15:05:32 · Upravil/a: Keeehi
$dotaz="INSERT INTO table VALUES"; foreach($_POST['products'] as $prod => $value) $dotaz.= " ('',$id,$prod),"); $dotaz=substr($dotaz,0,-1).";"; mysql_query($dotaz); |
||
maks Profil |
#5 · Zasláno: 22. 8. 2010, 15:16:44
Keeehi:
děkuji, poskládat dotaz z více částí mě nenapadlo. Super. |
||
Časová prodleva: 14 let
|
0