Diskuze: Zpracování více stejných name ve formuláři
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 12 zpráv z 12.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj,
řekl bych, že zádrhel bude v tom, že neprocházíš cyklem data v $_POST,
ale záznamy v DB.
Česky, jak jsem přečetl část kódu... php server si říká: "pokud mi bylo
posláno add-photo tak vyberu některé řádky z DB a ke všem přidám z
přijatých informací stejný nadpis, popis, odkaz a nějaký
identifikátor".
I to mě napadlo. Proto jsem to zkusil jen vložit ale stejně nic
if($_POST['add-photo'])
{
Db::query('
UPDATE photos
SET nadpis=?, popis=?, link=?, process=?
WHERE uid=?
',$_POST['nadpis'],$_POST['description'], $_POST['link'], $_POST['uid']);
}
Nebo to myslíš jinak? Pokud ano, tak jsem to asi moc nepochopil. Mohl bych tě požádat o nasměrování ve scriptu?
Potíž je v
$_POST['nadpis'],$_POST['description'], $_POST['link'], $_POST['uid']
vlož si do kódu třeba
echo '<pre>';
print_r[$_POST];
a tam už bych řekl, že to uvidíš sám a pokud ne hned na první dobrou
tak podumej, aha moment jistě přijde..
OK. Díky zkusím. Ještě mě napadlo, že to zkusím cyklem for().
Spočítá se kolik je tam záznamů a na základě toho by se to mohlo uložit
ke správnému. Zkusím a uvidím. Každopádně díky
Ja bych si udelal script zvlast pro nahravani, treba pomoci drag-drop a multifile. A popisky bych dopisoval dodatecne. Vytahl to pak z db s id
move_uploaded_file...
INSERT ...
<div class=cart>
<img src="...">
<input type="text" value="" name="images[456][title]">
<textarea name="images[456][desc]"></textarea>
</div>
<div class=cart>
<img src="...">
<input type="text" value="" name="images[457][title]">
<textarea name="images[457][desc]"></textarea>
</div>
// V POSTu bys pak mel mit pole
var_dump($_POST['images']);
array(
456 => array(title => titulek, desc => popisek),
457 => array(title => titulek, desc => popisek)
)
Ono těch fotek může být více. A já to mám tak, že nahraju fotky, uloží se, provede se zápis do DB a pak se vytáhne jen kolik jich tam je a na základě toho se pokračuje. Teď už mám ten script upravený. Napsal jsem to nakonec tak, že to vytáhne jeden, nechá mě do toho zapsat nebo přeskočit zápis. Pak se podívá jestli tam je další. Když ne, tak hotovo. Šel jsem řekněme jednodušší cestou, když se mi nedařilo abych to mohl napsat pro všechny najednou.
Jj. Pro 5 fotek je to ok, ale pro vic uz nee.
Tabulka je vlastne podobna tvemu problemu.Jeste by to slo zapsat treba s
pomlckami a pak bys z toho musel to id dolovat (cislo radku).
<input name="jeden ze seznamu">
table[1][1], table[1][2], table[1][3]
table[2][1], table[2][2], table[2][3]
table[radek1][sloupec1], table[radek1][sloupec2], table[radek1][sloupec3]
table[radek2][sloupec1], table[radek2][sloupec2], table[radek2][sloupec3]
table_1_1, table_1_2, table_1_3
table_2_1, table_2_2, table_2_3
images[456][title], images[456][desc]
images[457][title], images[457][desc]
A jeste mne napadlo pouzit pole bez cisel (indexu, nazvu). By sis musel ale
pak hlidat poradi sloupcu. Takze je lepsi ukecanejsi reseni
table[1][], table[2][]
table[1][1], table[1][2] // lepsi
Vsak podobnym zpusobem jsem to udelal. Akorat ze se mi to neukladalo vsechno
ale bylo tam vzdy jine ID. Nicmene uz asi vim kde je problem. I když mám
víceméně pro každý obrázek vlastní pole, tak to zpracuje vždy poslední
položku. Tak jsem to raději udělal tak, že se mi načte vše pro jeden
obrázek, spočítá se kolik jich je ještě v DB nezpracovaných a pak mi to
vyhodi dalsi obrázek. Jednodušší. Každopádně děkuji všem za rady
" zpracuje vždy poslední položku"
pokud mas cyklus typu
cyklus() {nacti(i)} // nacte treba 10 obrazku
zapis(i) // zapise posledni, protoze zapis neni uvnitr cyklu
To se pak nediv
Pripadne, jak pises na zacatku, pokud polickam das stejne name, tak samozrejme php veme posledni polozku. Vsechny predchozi se stejnym name prepise vzdy tou nasledujici, logicky.
Zobrazeno 12 zpráv z 12.