PHP týden Předvánoční slevová akce
Další šance dokončit svůj projekt a získat ceny v hodnotě 10.000 Kč! Pokračování úspěšné letní soutěže - ITnetwork winter
Využij předvánočních slev a získej od nás 20 % bodů navíc zdarma! Zároveň také probíhá PHP týden se slevou na e-learning až 80 %
Avatar
Matěj Zábojník:25. února 17:57

Znova Ahoj, potřeboval bych nějak navést, jak dosáhnou toho, že když mám na určitý den nějakou událost, aby mi to např zezelenalo, tudíž potřebuji nastavit nějaký <td class>. Mám to do určité míry rozpracované, ale vždy, když si vytvořím více než jednu událost, políček nezezelená více, ale formát zmizí.

Zde je část kódu, kde se to snažím řešit

for ($den = 1; $den <= $pocetdnu; $den++, $zacatekmesice++) {
    $datum = $ym . '-' . $den;
    if ($dnes == $datum) {
        $tyden .= '<td class="today"><a class="odkaz" href=showevent.php?ymd='.$datum.'>';
    }
    else if(isset($_REQUEST['ulozit']) && ($eventDate == $ymd)){
        $tyden .= '<td class="event"><a class="odkaz" href=showevent.php?ymd='.$datum.'>';
    }
    else{
        $tyden .= '<td class="obsazeno"><a class="odkaz" href=showevent.php?ymd='.$datum.'>';
    }
    $tyden .= $den . '</a></td>';

Zkusil jsem: Zkoušel jsem tohle řešit nějak takto:

$result = Db::query('
        SELECT name, notes
        FROM udalosti
        WHERE date =?
', $_GET["ymd"]);

session_start();
$_SESSION["result"] = $result;

Do $result se mi uloží počet ovlivněných řádků. To jsem si pak poslal pomocí session_start() do jiného php souboru a nastavil jsem, že pokud je $result > 0, <td class=event>.
Jenže pak mi došlo, že chci $result dřív, něž se tam vůbec něco zapíše.

Chci docílit: Snažím se zkrátka dosáhnout, abych dnu, která má nějakou událost, dal nějakou <td class> a mohl tomu třeba změnit barvu.. závoveň aby políčka nemizely, ale pořád přibývaly. Prostě když budu mít 3 události na 3 různé dny, budou svítit 3 políčka kalendáře jinak.

Popřípadě jestli to na to jdu vůbec dobře...

Když se najde někdo, kdo mě zkusí nějak navést, budu vděčný..

 
Odpovědět
25. února 17:57
Avatar
Odpovídá na Matěj Zábojník
Tomáš Novotný:25. února 20:03

Matěji, přijde mi, že v tom máš trochu nepořádek... jen tak na úvod prošel jsi si důkladně zdejší tutoriály na cykly a if konstrukce, a pak na pole, případně DB a jak z nich získat informace?
Pokud ano doporučuji zopakovat...

zkusím tě navést obecně popisem co dělá tvůj kód... pak to totiž dle mne bude mít přínos, než ti napsat řešení..

for cyklus máš patrně pro procházení jednotlivých dnů v daném měsíci, pokud chápu správně...že?
další řádek vyrobí požadované datum
další 3 řádky řeší pokud je datum dneškem tak to, co se bude zobrazovat v kalendáři má styl today s odkazem...
další 3 řádky řeší pokud není dnes ale platí ...... a tato podmínka mi docela záhada ..... tak se jedná patrně o den události a styl je event a odkaz je na ukaž událost...
a když nevyjde ani jedno z předchozího, tak další 3 řádky vloží styl obsazeno a to opět s odkazem na ukaž událost s datem

v kódu co ti vypisuje kalendář se nikde neřeší, zda pro dané datum, které si vyrobil na 2. řádku existuje v DB alespoň jedna událost .... v tomto místě ses na to DB vůbec nezeptal.... takže se vygeneruje celý kalendář bez této informace...

Nahoru Odpovědět
25. února 20:03
∞ ... the exact amount of possibilities how to deal with the situation ... so by calm, your solution is one of many
Avatar
Vladislav Ladicky:25. února 20:18

Prečo nepoužívaš nejaký template engine? Toto je také error prone zverstvo, že po dokončení projektu zistíš, že minimálne 50% času vývoja si strávil nad hľadaním chýb.

 
Nahoru Odpovědět
25. února 20:18
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Odpovídá na Tomáš Novotný
Matěj Zábojník:25. února 20:50

Rozumím..
půjdu postupně.. cyklus prochází dny v měsíci, to chápeš správně. Další 3 řádky zobrazují dnešní den. Ty 3 řádky potom, tam se snažím řešit zobrazení té události. Ten odkaz s datem je všude, protože ukazuji na ten den, i když tam událost není, což se tam samozřejmě vypíše... v tom souboru showevent.php mám sql příkaz, který když na daný den je událost, událost vypíše, jinak sdělí, že zde událost není. No a snažil jsem se tam zeptat pomocí funkce Db::query, což mi vrátí, jestli na daný den událost vypíše. Jenže ten sql příkaz se přece spustí až po tom, co rozkliknu vybraný den, tudíž mi to správně vypisovalo undefined index, když jsem to použil v tom cyklu. Snažil jsem se to popsat co jsem zkoušel a že mi to nešlo. Chápu že v tom mám velký zmatek, ale snažím se to nějak urovnat a na tohle nemohu přijít. Já teda doufám, že jsem to vysvětlil nějak srozumitelně, jestli něco chápu špatně, tak to bude zřejmě kámen úrazu.

 
Nahoru Odpovědět
25. února 20:50
Avatar
Tomáš Novotný:25. února 21:13

A nebylo by lepší generovat odkaz jen do toho políčka, pro který existuje alespoň nějaká událost? Než kliknout a zjistit, že žádná událost tam není?
Ale zpět k myšlence dotazování se DB v cyklu. Ano to je správná cesta, pokud chceš docílit toho, aby se kalendář podle toho zda existuje událost zbarvil.
(Sice osobně bych to dělal jinak, jedním dotazem na celý měsíc a dotazoval se reindexovaného pole přes datum, případně objektu, nebo úplně jinak ..... ale to je teď vedlejší)
ale vzhledem k tvým znalostem .... to můžeš pořešit tak, že se dotážeš DB v cyklu na každý jednotlivý den podobně jak to máš v tom souboru showevent a dostaneš info uvnitř cyklu, zda pro aktuální datum jsou nebo nejsou události... podle toho zvolíš styl políčka

Editováno 25. února 21:15
Akceptované řešení
+20 Zkušeností
Řešení problému
Nahoru Odpovědět
25. února 21:13
∞ ... the exact amount of possibilities how to deal with the situation ... so by calm, your solution is one of many
Avatar
Matěj Zábojník:25. února 21:36

Když se na to dívám, tak to bude lepší, udělat odkaz jen na políčka kde událost je...Jinak díky, já jsem si sice posílal nějaké proměnné, ale zeptat se znovu v tom cyklu je vlastně jasné. No.. musím na znalostech ještě dost popracovat.. Ale cením tvůj přístup, díky.

 
Nahoru Odpovědět
25. února 21:36
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 6 zpráv z 6.