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 />'; ?>
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?
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.
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.
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 />'; ?>
Aihe on jo aika vanha, joten et voi enää vastata siihen.