Autor | Zpráva | ||
---|---|---|---|
Rodrigez Profil * |
#1 · Zasláno: 16. 1. 2012, 19:00:57
Mám tabulku MySQL jménem clanky, která má sloupce clanky_id a clanky_stav (int).
Mám další relativní tabulku stav s hodnotami pro tabulku clanky, která obsahuje sloupce stav_id a stav_nazev. Tabulku clanky zobrazím pomocí MYSQL FETCH ARRAY a WHILE do NAME atributu formuláře. U každého řádku se zobrazí ve formuláři rozevírací SELECT, kde je na výběr seznam hodnot z tabulky stav Takže můžu hromadně u všech řádků tabulky clanky změnit stav a pomocí tlačítka odeslat změnit hodnotu u clanky_stav. Co nevím, je jak na to. |
||
Martin02 Profil |
#2 · Zasláno: 16. 1. 2012, 19:47:59
Zdravím,
moc jsem tomu neporozuměl. Přes while vypíšeš do select hodnoty z tabulky stav. A co s nimi chceš dělat dál? |
||
Tori Profil |
#3 · Zasláno: 16. 1. 2012, 20:01:52
Rodrigez:
Pojmenovávejte selecty tak, abyste ve výsledku dostal jedno pole, kde klíče budou ID článků: <select name="pole[$id_clanku]"> Při zpracování formuláře tohle pole projdete cyklem foreach a poskládáte si SQL dotaz pro update jednotlivých článků.
Taky si můžete při generování formuláře uložit do session kopii dat z DB (jako pole, obsahující páry id_článku => stav), a při zpracování porovnávat hodnoty z formuláře s hodnotami v session (na základě id článku). Tak zjistíte, u kterých článků byla ve formuláři změněná hodnota id_stav, a můžete updatovat jen tyto řádky v DB. (Málokdy asi budete měnit stav u všech článků naráz, takže ve většině případů se tímhle postupem zpracování formuláře zrychlí). |
||
Rodrigez Profil * |
#4 · Zasláno: 17. 1. 2012, 00:21:06
Tori: Něco takového? Ještě pořád trochu tápu, jak by to mělo být, aby to fungovalo.
´// Samotná úprava (ve stejném souboru) If(isset($_POST["odeslat-uprava"])) { $pocitani = count($_POST['ec_id']); // začít smyčku pro aktualizaci všech údajů $i = 0; while ($i < $pocitani) { // definice proměnných $ec_id= $_POST['ec_id'][$i]; $ec_stav = $_POST['ec_stav'][$i]; $upravit_stav_clanky = mysql_query("UPDATE clanky SET c_stav = '".$ec_stav."' WHERE c_id = '".$ec_id."' LIMIT 1"); ++$i; } } //=================================================================================================== $i = 0; // ... SQL dotaz $vysledek_clanek vynechán ... while ($radek_clanek = mysql_fetch_array($vysledek_clanek, MYSQL_ASSOC)) { $c_id = $radek_clanek['c_id']; // ... atd. atd. ... ++$i; // počítání počtu proměnných pro smyčku pro nastavení c_stav echo '<input type="hidden" name="ec_id[$i]" value="'.$c_id.'" >'; // získá id článku pomocí fetch array echo '<select name="ec_stav[$i]">'; $vysledek_clanek_stav= mysql_query("SELECT cs_id, cs_nazev FROM clanky_stav ORDER by cs_id ASC"); while ($radek_clanek_stav = mysql_fetch_array($vysledek_clanek_stav, MYSQL_ASSOC))// získá relativní stavy článků { $cs_id = $radek_clanek_stav['cs_id']; $cs_nazev = $radek_clanek_stav['cs_nazev']; echo '<option value="'.$cs_id.'">'.$cs_nazev.'</option>'; } // ... atd. atd. ... |
||
Tori Profil |
Formulář:
* ř.28+29 - máte apostrofy místo uvozovek, nezobrazí se hodnota $i * ř.30-36 - Možné stavy jsou stejné pro kterýkoli článek, zbytečné číst je xkrát znova. <Option>s s možnými stavy si uložte do proměnné ještě před začátkem formuláře, pak stačí jen měnit jméno <select>u - možnosti budou pořád stejné. * místo skrytého pole + číslování podle nějaké vygenerované řady od 0 do x můžete použít rovnou ID článku echo '<select name="ec_stav['.$radek_clanek['c_id'].']">';
Zpracování: * ř.8 - použila bych raději foreach($_POST['ec_stav'] as $id_clanku=>$id_stavu) - souvisí s tou předchozí poznámkou o přejmenování selectů.
* escapujte data, která posíláte do databáze! (ř.10,11) - pro celá čísla se používá funkce intval |
||
Rodrigez Profil * |
#6 · Zasláno: 17. 1. 2012, 02:15:51
To snad není pravda, ono to funguje. Jsi dobrá! (dobrý). Děkuji. Já vím, že dělám hodně začátečnických chyb, ale snažím se pracovat systematicky. Chyby si někam zapíšu a až to bude hotové, tak to změním najednou, protože jinak pořád nacházím různé "verze" a pak je to o ničem celé to opravovat. Ještě jednou dík.
|
||
Tori Profil |
#7 · Zasláno: 17. 1. 2012, 18:58:46
Rodrigez:
„pořád nacházím různé "verze" a pak je to o ničem celé to opravovat.“ Nevím, jestli to na vás není brzo, ale zkuste kouknout na verzování. Je to docela fajn, mít nástroj, který vám umožní vyzkoušet nějakou novou věc, a když to nebude fungovat, tak se zase vrátit ke kterékoli [uložené] starší podobě kódu. Anebo mít paralelně několik větví aplikace, ve kterých si něco zkoušíte a podle toho, jak se to osvědčí, to jednoduše přidat do hlavní větve nebo zahodit. Pokud by vás to dál zajímalo, najdete i tady na diskusi řadu témat ohledně výběru/doporučení verzovacího SW. |
||
Časová prodleva: 13 let
|
0