Autor | Zpráva | ||
---|---|---|---|
Martin V. Profil * |
#1 · Zasláno: 2. 8. 2011, 11:51:57
Ahoj, potřebuji uložit do mysql více hodnot najednou ale ukládá se vždy jen poslední input.
zde přikládám kod: <?php if(isset($_POST['save'])){ mysql_query("UPDATE rubriky SET level = '".$_POST['level']."' WHERE id = '".$_POST['id']."' "); } echo '<form action="" method="POST">'; echo '<input type="text" name="level" size="2" value="0">'; echo '<input type="text" name="id" size="2" value="41">'; echo '<input type="text" name="level" size="2" value="0">'; echo '<input type="text" name="id" size="2" value="42">'; echo '<input type="text" name="level" size="2" value="0">'; echo '<input type="text" name="id" size="2" value="43">'; echo '<input type="text" name="level" size="2" value="0">'; echo '<input type="text" name="id" size="2" value="44">'; echo '<input name="save" type="submit" value="SAVE" />'; echo '</form>'; ?> Poradí někdo, kde mám chybu? Děkuji za pomoc |
||
djlj Profil |
#2 · Zasláno: 2. 8. 2011, 11:54:47
Máš je totiž všechny stejně pojmenované, takže ten poslední "přepíše" ty předchozí. Pojmenuj je všechny level[] a id[] a po odeslání to pole projdi třeba funkcí foreach.
|
||
Martin V. Profil * |
#3 · Zasláno: 2. 8. 2011, 12:07:22
Jako takto?
echo '<input type="text" name="level[]" size="2" value="0">'; echo '<input type="text" name="id[]" size="2" value="41">'; echo '<input type="text" name="level[]" size="2" value="0">'; echo '<input type="text" name="id[]" size="2" value="42">'; echo '<input type="text" name="level[]" size="2" value="0">'; echo '<input type="text" name="id[]" size="2" value="43">'; echo '<input type="text" name="level[]" size="2" value="0">'; echo '<input type="text" name="id[]" size="2" value="44">'; Díky |
||
djlj Profil |
#4 · Zasláno: 2. 8. 2011, 12:09:23
Jojo, přesně tak. Po odeslání budeš mít pole $_POST['level'] a $_POST['id'] se všemi hodnotami ;).
|
||
Martin V. Profil * |
#5 · Zasláno: 2. 8. 2011, 12:13:31
No ale co s tím dál?
|
||
djlj Profil |
#6 · Zasláno: 2. 8. 2011, 12:14:57
Třeba:
if(isset($_POST['save'])){ for($i=0;$i<count($_POST['level']);$i++){ mysql_query("UPDATE rubriky SET level = '".$_POST['level'][$i]."' WHERE id = '".$_POST['id'][$i]."' "); } } |
||
Martin V. Profil * |
#7 · Zasláno: 2. 8. 2011, 12:22:11
Tak to pole vidím, ale nic se neuloží, už ani ten poslední input ;)
|
||
o_O Profil |
#8 · Zasláno: 2. 8. 2011, 12:30:23
Martin V.:
Mohl by jste prosím ukázat Váš kód? |
||
Martin V. Profil * |
#9 · Zasláno: 2. 8. 2011, 12:36:54
Ano, teď to mám přesně takto
<?php if (isset($_POST['save'])){ for($i=0; $i<count($_POST['level']); $i++){ mysql_query("UPDATE rubriky SET level = '".$_POST['level'][$i]."' WHERE id = '".$_POST['id'][$i]."' "); } } echo '<form action="" method="POST">'; echo '<input type="text" name="level[]" size="2" value="0">'; echo '<input type="text" name="id[]" size="2" value="23">'; echo '<input type="text" name="level[]" size="2" value="0">'; echo '<input type="text" name="id[]" size="2" value="42">'; echo '<input type="text" name="level[]" size="2" value="0">'; echo'<input type="text" name="id[]" size="2" value="43">'; echo '<input type="text" name="level[]" size="2" value="0">'; echo '<input type="text" name="id[]" size="2" value="48">'; echo '<input type="text" name="level[]" size="2" value="0">'; echo '<input type="text" name="id[]" size="2" value="23">'; echo '<input type="text" name="level[]" size="2" value="0">'; echo '<input type="text" name="id[]" size="2" value="2">'; echo '<input name="save" type="submit" value="SAVE" />'; echo '</form>'; ?> ale když se na to dívám očima začátečníka, tak nebude problém v tom, že v těch inputech to id není popořadě? |
||
o_O Profil |
#10 · Zasláno: 2. 8. 2011, 12:39:47 · Upravil/a: o_O
Martin V.:
„nebude problém v tom, že v těch inputech to id není popořadě?“ Ne, tím to nebude. Pokud jsou seřazeny záznamy popořadě tak, že první ID patří prvnímu LEVEL, má to fungovat nehledě na pozici v databázi. Zkuste vypsat mysql_error(), s tím to půjde jednodušeji. V PHP problém nevidím. mysql_query("UPDATE rubriky SET level = '".$_POST['level'][$i]."' WHERE id = '".$_POST['id'][$i]."' ") or die(mysql_error()); |
||
Martin V. Profil * |
#11 · Zasláno: 2. 8. 2011, 12:46:24
o_O:
„Ne, tím to nebude. Pokud jsou seřazeny záznamy popořadě tak, že první ID patří prvnímu LEVEL, má to fungovat nehledě na pozici v databázi.“ No nejsou popořadě. Je to jen nějaká část dat z mysql... |
||
o_O Profil |
#12 · Zasláno: 2. 8. 2011, 12:58:13 · Upravil/a: o_O
Martin V.:
„No nejsou popořadě. Je to jen nějaká část dat z mysql...“ Podle toho, jak máte zapsány řádky s inputy tak jsou. Mluvím o tom, že na stránce (z pohledu zdrojových kódů) se musí level[] a id[] vypisovat tak, aby patřili k sobě. Tzn.: echo '<input type="text" name="level[]" size="2" value="0">'; echo '<input type="text" name="id[]" size="2" value="23">'; // inputy nahoře patří k sobě, to samé inputy dole. echo '<input type="text" name="level[]" size="2" value="0">'; echo '<input type="text" name="id[]" size="2" value="2">'; Ne, že by se vypisoval level[] a pod ním id[] k úplně jinému level[]-u. Snad je to srozumitelné. Prohlížeč odesílá všechny formulářové prvky tak, jak jsou napsány ve zdrojovém kódu, tzn. $_POST['id'][0] bude mít hodnotu 23, 1 pak 42 atd. Mimochodem když se dívám na Váš formulář, máte tam id[] 23 2×, takže přepisujete něco, co už jste přepsal. Vypisuje něco ten mysql_error, popř. co přesně? |
||
Martin V. Profil * |
#13 · Zasláno: 2. 8. 2011, 13:14:06
Tak problém je v tomto
for($i=0; $i<count($_POST['level']); $i++){ Když to budu mít takto, tak se uloží všechno echo '<input type="text" name="level[]" size="2" value="0">'; echo '<input type="text" name="id[]" size="2" value="1">'; echo '<input type="text" name="level[]" size="2" value="0">'; echo '<input type="text" name="id[]" size="2" value="2">'; echo '<input type="text" name="level[]" size="2" value="0">'; echo'<input type="text" name="id[]" size="2" value="3">'; echo '<input type="text" name="level[]" size="2" value="0">'; echo '<input type="text" name="id[]" size="2" value="4">'; echo '<input type="text" name="level[]" size="2" value="0">'; echo '<input type="text" name="id[]" size="2" value="5">'; echo '<input type="text" name="level[]" size="2" value="0">'; echo '<input type="text" name="id[]" size="2" value="6">'; Když to budu mít ale takto, tak se uloží všechno kromě toho posledního inputu, jelikož count jobsahuje počet hodnot v tom poli což je 6 a poslední input má id 20 a tak se už neuloží echo '<input type="text" name="level[]" size="2" value="0">'; echo '<input type="text" name="id[]" size="2" value="1">'; echo '<input type="text" name="level[]" size="2" value="0">'; echo '<input type="text" name="id[]" size="2" value="2">'; echo '<input type="text" name="level[]" size="2" value="0">'; echo'<input type="text" name="id[]" size="2" value="3">'; echo '<input type="text" name="level[]" size="2" value="0">'; echo '<input type="text" name="id[]" size="2" value="4">'; echo '<input type="text" name="level[]" size="2" value="0">'; echo '<input type="text" name="id[]" size="2" value="5">'; echo '<input type="text" name="level[]" size="2" value="0">'; echo '<input type="text" name="id[]" size="2" value="20">'; když ale přidám do toho count třeba +20 for($i=0; $i<count($_POST['level'])+20; $i++){ tak se uloží všechno :( tak nevím jak tu podmínku správně zapsat v tom for |
||
Martin V. Profil * |
#14 · Zasláno: 2. 8. 2011, 13:16:29
o_O:
„Vypisuje něco ten mysql_error, popř. co přesně?“ Vypisuje to Notice: Undefined offset |
||
o_O Profil |
#15 · Zasláno: 2. 8. 2011, 13:22:44 · Upravil/a: o_O
Martin V.:
Count vrací počet, tzn. v tomto případě 6, což je správně. Správně je i ten for(), který projede všechny odeslané hodnoty (0-5 =6). Aby jste to správně pochopil. Value ve formulářovém prvku není klíč pole (tedy číslo, které je zapsáno v $_POST['level'][X]), ale jeho hodnota, tzn. $_POST['level'][X]=hodnota. > Vypisuje to > Notice: Undefined offset To číslo za touto chybou je taktéž důležité, znamená, že neexistuje $_POST['level'][číslo]. Ovšem nemá to nic společného s databází, ale s PHP (počítám, že jste tam nechal to +20). Mě spíše zajímá, co vypisuje mysql_error(), jelikož zpracování toho formuláře je správně. |
||
Martin V. Profil * |
#16 · Zasláno: 2. 8. 2011, 14:03:08
o_O:
„Mě spíše zajímá, co vypisuje mysql_error(), jelikož zpracování toho formuláře je správně.“ Když dám uložit tento formulář, tak mi to píše Notice: Undefined offset: 0 Notice: Undefined offset: 0 Notice: Undefined offset: 21 Notice: Undefined offset: 21 Notice: Undefined offset: 22 Notice: Undefined offset: 22 Notice: Undefined offset: 23 Notice: Undefined offset: 23 Notice: Undefined offset: 24 Notice: Undefined offset: 24 Notice: Undefined offset: 25 Notice: Undefined offset: 25 Notice: Undefined offset: 26 Notice: Undefined offset: 26 Notice: Undefined offset: 27 Notice: Undefined offset: 27 Notice: Undefined offset: 28 Notice: Undefined offset: 28 Notice: Undefined offset: 29 Notice: Undefined offset: 29 Notice: Undefined offset: 30 Notice: Undefined offset: 30 Notice: Undefined offset: 31 Notice: Undefined offset: 31 a ve formuláři se označené inputy neuloží (od id 111) <input type="text" name="level[1]" value="338"> <input type="text" name="id[1]" value="1"> <input type="text" name="level[2]" value="33"> <input type="text" name="id[2]" value="2"> <input type="text" name="level[3]" value="0"> <input type="text" name="id[3]" value="3"> <input type="text" name="level[4]" value="0"> <input type="text" name="id[4]" value="4"> <input type="text" name="level[5]" value="0"> <input type="text" name="id[5]" value="5"> <input type="text" name="level[6]" value="0"> <input type="text" name="id[6]" value="6"> <input type="text" name="level[7]" value="0"> <input type="text" name="id[7]" value="7"> <input type="text" name="level[8]" value="0"> <input type="text" name="id[8]" value="8"> <input type="text" name="level[9]" value="0"> <input type="text" name="id[9]" value="9"> <input type="text" name="level[10]" value="0"> <input type="text" name="id[10]" value="10"> <input type="text" name="level[11]" value="12"> <input type="text" name="id[11]" value="11"> <input type="text" name="level[12]" value="1"> <input type="text" name="id[12]" value="12"> <input type="text" name="level[13]" value="1"> <input type="text" name="id[13]" value="13"> <input type="text" name="level[14]" value="1"> <input type="text" name="id[14]" value="14"> <input type="text" name="level[15]" value="1"> <input type="text" name="id[15]" value="15"> <input type="text" name="level[16]" value="1"> <input type="text" name="id[16]" value="16"> <input type="text" name="level[17]" value="1"> <input type="text" name="id[17]" value="17"> <input type="text" name="level[18]" value="1"> <input type="text" name="id[18]" value="18"> <input type="text" name="level[19]" value="18"> <input type="text" name="id[19]" value="19"> <input type="text" name="level[20]" value="18"> <input type="text" name="id[20]" value="20"> <input type="text" name="level[111]" value="2"> <input type="text" name="id[111]" value="111"> <input type="text" name="level[112]" value="2"> <input type="text" name="id[112]" value="112"> <input type="text" name="level[113]" value="2"> <input type="text" name="id[113]" value="113"> <input type="text" name="level[114]" value="2"> <input type="text" name="id[114]" value="114"> <input type="text" name="level[115]" value="2"> <input type="text" name="id[115]" value="115"> <input type="text" name="level[116]" value="2"> <input type="text" name="id[116]" value="116"> <input type="text" name="level[117]" value="2"> <input type="text" name="id[117]" value="117"> <input type="text" name="level[118]" value="2"> <input type="text" name="id[118]" value="118"> <input type="text" name="level[119]" value="2"> <input type="text" name="id[119]" value="119"> <input type="text" name="level[120]" value="2"> <input type="text" name="id[120]" value="120"> <input type="text" name="level[1111]" value="3"> <input type="text" name="id[1111]" value="1111"> <input type="text" name="level[1112]" value="0"> <input type="text" name="id[1112]" value="1112"> tak fakt už nevím :( navíc potřebuji uložit jen value level[], value id[] mě nezajíma... Děkuji |
||
o_O Profil |
#17 · Zasláno: 2. 8. 2011, 14:25:30 · Upravil/a: o_O
Martin V.:
„<input type="text" name="level[1112]" value="0">“ Do těch závorek se čísla nepíší, pokud používáte for(). Abych Vám vysvětlil, proč se vypisuje tato chyba. for() do určitého čísla (Vámi definovaného) opakuje příkazy uvnitř, takže v případě, že mu dáte opakování na počet odeslaných inputů, pojede prostě od nuly do count($_POST['level']). Ve Vašem formuláři ovšem jako klíče (to je to uvnitř závorek, např. 1112) vybíráte vlastní čísla, což for() nemůže vědět a proto při neexistující proměnné $_POST['level'][číslo] vyhodí chybu. Pokud potřebujete / chcete mít strukturu formuláře takto, doporučoval bych foreach, např: foreach($_POST['level'] AS $key=>$value){ mysql_query("UPDATE rubriky SET level = '{$value}' WHERE id = '{$key}' ") or die(mysql_error()); } /** * V případě <input type="text" name="level[1112]" value="0"> * Bude obsah proměnných $key=1112 a $value=0 **/ Tady pak projíždí každý poslaný level[] a je jedno, jaký klíč má přidělen, jestli 0-100, nebo 1000-1100, či jakékoliv náhodné čisla. Pro pochopení for() si například můžete vypsat: for($i=0;$i<=100;$i++) echo $i.'<br>'; A přesně toto hledá i v $_POST['level'], a to i když neexistuje. |
||
Tori Profil |
#18 · Zasláno: 2. 8. 2011, 14:33:18
Martin V.:
Když píšete, že ty hodnoty čtete z DB a můžete teda použít level[ID] = hodnota, tak tohle je už na správné cestě: <input type="text" name="level[1]" value="338"> |
||
Martin V. Profil * |
#19 · Zasláno: 2. 8. 2011, 14:38:12
o_O:
Tak to je teď jiná ;) Strašně moc děkuji... hlavně za perfektní objasnění. Je vidět, že tomu opravdu rozumíte... BTW: živíte se programováním v PHP? Pokud ano, můžete mi prosím na vás poslat nějaký kontakt na www-data[@]centrum.cz samozřejmě by se jednalo o takové drobné úpravy za fin. odměnu Ještě jednou moc děkuji. |
||
Časová prodleva: 13 let
|
0