Autor | Zpráva | ||
---|---|---|---|
gumit Profil |
#1 · Zasláno: 2. 8. 2011, 16:04:24
Dobrý den,
mám takový problém, mám stránku kde přidávám akce. Datum akcí zadávám pomocí Selectu. Ale prosím mi poraďte jak mám to datum zpátky načíst z DB do selectu pro případnou úpravu dané akce, na to nějak neumím přijít. =( Datum je v tabulce datum je v DATE, a jeho hodnota v řádku třeba je 2011-08-02. Děkuji za Vaše odpověďi. |
||
Kry5 Profil |
#2 · Zasláno: 2. 8. 2011, 16:07:07 · Upravil/a: Kry5
Když vypisuješ všechny věci v tom date tak pokaždý zkontroluj jestli se ty dvě data (to z db a to, které přidáváš do selectu) nerovnají a pokud ano, tak tomu selectu přidej:
selected="selected" Takhle jsi to myslel? |
||
gumit Profil |
#3 · Zasláno: 2. 8. 2011, 16:10:14
Nemyslel ukládám datum pomocí <select> jestli se už chápem, jsem to špatně zapsal, jse omlouvám...
mám tři selecty: <select>datum</select>mesic<select></select><select>rok</select> |
||
Kry5 Profil |
#4 · Zasláno: 2. 8. 2011, 16:31:44
Zkus to takhle:
(v proměnné $date je uložen čas z databáze) $edate = explode("-",$date); a pak pokračuješ jak jsem psal výše a u roku použiješ $edate[0] atd. |
||
ugo Profil * |
#5 · Zasláno: 2. 8. 2011, 16:37:26
ja když sem línej něco procházet nebo nevim co nebo je toho prostě hodně, tak to udělám tak, že tam jeden option zduplikuju, neboli že jako první dám ten z databáze, jestli máš psaný selecty ručně, tak je to asi nejpřehlednější řešení, jinak ke každýmu musíš dávat podmínku, ideální řešení a postup již navrhl Kry5
|
||
gumit Profil |
#6 · Zasláno: 2. 8. 2011, 16:44:24
$precti = mysql_query("SELECT * FROM akce WHERE id='$id_edituj'"); if ($vypisdata = mysql_fetch_array($precti)) { $id = $vypisdata["id"]; $nazev = $vypisdata["nazev"]; $clanek = $vypisdata["text"]; $date = $vypisdata["datum"]; $edate = explode("-",$date); } takže nějak takhle to mám chápat? A do daných selectu dám do value napiši echo $edate[0] $edate[1] $edate[2] nebo jak vůbec nevím jak to myslíš =(... A selecty mam rešeny takhle ať máte přehled o čem je řeč =) <select name="mesic" size="1"> <?php $mesice = Array(1=> "ledna", "února", "března", "dubna", "května", "června", "července", "srpna", "září", "října", "listopadu", "prosince"); for($i=1;$i<=12;$i++) { echo '<option value="' . $i . '"'; if($mesic==$i) echo " selected"; echo ">" . $mesice[$i] . "</option>\n"; } ?> </select> |
||
ugo Profil * |
#7 · Zasláno: 2. 8. 2011, 16:49:30
tak by to mělo fungovat no, teda jestli tam máš někde definici co je měsíc, jestli ne tak si dopln -
$nazev = $vypisdata["nazev"]; $clanek = $vypisdata["text"]; $date = $vypisdata["datum"]; $edate = explode("-",$date); $rok=(int)$edate[0]; $mesic=(int)$edate[1]; $den=(int)$edate[2]; |
||
Kry5 Profil |
#8 · Zasláno: 2. 8. 2011, 16:51:53 · Upravil/a: Kry5
Tak u těch měsíců dej:
$month = ltrim($edate[1], '0'); a pak v tom cyklu při každém průběhu uděláš (místo tý podmínky co tam máš teď): if($month == $i) { echo 'selected="selected"'; } Edit: U roků ltrim dávat nebudeš tam jenom: $year = $edate[1]; |
||
ugo Profil * |
#9 · Zasláno: 2. 8. 2011, 16:58:38
převod na int je rychlejší v tomhle případě .... téměř o celý 0.2ms na 1000 opakováních takže o 0.0002 ms :-D:-D (to jen tak OT že mě to zajímalo)
|
||
Kry5 Profil |
#10 · Zasláno: 2. 8. 2011, 17:03:21
A ještě k tomu o 2 znaky kratší :-)...to je ušetřenýho času a paměti!
|
||
ugo Profil * |
#11 · Zasláno: 2. 8. 2011, 17:12:13
když sme u tý optimalizace, bylo by dobrý mysql_fetch_array vynechat a používat
$id=mysql_result($precti,'0',''id); dál nevím zda je třeba vybírat všechna pole z tabulky, taky by to stálo za zváženou a proměnou edate přejmenovat na date aby nevznikala nová žvejkačka v paměti, případně jí po přiřazení smazat unset($date); dál je v definici pole zbytečně "1=>" moc místa v souboru kterej musí php server načíst ;) názvy selectů by v tomhle případě mohly bejt kratší (r,m,d) to by ocenili uživatelé s pomalým připojením kolikrát a kde s epoužívají proměnné jako $nazev, $clanek - nedal by se výpis udělat přímo bez nich jako meziproměných a ušetřit tak jádru přičítáni referencí do zvalu (v tomhle případě naštěstí nedochází ke kopii) ještě bych na něco přišel, ale musím pádit na autobus :D optimalizace 4ever (samozřejmě u roku opravdu převod na int být nemusí, ale myslím že se stejně provede) |
||
gumit Profil |
#12 · Zasláno: 2. 8. 2011, 17:16:55
u těch roků? nemělo by to být takhle? :D
$year = $edate[0]; Takže rekapitulace : $date = $vypisdata["datum"]; $edate = explode("-",$date); $rok= $edate[0]; $mesic = ltrim($edate[1], '0'); $den = ltrim($edate[2], '0'); a u podmínek tohle: if($den == $i) { echo 'selected="selected"';} if($mesic == $i) { echo 'selected="selected"';} if($rok == $i) { echo 'selected="selected"';} Myslím správně? Sem po té práci nějak málo chápavej... A jestli tím ušetřím téměř o celý 0.2ms na 1000 opakováních takže o 0.0002 ms tak sem teda nadšen =DD |
||
Kry5 Profil |
#13 · Zasláno: 2. 8. 2011, 17:20:58
gumit:
Bláznů jako tady ugo si radši nevšímej :-). Teda pokud zrovna nevyvíjíš aplikaci, kde je předpokládaná návštěvnost asi 1 mil. lidé/den pak doporučuji uposlechnout všechny jeho rady. „názvy selectů by v tomhle případě mohly bejt kratší (r,m,d) to by ocenili uživatelé s pomalým připojením“ :-D |
||
Kry5 Profil |
#14 · Zasláno: 2. 8. 2011, 17:22:37
gumit:
Ty milisekundy bys ušetřil pokud by jsi použil řešení od ugo Jinak by to mělo bejt správně. |
||
gumit Profil |
#15 · Zasláno: 2. 8. 2011, 17:41:20 · Upravil/a: gumit
Tak a mám další problém hoší milý =) Jak zjišťuji datum který je dnes.. Dělám to takhle:
// dnesni datum $den = (int)Date("j"); $mesic = (int)Date("n"); $rok = (int)Date("Y"); asi se mi to hádá s tím že to chci editovat. Jak dám upravit načte se dané datum té akce.. Ale jestli mám zaple to co mi zjišťuje dnešní datum :-/ už to nejde... Nevíte jak to mám popřípadě upravit aby to šlo? Jinak Děkuji za předchozí radu funguje to =).. Ještě s tímhle a je to paráda =) |
||
Kry5 Profil |
#16 · Zasláno: 2. 8. 2011, 17:51:52
gumit:
Moc ti nerozumim, ale nebude chyba v tom, že máš pokaždé stejné názvy proměnných? Tj. tím aktuálním datem přepíšeš to z databáze nebo opačně? |
||
gumit Profil |
#17 · Zasláno: 2. 8. 2011, 17:55:12
No jasně ale jak je přejmenuji ... Tak jak zobrazím v těch selectech i upravený a když neupravuji a jen přidavám dnešní datum? Sem si toho taky všiml že se mi schází stejný promněný ale teď nevím jak to ošetřit tak aby se to nehádalo.. Teda doufám myslím to co ty =)
|
||
Kry5 Profil |
#18 · Zasláno: 2. 8. 2011, 17:58:04
Přiznám se, že ti vůbec nerozumim, ale já bych to řešil tak že bych třeba ty proměnný u dnešního data přejmenoval XD
//a jako actual $aden = (int)Date("j"); $amesic = (int)Date("n"); $arok = (int)Date("Y"); A pak samozřejmě to přepsat i tam kde s nima pracuješ (pozor ne tam kde pracuješ s těma s datama z databáze) :-) |
||
gumit Profil |
#19 · Zasláno: 2. 8. 2011, 19:56:25
No ztratili jsme se oba =) asi jak vidím =)
Zkusím znova vysvětlit =) Teď jsme vyřešili problém z načítání z DB do selectu, tím že sme po upravili daný kód nám vznikl další problém a ten o zjištování aktualního datumu. Jestli je pojmenuji jak si to napsal ty, tak bych musel upravit tuhle podmínku if($den == $i) echo 'selected="selected"'; |
||
Kry5 Profil |
#20 · Zasláno: 2. 8. 2011, 20:00:51
gumit:
Co má mít tedy atribut "selected: "selected""? Položky, které odpovídají aktuálnímu datumu nebo tomu načtenému z db? |
||
gumit Profil |
#21 · Zasláno: 2. 8. 2011, 20:06:51
měly by mít aktuální datum, jestli teda uvažuji správně… Ale po kliknutí na EDIT aby se změnilo na datum z té dané akce, kterou edituji. Nevím, jestli nechci od toho moc :-( ...
|
||
Kry5 Profil |
#22 · Zasláno: 2. 8. 2011, 20:13:02
Ne, jen se musíme pochopit :-).
Moc nechápu k čemu ti to bude mít v jednom souboru. Nechtěls to náhodou tak, že pokud přidáváš novou akci tak tam bude aktuální datum, ale pokud edituješ nějakou existující tak se tam dá datum, které bylo zadáno předtim? Potom by to asi bylo v dvou souborech. Jinak v jednom souboru by se to řešilo tak, že bys mu dával GET v adrese a podle toho se rozhodl (podmínkou) jestli tam má být aktuální datum nebo to načtené z db. |
||
gumit Profil |
#23 · Zasláno: 2. 8. 2011, 20:42:34
No myšleno tak, že když tvoříš novou akci... Máš v nabídce aktuální datum. Vytvoříš akci na dané datum, buď aktuální nebo jiné, ale po čase zjistíš že se datum přesouvá tak ho potřebuješ změnit i napsat o změně. Proto to potřebuji, teď plánuji jestli to udělám s aktuálním datumem, nebo tam necham základní datum a bude si vybírat daná osoba jaké ona chce.. Tou tvou podmínkou asi vím přibližně co myslíš. ;-)
|
||
Kry5 Profil |
#24 · Zasláno: 2. 8. 2011, 20:57:40
Počkej ale tak v čem je problém? Pokud vytváříš novou akci (formulář na stránce A) tak tam jako výchozí hodíš aktuální datum. Pokud ho upravuješ (formulář na stránce B) tak tam hodíš výchozí to z db, ale jsou to dva různé formuláře -> dva různé skripty.
Pokud potřebuješ mít v jednom souboru vypsaný jak datum z db tak datum aktuální tak si to akorát uložíš do různých proměnných (např. $aktualnidatum a $datumzdb) a ty pak vypíšeš Jestli chceš mít jeden soubor s jednim formulářem a v něm jako výchozí mít datum z db nebo aktuální datum podle parametru v url adrese (kterej udáš při odkazování na stránku) tak třeba takto: if($_GET["selected"] == "actual") { $den = (int)Date("j"); $mesic = (int)Date("n"); $rok = (int)Date("Y"); } elseif($_GET["selected"] == "db") { $date = $vypisdata["datum"]; $edate = explode("-",$date); $rok= $edate[0]; $mesic = ltrim($edate[1], '0'); $den = ltrim($edate[2], '0'); } Ale nechápu k čemu by ti tohle bylo, protože to jsou 2 odlišný stránky a to bych dal radši do dvou souborů už jenom kvůli přehlednosti. |
||
gumit Profil |
#25 · Zasláno: 2. 8. 2011, 21:03:06
Asi máš pravdu =) Budu to tak muset udělat ;-) Díky moc za všechny rady. =) A moc si mi pomohl ;-) Zase někdy =)
|
||
Časová prodleva: 14 let
|
0