while schleifen prob

Atse87

Grünschnabel
moin, hab da ma wieder nen kleines prob mit meinem kalender
und zwar, möcht ich das mein kalender immer die tage makiert an denen ein bestimmter kunde einen termin hat, dazu hab ich in meiner noch ne spalte wo er die kunden nummern speichert...und in meinem script wollt ichs eigentlich so machen das er anhand der knr die jeweiligen daten ausließt und dann diese im kalender weiss makiert..
allerdings zeigt er mir immer blos den letzten datensatz an, hat aufjedenfall irgendwas mit der while schleife zu tun glaub ich, wollt fragen ob mir jemand sagen kann wie ich das mach das der mir alles anzeigt..

hier ma mein code, hab ma das "unwichtige" auf komentar gesetzt:
PHP:
// *** START Jahreskalender ***

/*
$monat=date("n");
if(!isset($_POST['vorheriges']) || !isset($_POST['naechstes'])) {
$jahr = date("Y") ; }
$heute=date("d");
if($_POST['aktuelles']){
$jahr = date("Y") ; }
if($_POST['vorheriges']) {
$jahr=$jahr-1;
}
if($_POST['naechstes']) {
$jahr=$jahr+1;
}
$monate=array("Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
echo "<table border=\"0\" width=\"700\">";
echo "<th colspan=\"4\" align=\"center\" style=\"font-family:Verdana; font-size:18pt; color:#ff9900;\">".$jahr."</th>";
for($reihe=1;$reihe<=3;$reihe++)
{
echo "<tr>";
for ($spalte=1;$spalte<=4;$spalte++)
{
$this_month=($reihe-1)*4+$spalte;
$erster=date("w",mktime(0,0,0,$this_month,1,$jahr));
$insgesamt=date("t",mktime(0,0,0,$this_month,1,$jahr));
if($erster==0){$erster=7;}
echo "<td width=\"25%\" valign=\"top\">";
echo "<table border=\"0\" align=\"center\" style=\"font-size:8pt; font-family:Verdana\">";
echo "<th colspan=\"7\" align=\"center\" style=\"font-size:12pt; font-family:Arial; color:#666699;\">".$monate[$this_month-1]."</th>";
echo "<tr><td style=\"color:#666666\"><b>Mo</b></td><td style=\"color:#666666\"><b>Di</b></td>";
echo "<td style=\"color:#666666\"><b>Mi</b></td><td style=\"color:#666666\"><b>Do</b></td>";
echo "<td style=\"color:#666666\"><b>Fr</b></td><td style=\"color:#0000cc\"><b>Sa</b></td>";
echo "<td style=\"color:#cc0000\"><b>So</b></td></tr>";
echo "<tr><br>";
$i=1;

$i=1;
while($i<$erster){echo "<td> </td>"; $i++;}
$i=1;
while($i<=$insgesamt)
{
$rest=($i+$erster-1)%7;
*/

$sql = "SELECT unixtime, knr FROM kalender where knr LIKE '%".$knr_."%'";
$result 		= mysql_query($sql);
while($row	= mysql_fetch_array($result)){
$rowtime 		= $row['unixtime'];
$rowknr 		= $row['knr'];
$unixtag 		= date("d", $rowtime);
$unixmonat 	= date("m", $rowtime);
$unixjahr 	= date("Y", $rowtime);

}

