Autor | Zpráva | ||
---|---|---|---|
MaxDJs Profil * |
#1 · Zasláno: 24. 1. 2011, 19:06:41
Zdravím,
bylo by možno mi napsat, co mám špatně ve skriptu, protože se mi nevykresluje kalendář. Mám to řešený pomocí html tabulky. Zde je skrpt: $mesic = $_POST['mesic']; $pocetdnu = array("Leden"=>31,"Únor"=>28,"Březen"=>31,"Duben"=>30,"Květen"=>31,"Červen"=>30,"Červenec"=>31,"Srpen"=>31,"Září"=>30,"Říjen"=>31,"Listopad"=>30,"Prosinec"=>31); $pocettydnu = floor($pocetdnu[$mesic] / 7); $dny = array(1=>"Po","Út","St","Čt","Pá","So","Ne"); $pocetdnuvmesici = $pocetdnu[$mesic]; $den=1; echo "<h1>".$mesic." 2010</h1>"; echo "<table>"; while ($den <= $pocetdnuvmesici) { for($i=0;$i<=$pocettydnu;$i++) { echo "<tr>"; for($x=1;$x<=7;$x++) { if($i == 0) { echo "<th>".$dny[$x]."</th>"; } else { echo "<td>".$den."</td>"; } } echo "</tr>"; } $den++; } echo "</table>"; ?> Děkuji za odpověď |
||
Radek Cvek Profil |
#2 · Zasláno: 24. 1. 2011, 19:26:00
Určitě bych v url nepředával diakritiku.
|
||
Tori Profil |
#3 · Zasláno: 24. 1. 2011, 19:33:52
Šlo by to takto:
echo "<table><tr>"; for($x=1;$x<=7;$x++) { echo "<th>".$dny[$x]."</th>"; } for ($den=1; $den <= $pocetdnuvmesici; $den++) { if ($den%7 == 1) echo '</tr><tr>'; echo "<td>$den</td>"; } echo "</table>"; Ale ani jedno neřeší, jestli první den měsíce je skutečně pondělí. |
||
Prochy Profil |
#4 · Zasláno: 24. 1. 2011, 19:36:13
Nevim jestli potřebuješ kalendář jen tenhle rok. Ale já bych to dělal radši přes date a mktime. Pokaždý nemá únor 28dní a taky se tam dá zjistit, jakým dnem začíná měsíc.
|
||
Tori Profil |
#5 · Zasláno: 24. 1. 2011, 19:52:17
|
||
Alphard Profil |
#6 · Zasláno: 24. 1. 2011, 19:55:51
Třeba pomůže http://www.linuxsoft.cz/article.php?id_article=212
|
||
Radek Cvek Profil |
#7 · Zasláno: 24. 1. 2011, 20:00:19
Zkusil jsem si:
echo Date ("D", MkTime (10, 0, 0, 24, 1, 2011)); echo Date ("w", MkTime (10, 0, 0, 24, 1, 2011)); a vypsalo mi to Sat6 - neděli a přitom je pondělí |
||
MaxDJs Profil * |
#8 · Zasláno: 24. 1. 2011, 20:00:58
Tori:
> Šlo by to takto: > echo "<table><tr>"; > for($x=1;$x<=7;$x++) { > echo "<th>".$dny[$x]."</th>"; > } > for ($den=1; $den <= $pocetdnuvmesici; $den++) { > if ($den%7 == 1) > echo '</tr><tr>'; > echo "<td>$den</td>"; > } > echo "</table>"; To mi vypíše pouze názvy dnů, ale ne čísla od 1 do 28/30/31 |
||
Tori Profil |
#9 · Zasláno: 24. 1. 2011, 20:09:28
Radek Cvek:
Protože 0 = neděle. MaxDJs: A co máte v proměnné $mesic? Ja tam přímo dopsala název měsíce a fungovalo to. |
||
Radek Cvek Profil |
#10 · Zasláno: 24. 1. 2011, 20:11:18
Tori:
Dnes je 24.1.2011 a je pondělí a mě to vypsalo neděli. |
||
MaxDJs Profil * |
#11 · Zasláno: 24. 1. 2011, 20:13:58
Do proměnné $mesic načítám data z formuláře
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs"> <head> <meta name="generator" content="PSPad editor, www.pspad.com" /> <meta http-equiv="content-type" content="text/html; charset=windows-1250" /> <title></title> </head> <body> <form action="zobrazenikalendare.php" method="post" name="vyber_mesice"> <select name="mesic"> <?php $mesice = array("Leden","Únor","Březen","Duben","Květen","Červen","Červenec","Srpen","Září","Říjen","Listopad","Prosinec"); foreach ($mesice as $mesic) { echo "<option value=".$mesic."/>".$mesic."</option>"; } ?> </select> <input type="submit" name="odeslat" value="Zobraz kalendář!" /> </form> </body> </html> |
||
Tori Profil |
#12 · Zasláno: 24. 1. 2011, 20:14:40
Radek Cvek:
Aha, nepochopila jsem, na co se ptáte. Máte prohozený měsíc a den. |
||
Radek Cvek Profil |
#13 · Zasláno: 24. 1. 2011, 20:21:44
Tori:
Díky - to bylo tím. Return Values: mktime() returns the Unix timestamp of the arguments given. If the arguments are invalid, the function returns FALSE (before PHP 5.1 it returned -1). Že mi to zrovna na ten 24. měsíc vyhodilo 6. |
||
Tori Profil |
#14 · Zasláno: 24. 1. 2011, 20:34:56
Radek Cvek:
Hm, zajímavé. "Neplatný parametr" znamená, že není celočíselný. Pokud je celočíselný a přesahuje povolený rozsah, použije se modulo (hrála jsem si s tím). |
||
Radek Cvek Profil |
#15 · Zasláno: 24. 1. 2011, 20:48:53
Tori:
supr - mě by ani nenapadlo po tom tak bádat |
||
MaxDJs Profil * |
#16 · Zasláno: 25. 1. 2011, 19:24:19
Tori:
„A co máte v proměnné $mesic? Ja tam přímo dopsala název měsíce a fungovalo to.“ Už jsem naše chybu. Špatně jsem předával název měsíce z formuláře. echo "<table><tr>"; for($x=1;$x<=7;$x++) { echo "<th>".$dny[$x]."</th>"; } for ($den=1; $den <= $pocetdnuvmesici; $den++) { if ($den%7 == 1) echo '</tr><tr>'; echo "<td>$den</td>"; } echo "</table>"; Dá se tenhle skript zapsat i jinak? S využitím jiných funkcí? |
||
xmark Profil |
#17 · Zasláno: 25. 1. 2011, 19:27:22
MaxDJs:
„Dá se tenhle skript zapsat i jinak? S využitím jiných funkcí?“ Proč? Mimochodem .. kde máš začátek prvního<tr> a konec posledního? |
||
MaxDJs Profil * |
#18 · Zasláno: 25. 1. 2011, 19:33:23
Protože chci vědět, jestli existuje víc variant
Já jsem použil to co mi poradil Tori |
||
Tori Profil |
#19 · Zasláno: 25. 1. 2011, 19:43:15 · Upravil/a: Tori
MaxDJs:
„Špatně jsem předával název měsíce z formuláře.“ Tomu se dá vyhnout, když budete předávat číslo měsíce místo názvu. // formular: <select name="mesic"> <?php $mesice = array(1=>"Leden",2=>"Únor",3=>"Březen",4=>"Duben",5=>"Květen",6=>"Červen", 7=>"Červenec",8=>"Srpen",9=>"Září",10=>"Říjen",11=>"Listopad",12=>"Prosinec"); foreach ($mesice as $cislo=>$mesic) { echo '<option value="'.$cislo.'">'.$mesic."</option>"; } ?> </select> // zpracovani: $mesic = $_POST['mesic']; $pocetdnu = array(0,31,28,31,30,31,30,31,31,30,31,30,31); $nazev = array(1=>"Leden",2=>"Únor",3=>"Březen",4=>"Duben",5=>"Květen",6=>"Červen", 7=>"Červenec",8=>"Srpen",9=>"Září",10=>"Říjen",11=>"Listopad",12=>"Prosinec"); $pocettydnu = floor($pocetdnu[$mesic] / 7); $dny = array(1=>"Po","Út","St","Čt","Pá","So","Ne"); $pocetdnuvmesici = $pocetdnu[$mesic]; $den=1; echo "<h1>".$nazev[$mesic]." 2010</h1>"; edit: ↑↑ xmark: Ty chybějící <tr> jsem zapomněla já, MaxDJs to jen zkopíroval. |
||
MaxDJs Profil * |
#20 · Zasláno: 25. 1. 2011, 19:59:02
A jak mohu obměnit to vykreslení formuláře? Jestli to vůbec lze?
|
||
MaxDJs Profil * |
#21 · Zasláno: 25. 1. 2011, 19:59:58
*vykreslení tabulky
|
||
Alphard Profil |
#22 · Zasláno: 25. 1. 2011, 20:02:17 · Upravil/a: Alphard
MaxDJs:
„Já jsem použil to co mi poradil Tori“ Kdybyste důsledně četl její odpovědi, zjistil byste, že je to dívka. „Dá se tenhle skript zapsat i jinak?“ Počet dní by bylo vhodné zjišťovat patřičnou funkcí, kvůli přestupnému roku. Ne každý měsíc začíná pondělím, na začátku tabulky by se měly vypsat prázdné buňky. Verze, kde jsou dny ve sloupcích (na linuxsoftu jsou v řádcích), by snad mohla vypadat takhle. <?php $mesic = 2; $rok = 2011; $mesice = array(1 => "Leden", "Únor", "Březen", "Duben", "Květen", "Červen", "Červenec", "Srpen", "Září", "Říjen", "Listopad", "Prosinec"); $dny = array(1=>"Po", "Ut", "St", "Ct", "Pa", "So", "Ne"); echo "<h1> $mesice[$mesic] $rok</h1>\n"; echo "<table>\n<tr><th>".implode("</th><th>", $dny)."</th></tr>\n"; $firstDay = (int) date("w", mktime(0, 0, 0, $mesic, 1, $rok)); echo "<tr>".str_repeat("<td></td>", ($firstDay==0 ? 7 : $firstDay)-1); for($i = 1; $i <= cal_days_in_month(CAL_GREGORIAN, $mesic, $rok); $i++) { if (($i+$firstDay)%7 == 2 && $i != 1) { echo "</tr>\n<tr>"; } echo "<td>".$i."</td>"; } echo "</tr>\n</table>\n"; ?> <style> td { width: 30px; text-align: center; border: 1px dotted gray; } </style> |
||
Časová prodleva: 14 let
|
0