Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP + Joulukalenteri

Clacier [01.12.2011 16:33:21]

#

Miksi 1.12 puuttuu? MYSQL- taulun nimi on joulukalenteri ja sen sarakkeet ovat author,date,id,voitto. Rivejä on yksi joka on seuraavanlainen:
Clacier,1,1,100.00

<?php
$num = 0;
$date = 0;
$paiv = date('d');

if($paiv < 10){
	$paiv = str_replace('0', '', $paiv);
}

while($date < 24){
	$date ++;
	$num ++;
	if($num == 1){
		print '<tr>';
	}

	$tama_paiva = mysql_query("SELECT author,date,voitto FROM joulukalenteri WHERE date = '$date' AND author = '$_SESSION[nick]'");
	$reso = mysql_num_rows($tama_paiva);
	$roqk = mysql_fetch_array($tama_paiva);

	if($reso == 1){
		print '<td bgcolor="#81F79F"><b>'.$date.'</b>.12, ';
		if($roqk['voitto'] > 0){
			print '+'.$roqk['voitto'].'€</span><br /><br />';
		} else {
			print $roqk['voitto'].'€';
		}


	}


	else if($reso == 0){
	if($paiv > $date){
		print '<td bgcolor="#F2F5A9"><b>'.$date.'</b>.12';
	} else {
		print '<td bgcolor="#F78181"><b>'.$date.'</b>.12';
	}
	}
print '</td>';



	if($num == 7){
print '</tr>';
		$num = 0;
	}

}

print '<td bgcolor="#58FAF4"><i><b>25</b>.12</i></td>';
print '<td bgcolor="#58FAF4"><i><b>26</b>.12</i></td>';
print '<td bgcolor="#58FAF4"><i><b>27</b>.12</i></td>';
print '<td bgcolor="#58FAF4"><i><b>28</b>.12</i></td>';

print '</table><br />';
?>

jaketsu [01.12.2011 17:03:19]

#

En jaksa etsiä kysymääsi ongelmaan ratkaisua, mutta tulostuksesta puuttuu esim. melkein kaikki </td>- ja </tr>-tagit. Tämän korjaaminen ei toki ratkaise tuota kuun ensimmäisen päivän näkymättömyyttä, mutta ehkä helpottaa sivun toimintaa seuraavina päivinä.

Sivun koodissa on paljon muitakin bugeja. Kävin äsken ensimmäisen kerran tuolla sivustolla, ja sain ilman mitään kirjautumisia tms. tietää seuraavaa:

Tänään on joulukuun 1s. päivä!
Olet jo avannut tämän päivän luukkusi. Voitit 15.00€!

Mistä voin lunastaa voittoni?

Grez [01.12.2011 17:05:48]

#

Onhan toi koodi nyt muutenkin aika hyvä vitsi.

Ykkösen puuttumisesta tulee mieleen lähinnä, että ehkä siellä on kaksi voittoa samalle päivälle, jolloin ko. päivää ei näytettäisi ollenkaan.

Jaketsun mainitsemien juttujen lisäksi en voi kuin ihmetellä, miksi tietokantaan tehdään 24 kyselyä, vaikka yhdellä pärjäisi paremmin.

Clacier [01.12.2011 17:25:02]

#

Kiitokset näistä. Tagivirheet (oho!) korjattu ja kalenteri saatu toimimaan. Ainut huono puoli on nyt siis se että tietokantaan tehdään tosiaan 24 kyselyä.

Tuo, että jaketsulle tulostui teksti voitosta, johtuu siitä kun oli jäänyt tarkistus puuttumaan (onko käyttäjä kirjautunut) ja joku oli sitten kirjautumattoneena avannut luukun. Korjattu toki.

Grez [01.12.2011 17:51:41]

#

Yleensä en laita valmista koodia, mutta itse tekisin vastaavan tulostuksen tuottavan koodin jotakuinkin seuraavasti. (Kirjoitin suoraan ilman testaamista, joten voi olla bugeja)

<?php

$today = $date('j');
$wins = array();

$res = mysql_query("SELECT date,voitto FROM joulukalenteri WHERE author='" .
    mysql_real_escape_string($_SESSION['nick']) . "'");

while ($row = mysql_fetch_array($res))
    { $wins[$res['date']] = $res['voitto']; }

for($day = 1; $day < 29; $day++) {
	if (($day % 7) == 1) echo '<tr>';

	$msg = '';
	if (isset($wins[$day])) {
		$win = $wins[day];
		$msg = (($win>0) ? ', +' : ', ') . $win . '€';
		$bg = '81F79F';
	} else {
		$bg = ($day>24) ? '58FAF4' : ($day>$today) ? 'F2F5A9' : 'F78181'
	}
	echo "<td bgcolor=\"#$bg\"><b>$day</b>.12$msg</td>";

	if (($day % 7) == 0) echo '</tr>';
}
echo '</table><br />';
?>

Vastaus

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

Tietoa sivustosta