Autor Zpráva
Ondraj
Profil *
Čau, mám v $_POST poli nějaké hodnoty(nevím kolik) a tak si spočítám počet pomocí count() a z výsledku potřebuji nějak zajistit, aby se mi SQL dotaz typu INSERT provedl když bude spočítaná hodnota z pole rovna 1 takto:
INSERT INTO `table` (`sloupec1`, `sloupec2`, `sloupec3`, `sloupec4`) VALUES
(1, 2, 3, 4);

a když vyšší než 1 tak:
INSERT INTO `table` (`sloupec1`, `sloupec2`, `sloupec3`, `sloupec4`) VALUES
(1, 2, 3, 4),
(5, 6, 7, 8);

určitě to půjde pomocí nějakého cyklu nebo se pletu?

díky ;)
domixx
Profil
hmm.. asi jo ;-) je to moc obecný...


if (($pocet = count($_POST[???])) > 0) {

$query_a = "INSERT INTO `table` (`sloupec1`, `sloupec2`, `sloupec3`, `sloupec4`) VALUES";

for ($i=0;$i<=$pocet;$i++) {
for ($j=0;$j<4;$j++) {
$query_b = $radek[$i][$j];
if ($j < 3) {
$query_b .= ",";
}
}
if ($i < $pocet) {
$query_b = "(".$query_b."),";
}
else $query_b = "(".$query_b.");";
}
$query = $query_a." ".$query_b;
}


kde pole $radek[$i][$j] jsou prvky (1,2,3,4)(.....)

Netestoval jsem to, je to pro inspiraci ;-)
Joker
Profil
No tak to popsané by šlo udělat tak, že se prostě ty dva napsané příkazy dají do if-else :)

Ale to asi nebude přesně to zadání a nejsem si jistý, jak to zadání vlastně mělo znít.
Pokud jsou v $_POST vždycky čtveřice hodnot, které se mají INSERTovat, dalo by se to řešit i přes implode, ale jak přesně, to s tímhle zadáním těžko říct.
Ondraj
Profil *
domixx
nevim, zda jsme se pochopili, zdá se mi to nějak moc složitý...

no zkusím to tedy vysvětlit znovu v bodech:
1)uživatel vybere nějaké checkboxy
2)já si zjistím, které +jejich ID
3)načtu si to do pole
4)zjistim počet ID v poli
5)teď přichází hlavní bod a to provedení INSERT sql dotazu, pokud bude počet ID v poli roven 1 sql bude v tomto tvaru (sloupce a hodnoty jsou vymyšlené, pouze pro ukázku):
INSERT INTO `tabulka` (`sloupec1`, `sloupec2`, `sloupec3`, `sloupec4`) VALUES
(hodnota_sloupce1, blabla, nejake_id, treba_text);
a pokud bude počet ID v poli větší jak 1, třeba 3, tak by SQL vypadal takto:
INSERT INTO `tabulka` (`sloupec1`, `sloupec2`, `sloupec3`, `sloupec4`) VALUES
(hodnota_sloupce1, blabla, nejake_id, treba_text),
(hodnota_sloupce1, blabla2, nejake_id2, treba_text2),
(hodnota_sloupce1, blabla3, nejake_id3, treba_text3);

prostě podle počtu ID v poli přidat další hodnoty (VALUES(hodnota1, hodnota2,...))

snad jsem to vysvětlil lépe..

díky za pomoc
domixx
Profil
nějak jsem se s tím drbal, snad to k něčemu bude...
víc už dělat nebudu...



$pole_s_daty[] = array('hodnota_sloupce1', 'blabla', 'nejake_id', 'treba_text');
$pole_s_daty[] = array('hodnota_sloupce1', 'blabla', 'nejake_id', 'treba_text');
$pole_s_daty[] = array('hodnota_sloupce1', 'blabla2', 'nejake_id2', 'treba_text2'); //atd...

echo '<br /><br />';
//print_r($pole_s_daty);
//$pocet_id = count($_POST['checkboxy']);

$pocet_id = 3;

