Autor | Zpráva | ||
---|---|---|---|
seky728 Profil |
#1 · Zasláno: 13. 9. 2016, 19:25:51
Zdravím všechny,
potřeboval bych pomoct. Už se nějaký ten týden trápím s jednou věcí a nemohu na to přijít a ani ji nikde najít. Mám úplně obyčejný kalendář generovaný pomocí php a vypisuji ho pomocí cyklu for, počet dní, první den měsíce atd. mám pomocí date. V databázi mám id a datum závodu. Databázové datum jsem rozdělil pomocí textových funkcí (strpos, substr..) na databazový den, měsíc a rok. Jinak ve škole nás učili načítat záznami v databazi pomocí while. A já potřebuji když se mi vygenerují ty dny v kalendáři tak, aby ty co budou v databázi, aby se na ně dalo kliknout. Pokusil jsem se to popsat co nejpřesněji a co nejstručněji, po případě samozřejmě další info dopíšu. Předem děkuji |
||
Taps Profil |
#2 · Zasláno: 13. 9. 2016, 22:52:54
Mrkni na rjwebdesign.cz/blog/PHP/20080112-Jak-Vytvorit-PHP-Kalendar . Tam je ukazka jak zvyraznit dny..v tvem pripade pak das do while podminku..pokud je dany den ulozen v databazi tak se prida odkaz
|
||
Keeehi Profil |
#3 · Zasláno: 14. 9. 2016, 03:38:01
seky728:
Z databáze si vytáhneš dny pro daný měsíc. SELECT DAY(datum) FROM tabulka WHERE YEAR(datum)=2016 AND MONTH(datum)=9 A potom, když budeš vypisovat ten kalendář, tak si jen zkontroluje, zda je ten aktuální den v poli. if(in_array($aktualni_den, $pole_se_dny)) { echo "<a href=\"?datum=2016-09-$aktualni_den\">$aktualni_den</a>"; } else { echo $aktualni_den; } |
||
seky728 Profil |
#4 · Zasláno: 14. 9. 2016, 06:29:02
Ahojte, díky za rady, až odpoledne dorazime že školy tak se na to vrhnu a dám vědět
|
||
seky728 Profil |
#5 · Zasláno: 14. 9. 2016, 15:33:41
Ahoj,
bohužel mi to nepomohlo. Programovat složitější věci tak nějak teprve začínám a zatím je to u mě takový ten styl pokus omyl... Moje teorie je že když "forem" vypisuji jednotlivá čísla tak ifem zkontroluji zda se $i == $den (jakoby dnešní den) a pokud ano provede se while ve kterým se databazové datum rozseká na den, měsíc, rok a po něm by se mělo porovnat zda datum ještě odpovídá roku a měsíci a pokud ano tak se obarví červeně a bude se na něj dat kliknout a po kliknutí se vyvolá další stranka. Pokud datum neodpovídá a je to jen že je dnešek tak to políčku v kalendáři bude jen červené a pokud $i neodpovídá dnešku provede while a vlastně to samé jen bez obarvení a pokud tam neodpovídá žádné datum tak se vypíše jen číslo. Doufám že to někdo pochopí. Nejsem v tom moc zručný a můj cíl je se v tom zlepšit. Za každou normální radu děkuji. <?php include 'server.php'; $dotaz="select id as id_zavodu, datum from zavody"; $data=mysqli_query($spojeni,$dotaz); //začátek kalendáře $dnes = date("j. n. Y"); $den = date("j"); $mes = date("n"); $rok = date("Y"); $pocetDniVMesici = date("t"); $prvniDen = date(mktime(0,0,0,$mes,1,$rok)); $pocetDnu = 0; $zacatek = date("w", $prvniDen); $dnyVTydnu = array(1=>"PO","ÚT","ST","ČT","PÁ","SO","NE"); $mesice = array(1=>"leden","únor","březen","duben","květen","červen","červenec","srpen","září","říjen","listopad","prosinec"); if($zacatek == 0) $zacatek=7; //nedele if ($zacatek == 0) { $zacatek = 7; } echo "<table id='kalendar'><tr>"; echo "<th id='mesic' colspan='7'>$mesice[$mes]</th></tr><tr>"; for ($i = 1; $i < 8; $i++) { echo "<th id='nazev_dne'>$dnyVTydnu[$i]</th>"; } echo "</tr><tr>"; if (strlen($den)==1) { $den="0".$den; } if (strlen($mes)==1) { $mes="0".$mes; } //dopočítání začátku kalendáře for ($i = 1; $i < $zacatek; $i++) { echo "<td id='kalendar'></td>"; $pocetDnu ++; } //vypis čísel dnů for ($i = 1; $i < $pocetDniVMesici +1; $i++) { if ($i == $den) { while ($zaznam=mysqli_fetch_array($data)) { $datum_zav= "{$zaznam["datum"]}"; $prvni_pomlcka = strpos($datum_zav,"-"); $druha_pomlcka = strrpos($datum_zav, "-"); $rok_databaze= substr($datum_zav,0,$prvni_pomlcka); $mesic_databaze= substr($datum_zav,$prvni_pomlcka+1,$druha_pomlcka-$prvni_pomlcka-1); $den_databaze = substr($datum_zav,$druha_pomlcka+1,2) ; } if ($i==$den_databaze && $mes == $mesic_databaze && $rok == $rok_databaze) { echo "<td id='dnesek'><a href='vypis_zavodu.php?id={$zaznam["id_zavodu"]}'>$i</a></td>"; } else { echo "<td id='dnesek'><a href=''>$i</a></td>"; } }else { while ($zaznam=mysqli_fetch_array($data)) { $datum_zav= "{$zaznam["datum"]}"; $prvni_pomlcka = strpos($datum_zav,"-"); $druha_pomlcka = strrpos($datum_zav, "-"); $rok_databaze2= substr($datum_zav,0,$prvni_pomlcka); $mesic_databaze2= substr($datum_zav,$prvni_pomlcka+1,$druha_pomlcka-$prvni_pomlcka-1); $den_databaze2 = substr($datum_zav,$druha_pomlcka+1,2) ; } if ($i==$den_databaze2 && $mes == $mesic_databaze2 && $rok == $rok_databaze2) { echo "<td id='kalendar'><a href='vypis_zavodu.php?id={$zaznam["id_zavodu"]}'>$i</a></td>"; } else { echo "<td id='kalendar'>$i</td>"; } } $pocetDnu ++; if($pocetDnu == 7 ){ echo "</tr><tr>"; $pocetDnu =0; } } //dopočítání konce kalendáře for ($i = $pocetDniVMesici; $pocetDnu < 7; $i++) { echo "<td id='kalendar'></td>"; $pocetDnu ++; } echo "</tr></table>"; //konec kalendáře ?> |
||
seky728 Profil |
Keeehi:
Bohužel nevím jak to přesně myslíš :( mohl by jsi mi to prosím nějak rozvést? A Mohl by jsi mi prosím pro jistotu uvést i nějaký ten krátký příklad na načtení z databaze do pole? Předem děkuji. |
||
Keeehi Profil |
<?php $time = time(); $rok = (int)date('Y', $time); $mesic = (int)date('m', $time); $den = (int)date('d', $time); $mesicBezNul = date('n', $time); $mesice = array(1=>"leden","únor","březen","duben","květen","červen","červenec","srpen","září","říjen","listopad","prosinec"); $akce = array(); $dotaz = "SELECT id, DAY(datum) AS den FROM zavody WHERE YEAR(datum)=$rok AND MONTH(datum)=$mesicBezNul"; $result = mysqli_query($spojeni, $query); while ($radek = mysql_fetch_assoc($result)) { $akce[$radek['den']] = $radek['id']; } ?> <table class='kalendar'> <tr> <th class='mesic' colspan='7'><?php echo $mesice[$mesicBezNul]; ?></th> </tr> <tr> <th class='nazev_dne'>PO</th> <th class='nazev_dne'>ÚT</th> <th class='nazev_dne'>ST</th> <th class='nazev_dne'>ČT</th> <th class='nazev_dne'>PÁ</th> <th class='nazev_dne'>SO</th> <th class='nazev_dne'>NE</th> </tr> <?php $prvniDen = 2-date("N", strtotime("$rok-$mesic-01")); $posledniDen = $mesic === 2 && date("t", strtotime("$rok-$mesic-01")) === '28' ? 28 : 36-date("N", strtotime("$rok-$mesic-01")); for ($i = $prvniDen ; $i <= $posledniDen ; $i++ ) { if ( ( $i - $prvniDen ) % 7 == 0) { echo " <tr>\n"; } echo " <td".($i === $den ? ' class="dnesek"' : '').">"; if (isset($akce[$i])) { echo "\n <a href=\"vypis_zavodu.php?id=$akce[$i]\">$i</a>\n "; } elseif($i >= 1 && $i <= (int)date("t", strtotime("$rok-$mesic-01"))) { echo $i; } echo "</td>\n"; if ( ( $i - $prvniDen ) % 7 == 6) { echo " </tr>\n"; } } ?> </table> |
||
seky728 Profil |
Keeehi:
Ahoj, prosimtě mě to nefunguje... a stále nevím co s tím... Když tam naincluduju server a spustím vypíše to: Parse error: syntax error, unexpected '(int)' (int) (T_INT_CAST) in C:\wamp\www\web\kalendar2.php on line 8. Pokud by jsi mi mohl ještě dále poradit byl bych nesmírně vděčný :) a v databázi mám to datum formou datetime jestli to v tom hraje nějakou roli. |
||
Keeehi Profil |
#9 · Zasláno: 15. 9. 2016, 18:10:22
No evidentně tam máš nějakou syntaktickou chybu. Svůj kód jsem testoval (kromě práce s databází). Takže jsi to evidentně nějak rozbil. No a bez toho aby jsi nám ukázal kód po úpravě toho moc nezvládneme. Chybová hláska mluví o řádku 8, takže prvních 10 řádků ze souboru kalendar2.php by mělo být dostatečné.
|
||
seky728 Profil |
Keeehi:
Ten kod jsem nemohl rozbít protože jsem dal prostě ctrl+c a ctrl+v a okamžiě prohlížeč vypisoval to co jsem poslal. A ani jsem vlatně neupravoval protože jsem ani za boha nemohl přijít na to co tam tomu vadí .. :) |
||
seky728 Profil |
Keeehi:
omlouvám se už jsem to opravil :) asi tam bylo něco zaseknutého a když jsem to celé ručně přepsal tak to už funguje... děkuji moc za pomoc :) |
||
Časová prodleva: 8 let
|
0