alles klar die Variable $dieshierzaehlt beginnt bei Null und damit fängt das Array auch bei Element 0 an und nicht bei 1, die Schleifen bei der Ausgabe fangen aber bei 1 an bzw. ist die Anzahl eins zu hoch weil ja eigentlich bei 0 angefangen wird u zählen und nicht bei eins. Darum verschiebt sich die Sache, darum hast du das Phantomteil bei den nächsten geburtstagen und der letzte fehlt.
also alles zurück, probiere es so :
Code:
for($i=0;$i<=2;$i++) // gibt die ersten drei aus, ist variabel !
der rest sollte stimmen, also mit der Schleife von Sky.
Hey, ich hab das mal so verändert, ihr seid auf jeden fall auf der richtigen Spur :-)
Also. Ich habe nach den änderungen die fehlende Person wiederbekommen, und alles sah wunderschön aus.
Nun habe ich aber mal eine Testperson erstellt die genau heute geburtstag hat. Und logischer Weise zeigt er diese jetzt als den jenigen, der als letztes Geburtstag hatte mit dazu. Eigentlich soll aber jemand, der heute geburtstag hat, nur in der mitte stehen.
ich könnte mir aber vorstellen, das es keine Lösung zu diesem PRoblem gibt.
echo"<B><U>Als letztes hatten Geburtstag:</U></B><BR><BR>";
for($i=1;$i<=3;$i++) // gibt die ersten drei aus, ist variabel !
{
echo $reihenfolge[$i]["name"]. " am ".date("d.M.Y",$reihenfolge[$i]["timestamp"])."<br>";
}
echo"<HR SIZE=\"1\">";
$heute_geburtstag = mysql_query("SELECT name FROM jahrgangsstufe WHERE DAYOFYEAR(tag)=DAYOFYEAR(NOW())");
while($row = mysql_fetch_array($heute_geburtstag))
{ $geburtstagskind = $row[0]; }
schreiben wir
$heute_geburtstag = mysql_query("SELECT name FROM jahrgangsstufe WHERE DAYOFYEAR(tag)=DAYOFYEAR(NOW())");
while($row = mysql_fetch_array($heute_geburtstag))
{ $geburtstagskind = $row[0]; }
echo"<B><U>Als letztes hatten Geburtstag:</U></B><BR><BR>";
for($i=1;$i<=3;$i++) // gibt die ersten drei aus, ist variabel !
{
if ($reihenfolge[$i]["name"] != $geburtstagskind) {
echo $reihenfolge[$i]["name"]. " am ".date("d.M.Y",$reihenfolge[$i]["timestamp"])."<br>";
}
}
echo"<HR SIZE=\"1\">";
Stopp :-) Kommando zurück :-) hab mich wiedermal
zu früh gefreut. Ich habe einen fakt vergessen.
es gibt tage wo zwei Leute geburtstag haben!
ich habe mal eine zweite Testperson eingefügt.
nun stehen nur noch zwei Leute bei "als letztes hatten gebursttag" und nur eine Person bei Heute hat geburtstag.
könnte ich hier jetzt noch ne if-schleife einbauen, wenn mehr als eine person geburtstag hat heute, dann mache das und das?
$heute_geburtstag = mysql_query("SELECT name FROM jahrgangsstufe WHERE DAYOFYEAR(tag)=DAYOFYEAR(NOW())");
while($geburtstagskind = mysql_fetch_array($heute_geburtstag)) {}
und
if (!$geburtstagskind)
{
echo "<FONT COLOR=\"FF0000\">Heute, am <B>"; echo date("d.m.y"); echo "</B> feiert niemand aus unserer Jahrgangsstufe Geburtstag. <BR></FONT>";
echo "<HR SIZE=\"1\">";
}
else {
if (sizeof($geburtstagskind)==1) {
echo "<FONT COLOR=\"FF0000\">Heute, am <B>"; echo date("d.m.y"); echo "</B> feiert $geburtstagskind Geburtstag <BR></FONT>";
} else {
echo "<FONT COLOR=\"FF0000\">Heute, am <B>"; echo date("d.m.y"); echo "</B> feiern Geburtstag: ";
for ($i=0;$i<=sizeof($geburtstagskind)-1;$i++) {
if ($i==(sizeof($geburtstagskind)-1)) {
echo $geburtstagskind[$i];
} else {
echo $geburtstagskind[$i].', ';
}
}
echo '<BR></FONT>'
}
echo "<HR SIZE=\"1\">";
}
Ich poste gleich mal hier drunter den kompletten quelltext wie er jetzt aussieht.
Zur Zeit gibt dieser Quelltext folgendes falsch aus:
1. als letztes hatte testperson3 geburtstag
2. heute hat niemand geburtstag.
es sollte aber heißen: als letztes hatten .. geb (deren geburtstag < heute)
und heute sollten geburtstag haben: testperson 1, 2 und 3
hab ich was falsch ersetzt?
Hier der Text:
~~~~~~~~~~~~~
<?php
$heutejahr = date("Y",time());
$heute = date("d.m.Y",time());
$timerer = date("m",time());
$timererer = date("d",time());
$timestamp = mktime(0,0,0,$timerer,$timererer,$heutejahr);
$conn = mysql_connect("mysql.domainfactory.de", "xxx", "xxx");
if ($conn)
{
mysql_select_db("xxx",$conn);
$result = mysql_query("SELECT name, tag FROM jahrgangsstufe",$conn);
$doedel=1;
$anzahl=1;
while($zeileholen=mysql_fetch_array($result,$conn))
{
$schueler[$anzahl]["name"] = $zeileholen["name"];
$schueler[$anzahl]["tag"] = $zeileholen["tag"];
$anzahl++;
$doedel++;
}
$anzahl--;
for ($i=1;$i<=$anzahl;$i++)
{
$datum = explode ("-",$schueler[$i]["tag"]); //splittet das Datum auf, wir brauchen nur tag und Monat
$schueler[$i]["timestamp"] = mktime(0,0,0,$datum[1],$datum[2],$heutejahr); // jeder bekommt ein timestamp in diesem Jahr
}
for ($i=1;$i<=$anzahl;$i++)
{
$schueler[$i]["abgerechnet"] = $timestamp - $schueler[$i]["timestamp"]; // jetzt wird heute abgezogen
}
// so jetzt haben wir schonmal eine Liste , jetzt muss sie sortiert werden.
// zuerst die postiven Absteigend, dann die negativen vom kleinsten an.
// denn ddas geht dann ja von 31.12. runter auf heute.
$positiv = 0;
$negativ = 0;
$heute = 0;
for ($i=1;$i<=$anzahl;$i++)
{
if ( $schueler[$i]["abgerechnet"] > 0)
{
$positiv++;
}
if ( $schueler[$i]["abgerechnet"] < 0)
{
$negativ++;
}
}
$dieshierzaehlt = 0;
for ($i=1;$i<=$anzahl;$i++)
{
for ($i=1;$i<=$positiv;$i++)
{
$momstand = 1000*24*60*60; // 1000 Tage gibt es nicht
$aktuell = 0;
for($n=1;$n<=$anzahl;$n++)
{
if ($schueler[$n]["abgerechnet"] > 0)
{
if ($schueler[$n]["abgerechnet"] < $momstand) // wir suchen den kleinsten Abstand zu heute
{
$momstand = $schueler[$n]["abgerechnet"];
$aktuell = $n;
}
}
}
$reihenfolge[$dieshierzaehlt]["name"] = $schueler[$aktuell]["name"];
$reihenfolge[$dieshierzaehlt]["timestamp"] = $schueler[$aktuell]["timestamp"];
$dieshierzaehlt++;
$schueler[$aktuell]["abgerechnet"] = 0;
}
for ($i=1;$i<=$negativ;$i++)
{
$momstand = 0; // 1000 Tage gibt es nicht
$aktuell = 0;
for($n=1;$n<=$anzahl;$n++)
{
if ($schueler[$n]["abgerechnet"] < 0)
{
if ($schueler[$n]["abgerechnet"] < $momstand) // wir suchen die kleinste Zahl
{
$momstand = $schueler[$n]["abgerechnet"];
$aktuell = $n;
}
}
}
$reihenfolge[$dieshierzaehlt]["name"] = $schueler[$aktuell]["name"];
$reihenfolge[$dieshierzaehlt]["timestamp"] = $schueler[$aktuell]["timestamp"];
$dieshierzaehlt++;
$schueler[$aktuell]["abgerechnet"] = 0;
}
$heute_geburtstag = mysql_query("SELECT name FROM jahrgangsstufe WHERE DAYOFYEAR(tag)=DAYOFYEAR(NOW())");
while($geburtstagskind = mysql_fetch_array($heute_geburtstag)) {}
{ $geburtstagskind = $row[0]; }
echo"<B><U>Als letztes hatten Geburtstag:</U></B><BR><BR>";
for($i=1;$i<=3;$i++) // gibt die ersten drei aus, ist variabel !
{
if ($reihenfolge[$i]["name"] != $geburtstagskind) {
echo $reihenfolge[$i]["name"]. " am ".date("d.M.Y",$reihenfolge[$i]["timestamp"])."<br>";
}
}
echo"<HR SIZE=\"1\">";
if (!$geburtstagskind)
{
echo "<FONT COLOR=\"FF0000\">Heute, am <B>"; echo date("d.m.y"); echo "</B> feiert niemand aus unserer Jahrgangsstufe Geburtstag. <BR></FONT>";
echo "<HR SIZE=\"1\">";
}
else {
if (sizeof($geburtstagskind)==1) {
echo "<FONT COLOR=\"FF0000\">Heute, am <B>"; echo date("d.m.y"); echo "</B> feiert $geburtstagskind Geburtstag <BR></FONT>";
} else {
echo "<FONT COLOR=\"FF0000\">Heute, am <B>"; echo date("d.m.y"); echo "</B> feiern Geburtstag: ";
for ($i=0;$i<=sizeof($geburtstagskind)-1;$i++) {
if ($i==(sizeof($geburtstagskind)-1)) {
echo $geburtstagskind[$i];
} else {
echo $geburtstagskind[$i].', ';
}
}
echo "<BR></FONT>";
}
echo "<HR SIZE=\"1\">";
}
echo"<B><U>Als nächstes haben Geburtstag:</U></B><BR><BR>";
for($i=$anzahl-1;$i>=$anzahl-3;$i--) // gibt die letzten drei aus, ist variabel !
{
echo $reihenfolge[$i]["name"]." am <B>";
echo date("d.M.Y",$reihenfolge[$i]["timestamp"])."</B><br>";
}
Ähm, Leute... wir sind einen Müh vorm Ziel, könnten wir das noch fertig bekommen? Dann wäre die ganze Mühe nicht umsonst gewesen!
Zwei Dinge die noch etwas buggy sind, müssten behoben werden:
1. Es wird zur Zeit ein Datensatz angezeit, "Torsten Beger" hatte am 30. Nov 2000 als letztes Geburtstag, und das kann nicht stimmen, da ich bei ihm gar keinen Geburtstag eingetragen habe... denn er steht noch mit 0000-00-00 drin.
2. Der jenige der heute geburtstag hat, sollte nicht mit unter denen stehen, die als letztes Geburtstag hatten. Im schlimmsten falle gib es drei Personen die am gleichen Tag geburtstag haben. Dieses funktionierte auch noch nicht ganz, aber sah sehr vielverprechend aus... heute habe,... geburtstag...
vor allem werden wir das nächste Mal genauer abstecken was du willst, also jetz erstmal nachträglich frohe Weihnachten und einen zukünftig guten Rutsch, sobald ich wieder nüchtern bin im nächsten Jahr werd ich mich um dein Problem kümmern, ausser Sky ist schneller !
Ok, danke. Das packen wir/du/ihr schon :-)
Ich wünsch euch jedenfalls auch (nachträglich) frohe Weihnachten, und einen guten Rutsch! (Und ich nüchterne jetzt auch erstmal aus :-)
Comment