if ($pocet_id == 1) { //jestliže je jeden chcebox, pak insert je takovýto:
echo $query = "INSERT INTO `tabulka` (`sloupec1`, `sloupec2`, `sloupec3`, `sloupec4`) VALUES
(hodnota_sloupce1, blabla, nejake_id, treba_text)";
//další přikazy pro databázi....

} else if ($pocet_id > 1) { //jestliže je více checkboxů, předpokládám, že tolik bude potřeba uložit řádků do DB
$query_a = "INSERT INTO `table` (`sloupec1`, `sloupec2`, `sloupec3`, `sloupec4`) VALUES <br /> "; //první část insertu, ta se nemění, tabulka je furt stejná...
//v cyklu budeme postupně přidávat řádky s hodnotama:
//cyklus s i plní řádky, cyklus s j plní sloupec (představ si to jako matici 4 x X prvků)
//nevím jak máš data, já si zvolil pro příklad pole, třeba:
//$pole_s_daty[0] = array(hodnota_sloupce1, blabla, nejake_id, treba_text);
//$pole_s_daty[1] = array(hodnota_sloupce1, blabla, nejake_id, treba_text);
//$pole_s_daty[2] = array(hodnota_sloupce1, blabla2, nejake_id2, treba_text2); atd...

for ($i=0;$i<$pocet_id;$i++) { //cyklus pro řádky $i
for ($j=0;$j<4;$j++) { //cyklus pro sloupce $j
$query_b[$i] .= $pole_s_daty[$i][$j]; //v cyklu pro sloupce se naplní jeden řádek
if ($j < 3) { //jestliže jsme nenaplnili poslední položku, vložíme čárku (předpoklad: sloupce jsou 4)
$query_b[$i] .= ", "; //výsledek: $query_b je "hodnota_sloupce1, blabla, nejake_id, treba_text"
}
}
if ($i < ($pocet_id-1)) {
$query_b[$i] = "(".$query_b[$i]."),<br />"; //jestliže jsme nenaplnili poslední položku, vložíme čárku a závorky, jinak středník
} else $query_b[$i] = "(".$query_b[$i].")"; //btw: střední se v PHP při sql příkazech nepíše...
}
}

echo $query = $query_a." ".$query_b[2]; //pro testování měň od 0 do 2
Ondraj
Profil *
tak když je vybraný jen jeden checkbox tak to jde ok, ale když jich je více, tak sql dotaz vypadá takhle:
INSERT INTO `table` (`id1`, `id2`, `GID`) VALUES (12, 25, 1382,1380,1381,1379);
tzn. do této části: (12, 25, 1382 je to dobře, ale potom se se měla objevit další závorka, která by byla takto:
(12, 25, 1380

tak jsem tam udělal asi něco blbě já, ty jsi to zkoušel?, abych věděl jestli je chyba u mě

dík moc za ochotu
Ondraj
Profil *
tak se omlouvám, měl jsem tam ještě jednu chybu, ale přesto se mi tam nechce vložit více než jeden záznam:
INSERT INTO `table` (`sloupec1`, `sloupec2`, `sloupec3`) VALUES (12, 3, 1381),

i když mám vybraných více checkboxů, vždy se tam vloží ten poslední vybraný a nakonci je čárka, zkusim s tim ještě něco vykoumat, kdyžtak napiš, jestli jsi to zkoušel někde na localu, díkec ;)
domixx
Profil
Funguje to... jen to nebylo dotažený do konce, abys ses nad tím trochu zamyslel ;-)

Tož konec je ještě:


for ($i=0;$i<$pocet_id;$i++) {

$q .= $query_b[$i];
}
echo $query = $query_a." ".$q;


místo echo $query = $query_a." ".$query_b[2]; //pro testování měň od 0 do 2
Ondraj
Profil *
Předem se omlouvám za více postů za sebou, ale už vim jak na to, ale ještě potřebuji poradit...
když vyberu 2 checkboxy a mam to zapsané takto:
$query = $query_a." ".$query_b[0]." ".$query_b[1];
echo $query;

tak to funguje, ale já potřebuji, aby se tam $query_b[0], $query_b[1] atd... doplnilo automaticky

děkuji předem za pomoc
Ondraj
Profil *
domixx
to je ono, dík moc ;)
domixx
Profil
jj to byl ten poslední cyklus... aspoň žes to pochopil ;-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0