if($i==$heute && $this_month==$monat && $jahr==date("Y")){echo "<td style=\"font-size:8pt; font-family:Verdana; background:#ff0000;\" align=center>";}
else if($i==$unixtag && $this_month==$unixmonat && $jahr==$unixjahr){echo "<td style=\"font-size:8pt; font-family:Verdana; background:#FFFFFF;\" align=center>";}
else { echo "<td style=\"font-size:8pt; font-family:Verdana\" align=center>"; }
if ($i==$heute && $this_month==$monat){echo "<span style=\"color:#ffffff;\"><a href=\"akalender.php?id=".mktime(0,0,0,$this_month,$i,$jahr)."\">$i</a></span>"; }
else if ($i==$unixtag && $this_month==$unixmonat){echo "<span style=\"color:#ffffff;\"><a href=\"akalender.php?id=".mktime(0,0,0,$this_month,$i,$jahr)."\">$i</a></span>"; }
else if($rest==6){echo "<span style=\"color:#0000cc\"><a href=\"akalender.php?id=".mktime(0,0,0,$this_month,$i,$jahr)."\">$i</a></span>"; }
else if($rest==0){echo "<span style=\"color:#cc0000\"><a href=\"akalender.php?id=".mktime(0,0,0,$this_month,$i,$jahr)."\">$i</a></span>"; }
else{echo "<a href=\"akalender.php?id=".mktime(0,0,0,$this_month,$i,$jahr)."\">$i</a>"; }
echo "</td>\n";
if($rest==0){echo "</tr>\n<tr>\n";}
$i++;

/*
}
echo "</tr>";
echo "</table>";
echo "</td>";
}
echo "</tr>";
}
echo "</table>";
*/
// *** ENDE Jahreskalender ***

mfg
thx im vorraus
 
Klar, er überschreibt in der Query immer wieder Die Variablen bis er beim letzten Datensatz hängen bleibt und die while schleife beendet.

Du hast 2 möglichkeit:

Entweder du queryst vor deiner kallernder-bau-while schleife einmal nach allen Daten und speicherst sie in einem Array ab und gehst dann stück für stück immer weiter. Oder du queryst genau nach den Tagen wo du dich gerade beinfest und bekommst immer den Datensatz für den aktuellen Tag zurück.
 
ok.....hab ich nich kapiert ^^
aber danke für die hilfe, gut zu wissen das es aufjedenfall schon ma nich unmöglich is :D
 
Also nochmal langsamer :> *sry*

PHP:
$sql = "SELECT unixtime, knr FROM kalender where knr LIKE '%".$knr_."%'";
$result         = mysql_query($sql);
while($row    = mysql_fetch_array($result)){
$rowtime         = $row['unixtime'];
$rowknr         = $row['knr'];
$unixtag         = date("d", $rowtime);
$unixmonat     = date("m", $rowtime);
$unixjahr     = date("Y", $rowtime);

}

Liefert die alle ergebnisse zurück... aber in der while() schleife werden die variablen $rowtime usw jedes mal neu überschrieben bis zum letzten eintrag hin, dann beendet er die schleife.

Ich weis nicht was für für ein Datum du in die MySQL jetzt endgültig einträgst, aber du könntest die Query zB so erweitern:

PHP:
$sql = "SELECT unixtime, knr FROM kalender where knr LIKE '%".$knr_."%' AND `unixtime` = '".mktime(0,0,0,$this_month,$i,$jahr)."'";
$result         = mysql_query($sql);
while($row    = mysql_fetch_array($result)){
$rowtime         = $row['unixtime'];
$rowknr         = $row['knr'];
$unixtag         = date("d", $rowtime);
$unixmonat     = date("m", $rowtime);
$unixjahr     = date("Y", $rowtime);

}

Dann würde er beim Kallender aufbauen für jeden Tag einmal query`n und dir das ergebniss für diesen Tag zurückliefern.
 
ok, danke, klappt wunderbar, hab das datum extra als date in der daten bank, habs jetzt so ;)

PHP:
$date_ =  $jahr . "-" . $this_month . "-" . $i;

$sql = "SELECT unixtime, knr FROM kalender where knr LIKE '%".$knr_."%' AND datum = '" .$date_. "'";
$result 		= mysql_query($sql);
while($row	= mysql_fetch_array($result)){
$rowtime 		= $row['unixtime'];
$rowknr 		= $row['knr'];
$unixtag 		= date("d", $rowtime);
$unixmonat 	= date("m", $rowtime);
$unixjahr 	= date("Y", $rowtime);
}
 
Zurück