Archief - PHP: Calender oneindige lus

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

HelloApu

Legacy Member
Hey,

Ik heb een calendar gemaakt waar ik verjaardagen in kan bijhouden. Maar ik heb een probleem. Alles lijkt goed te werken maar bij sommige maanden komt het in een oneindige lus. Ik kan hiervoor geen goede verklaring geven daarom vraag ik hier eens of jullie het weten/al ervaring mee gehad hebben.

de calendar staat hier: http://www.game-palace.be/birthday.php?pag=calendar
en de code:
PHP:
<style type="text/css">
<!--
th {
	font-family: Verdana;
	font-weight: bolder;
	background-color: #999999;
}
.geendag {
	background-color: #999999;
}
.dag {
	font-family: Verdana;
	background-color: #CCCCCC;
}
-->
</style>
<?PHP // Database connectie, verander waarden
	$query = mysql_connect("localhost","HelloApu","******");
	mysql_select_db("kevinvg",$query) or die("Kon geen verbinding maken met de SQL database");
?>
<?PHP
	@mysql_query("SELECT * FROM birthday") or ($install=1);
	if($install==1)
	{
		mysql_query("CREATE TABLE `birthday` ( `dag` DECIMAL NOT NULL ,`maand` DECIMAL NOT NULL ,`jarige` TEXT NOT NULL)") or die(mysql_error());
		echo "Succesvol geinstalleerd";
	}
	
	$pag = $_GET["pag"];
	if($pag=="calendar")
	{
			if(empty($_GET['m'])) { $maand = date("n"); }
			else { $maand = $_GET["m"]; }
			
			if(empty($_GET['j'])) { $jaar = date("Y"); }
			else { $jaar = $_GET["j"]; }
			
			if (date("L")==1) 
			{	
				$maanddagen = array("","31","29","31","30","31","30","31","31","30","31","30","31");
			} 
			else 
			{
				$maanddagen = array("","31","28","31","30","31","30","31","31","30","31","30","31");
			}
			$maandnamen = array("","Januari","Februari","Maart", "April", "Mei", "Juni","Juli","Augustus", "September", "Oktober", "November", "December");
			

			$weekdagen = array("","Maandag","Dinsdag","Woensdag","Donderdag","Vrijdag","Zaterdag","Zondag");
			$eerstedag_tmp = mktime(0,0,0,$maand,1,$jaar);
			$eerstedag = strftime("%w",$eerstedag_tmp);
			echo "<table border=\"0\" width=\"650\">\n";
			echo "<tr>\n";
			echo "<th colspan=\"7\">Verjaardagscalendar door HelloApu - ".$maandnamen[$maand]."</th>";
			echo "</tr>";
			echo "<tr>";
			echo "<th>".$weekdagen[1]."</th><th>".$weekdagen[2]."</th><th>".$weekdagen[3]."</th><th>".$weekdagen[4]."</th><th>".$weekdagen[5]."</th><th>".$weekdagen[6]."</th><th>".$weekdagen[7]."</th></tr>";
			$start = 0;
			while($nummer<=$maanddagen[$maand])
			{
				echo "<tr>";
				for($i2=1;$i2<=7;$i2++)
				{
					if($start == 0)
					{
						if($eerstedag==$i2){ echo "<td class=\"dag\">1</td>"; $start = 1; $nummer = 2;}
						else { echo "<td class=\"geendag\"></td>"; }
					}
					else
					{
						if($nummer>$maanddagen[$maand]) { echo "<td class=\"geendag\"></td>"; }
						else { echo "<td class=\"dag\">$nummer</td>"; $nummer++; }
					}
				}
				echo "</tr>";
			}	
			$volgendemaand = $maand+1;
			if($volgendemaand == 13) { $volgendemaand = 1; $volgendjaar = $jaar+1; } else { $volgendjaar = $jaar; }
			$vorigemaand = $maand-1;
			if($vorigemaand == 0 ) { $vorigemaand = 12; $vorigjaar = $jaar-1; } else { $vorigjaar = $jaar; }
			
			echo "<tr><th colspan=\"7\"><table border=\"0\" width=\"100%\"><tr>
			<td width=\"50%\" align=\"center\"><a href=\"birthday.php?pag=calendar&m=$vorigemaand&j=$vorigjaar\">[ Vorige maand ]</a></td>
			<td width=\"50%\" align=\"center\"><a href=\"birthday.php?pag=calendar&m=$volgendemaand&j=$volgendjaar\">[ Volgende maand ]</a></td>
			</tr></table></th></tr>";
			echo "</table>";
	 }

?>

RpR

Legacy Member
Vind het nogal raar gedaan met het berekenen van een schrikkeljaar. Je kan zelf in php functies gebruiken die al het werk voor u doen.

HelloApu

Legacy Member
Dankje, in mijn boek hadden ze blijkbaar de L weggelaten. Maar het is voor mij nog altijd een mysterie waarom hij bij sommige maanden een oneindige lus weergeeft

dJeez

Legacy Member
HelloApu zei:
Dankje, in mijn boek hadden ze blijkbaar de L weggelaten. Maar het is voor mij nog altijd een mysterie waarom hij bij sommige maanden een oneindige lus weergeeft
Je initialiseert $nummer niet en daarnaast zit je de waarde van strings ($maanddagen) te vergelijken met een getal ($nummer).

bobbejaan

Legacy Member
$eerstedag gaat van 0-6 (zondag-zaterdag) en $i2 gaat van 1-7 (maandag-zondag) als de maand dan op zondag begint, kom je in een eindeloze lus.
Mogelijke oplossing: if($eerstedag == 0) $eerstedag = 7;

Je code is nogal "raar", bvb in $maanddagen en $maandnamen zou ik de eerste plaats niet leeg laten en als ik die array dan toch op 1 wil laten starten zou ik het anders doen, maar dit is allemaal nogal persoonlijk en vooral volledig offtopic.

HelloApu

Legacy Member
owjah, dat stond er, maar ik had het weggedaan om aan een andere fout te "prutsen" en ik dacht dat het niet meer nodig was, beetje voorbarig dus :( Echt waar bedankt!
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan