Geek tričko zdarma Geek tričko zdarma
Tričko zdarma! Stačí před dobitím bodů použít kód TRIKO15. Více informací zde
Avatar
gorri
Člen
Avatar
gorri:23. května 12:22

Ahoj,
prosím. Opět bych potřeboval nasměrovat správným směrem.
Napsal jsem si script pro hromadné nahrávání fotografií do eshopu. Pak bude pro mě jednodušší vybrat fotku k produktu jen ze select. Nicméně některé fotografie budou mít i popisek. Takže po nahrátí mi zobrazí všechny aktuálně nahrané fotografie spolu s inputy kam se může napsat co potřebuji. Nicméně jsem narazil na zádrhel. Uložení.
Například mám 3 fotografie a u všech se zobrazí

<input type="text" name"nadpis">
<textarea name="obsah"></textarea>

a netuším jak uložit všechny hodnoty najednou.
Přikládám kód pro lepší představu jak jsem to udělal. Uznávám, že je to asi prapodivný způsob ale vše funguje dokud nedám uložit. Nic se nezpracuje.

<h1>Dokončení</h1>
<?php
if(Db::querySingle('SELECT * FROM photos WHERE process=?', 0))
{
    echo '<form method="POST" class="process">';
    if($_POST['add-photo'])
    {
        foreach (Db::queryAll('SELECT * FROM photos WHERE process=?', 0) as $d) {
            Db::query('
                        UPDATE photos
                        SET nadpis=?, popis=?, link=?, process=?
                        WHERE uid=?
                ',$_POST['nadpis'],$_POST['description'], $_POST['link'], $_POST['uid']);
        }
    }
    foreach (Db::queryAll('SELECT * FROM photos WHERE process=?', 0) as $pf) {
        ?>
<stepp>
    <img src="/photos/<?php echo (htmlspecialchars($pf['url']));
         if($pf['druh'] == 1)
         {
             echo '/eshop/produkty/';
         }
         else
         {
             if($pf['druh'] == 2)
             {
                 echo '/eshop/category/';
             }
             else
             {
                 if($pf['druh'] == 3)
                 {
                     echo '/content/';
                 }
             }
         }
         echo (htmlspecialchars($pf['foto']));
         ?>
         ">
    <input type="hidden" name="uid" value="<?= htmlspecialchars($pf['uid']); ?>">
    <label for="nadpis">Nadpis u fotografie</label>
    <input type="text" name="nadpis">

    <label for="description">Text u fotografie</label>
    <textarea name="description"></textarea>

    <label for="link">Odkaz u fotografie</label>
    <input type="text" name="link">
</stepp>
<?php
    }
    echo '<div class="clear"></div>';
    echo '<input type="submit" value="Pokračovat" name="add-photo">';
    echo '</form>';
}
?>

Děkuji za případnou radu :-)

Zkusil jsem: google, foreach

Chci docílit: Uložení informací k fotografii

Editováno 23. května 12:23
Odpovědět 23. května 12:22
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
Odpovídá na gorri
Tomáš Novotný:23. května 12:44

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".

Editováno 23. května 12:46
Nahoru Odpovědět 23. května 12:44
∞ ... the exact amount of possibilities how to deal with the situation ... so by calm, your solution is one of many
Avatar
gorri
Člen
Avatar
Odpovídá na Tomáš Novotný
gorri:23. května 12:51

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?

Nahoru Odpovědět 23. května 12:51
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
Odpovídá na gorri
Tomáš Novotný:23. května 13:18

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..

Nahoru Odpovědět 23. května 13:18
∞ ... the exact amount of possibilities how to deal with the situation ... so by calm, your solution is one of many
Avatar
gorri
Člen
Avatar
Odpovídá na Tomáš Novotný
gorri:23. května 13:23

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 :-)

Nahoru Odpovědět 23. května 13:23
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:23. května 15:44

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_fi­le...
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)
)
Editováno 23. května 15:45
 
Nahoru Odpovědět 23. května 15:44
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
gorri
Člen
Avatar
Odpovídá na Peter Mlich
gorri:23. května 18:25

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.

Nahoru Odpovědět 23. května 18:25
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:24. května 7:54

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]
Editováno 24. května 7:55
 
Nahoru Odpovědět 24. května 7:54
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:24. května 8:06

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

 
Nahoru Odpovědět 24. května 8:06
Avatar
gorri
Člen
Avatar
Odpovídá na Peter Mlich
gorri:24. května 9:52

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 :-)

Nahoru Odpovědět 24. května 9:52
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:24. května 10:43

" 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.

Editováno 24. května 10:44
 
Nahoru Odpovědět 24. května 10:43
Avatar
gorri
Člen
Avatar
Odpovídá na Peter Mlich
gorri:24. května 11:16

Jo no

Nahoru Odpovědět 24. května 11:16
Když vím, tak poradím. Nikdo neví všechno :-)
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 12 zpráv z 12.