Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP kalenteri ongelma

Sivun loppuun

gleant [17.07.2009 20:09:00]

#

Tein tälläsen kalenterin kotisivuille

<?php
setlocale(LC_TIME, "fi_FI");
setlocale(LC_TIME, "fin");
 if (!isset($_POST['kuukausi']) && !isset($_POST['vuosi']))
{
	$tamapaiva = getdate();
	$kuukausi = $tamapaiva[mon];
	$vuosi =$tamapaiva[year];
}else{
	$kuukausi = $_POST['kuukausi'];
	$vuosi = $_POST['vuosi'];
}
$eka_paiva = mktime ( 0, 0, 0, $kuukausi, 1, $vuosi );
$kuukaudet = getdate($eka_paiva);
?>
<html>
<head>
<title><?php echo strftime("%B",strtotime("$kuukausi/1"))."$vuosi"; ?></title>
</head>
<body>
<form action = "<? echo $PHP_SELF ?>" method="post">
<select name="kuukausi">
<?php
for ( $x=1; $x <= 12; $x++ )
 {
	echo "\t<option value=\"$x\"";
	echo ($x == $kuukausi)?" SELECTED":"";
	echo ">".strftime("%B",strtotime("$x/1"))."\n";
}
?>
</select>
 <select name="vuosi">
 <?php
 for ( $u=2007; $u<2014; $u++ )
 {
	echo "\t<option";
	echo ($u == $vuosi)?" SELECTED":"";
	echo ">$u\n";
 }
 ?>
 </select>
 <input type="submit" value="Ok">
 </form>
 <p>
 <?php
 echo "<TABLE width='100' border='1' cellpadding='1' cellspacing='1'>\n";
 echo "<th bgcolor='23238E' colspan='8' align='center'><font color='ADD8E6'>".strftime("%B",strtotime("$kuukausi/1"))."</font></th>\n";
 echo "<tr>\n\t<td>vk</td>\n\t<td>ma</td>\n\t<td>ti</td>\n\t<td>ke</td>\n\t<td>to</td>\n\t<td>pe</td>\n\t<td>la</td>\n\t<td>su</td>\n</tr>\n";
for ($laskuri_viikot = 0; $laskuri_viikot < 6; $laskuri_viikot++)
{
	$paiva = getdate($eka_paiva);
	$aika = strtotime("$paiva[mon]/$paiva[mday]/$paiva[year]");
	if ($paiva[mon] != $kuukausi)
	break;
	echo "<tr>\n\t<td>".strftime("%V",$aika)."</td>\n";
	for ($laskuri_paivat = 1; $laskuri_paivat < 8; $laskuri_paivat++)
	{
		$paiva = getdate($eka_paiva);
		$aika = strtotime("$paiva[mon]/$paiva[mday]/$paiva[year]");
		if ($laskuri_paivat < strftime("%u",$aika) || $paiva[mon] != $kuukausi)
		echo "\t<td>&nbsp;</td>\n";
		else
		{
			if ($paiva[mday] == date("j") && $kuukausi == date("n") && $vuosi == date("Y"))
			echo "\t<td bgcolor = '843243'>$paiva[mday]</td>\n";
			else
			echo "\t<td>$paiva[mday]</td>\n";
			$eka_paiva += (60*60*24);
		}
	}
	echo "</tr>\n";
}
 echo "</table>\n";
 ?>
</body>
</html>

Kun avaan sivun omilla sivuilla tulee erroria jokaisesta mday, mon, year kohdasta. Taas kun koitin yhellä toisella sivuilla nii toimi ihan hyvin. Onko mulla PHP:s joku asetus väärin vai mistä johtuu noi errorit?

Metabolix [17.07.2009 20:13:54]

#

Taulukon indeksin pitäisi olla lainaus- tai heittomerkeissä: $paiva['mday']. Tekstin seassa lisäksi kannattaa virheiden välttämiseksi kirjoittaa muuttujat aaltosilkuihin: "<td>{$paiva['mday']}</td>". Jos esittämäsi koodi pääsee ilman virheitä läpi, palvelimella on luultavasti PHP:stä niin vanha versio, ettei se ymmärrä huomauttaa tuosta vaan korjaa ilman heittomerkkejä kirjoitetut tekstit automaattisesti.

Ensi kerralla voisit heti kättelyssä kertoa, millaisia virheitä aiheutuu, ettei tarvitse ruveta kaivamaan koodista. Tällä kertaa se tosin oli onneksi triviaalia.

gleant [17.07.2009 20:22:51]

#

no nyt toimii. Kiitoksia

gleant [23.07.2009 18:24:56]

#

Tuli täs kalenteris uus ongelma. Eli viikot ei tulostu ollenkaan, tulee vain tyhjä paikka niiden paikalle. Mistähän tää voi johtua? Ja miten sais korjattua?

Grez [23.07.2009 18:33:19]

#

Äkkiseltään tulisi mieleen, että se ei tykkäisi tästä

$aika = strtotime("$paiva[mon]/$paiva[mday]/$paiva[year]");

Eikä sen vuoksi osaisi tulostaa strftime("%V",$aika)

gleant [23.07.2009 18:38:29]

#

Tää juttu toimi tuol toisella serverillä täysin mut koitan muokata tota tosta kohtaa jotenkin.

Edit: Tutkin tota strftime-funktiota vähä ku ei muistanu enää miten se meni nii se päivämäärähän pitää antaa sille tos muodos. Päivätkää ei muute mee suomen-ajan mukaan vaan keskiviikko on jotain varte viikon ensimmäinen päivä mutta taas kuukaudet on aivan suomenkieliset.

Grez [23.07.2009 18:49:30]

#

No lähinnä epäilin samaa ongelmaa kuin jo korjasit toisaalta, eli ilman noita kaarisulkuja se ei välttämättä toimi. Voit toki tulostaa $aika -muuttujan sisällön, että näyttääkö se järkevältä.

gleant [23.07.2009 18:56:34]

#

$aika-muuttuja tulostaa aikaleiman. En tiedä kuuluuko tulostaa sitä??

Edit: Koitin laittaa tohon tilalle suoraan php:n sivuilta tän

strftime("%V,%G,%Y",strtotime("1/3/2005"))

poistin vain noi %G ja %Y mut ei tulosta mitään. Huomasin lisäksi viel et kun lähetän lomakkeella ton kuukauden ja vuoden nii se lähtee aivan jonnekin muualle kun tohon samaan osoitteeseen. Tos ei kai $PHP_SELF toimi? Ja onks tos toiseski ongelmas mulla joku vika php:n asetuksis?


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta