| 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: 9 let
|
|||
0