Archiv verlassen und diese Seite im Standarddesign anzeigen : In einer Spalte nach dem DATE suchen, das am nähsten zurück liegt
Larsidotnet 21-11-2001, 16:18 Hi Leute, ich hab mal ein Problemchen.
Ich habe eine Spalte in der sich 100 DATEs befinden.
Nun will ich irgendwie mit NOW() rauskriegen, welches der Dates als letztes war sozusagen. Das Jahr spielt dabei ja eigentlich keine Rolle.
Wie könnte man das abfragen? Ich schätze da müssten zwei for-to schleifen eingebaut werden... hab aber keine ahnung wie.
ich schätze mal das ist ein ganz schön kompliziertes PRoblem, aber ich hoffe trotzdem das ihr mir helfen könnt!
danke, mfg Lars
[...] ORDER BY datespalte DESC
Larsidotnet 21-11-2001, 17:15 Danke aber Sorry, bin noch etwas zu neu in der Materie...
kannst du es ein bisschen ausführlicher beschreiben? das wär super, danke...
was gibt mir der befehl aus? was heisst DESC?
danke
Ist kein direkter Befehl, wohl eher ein Modifier...
Wird z.B. so eingebaut:
SELECT * FROM tabelle ORDER BY datumspalte DESC
wobei ORDER BY die Spalte(n) angibt, nach der (nach denen) geordnet werden soll. ASC (ascending, aufsteigend, niedrigestes zuerst) ist hierbei die Standardeinstellung, DESC (descending, absteigend, höchstes zuerst) muss explizit angegeben werden.
Wir lassen hier also das Ergebnis nach dem Datum sortieren, und zwar die, die am kürzesten zurückliegen (also die, die den höchsten Wert haben) zuerst.
Larsidotnet 21-11-2001, 17:26 Wow, das ist ja Spitze... und das klappt, auch wenn meine Felder als DATE deklariert sind? Sollte ja auch gehen.
Wie schaffe ich es nun, genau den auszugeben, der als letztes Geburtstag hatte. Also nur diesen einen Namen?
nun, da setzen wir jetzt den Modifider LIMIT ein:
SELECT * FROM tabelle ORDER BY datumspalte DESC LIMIT 1
Larsidotnet 21-11-2001, 17:57 geil, das versuche ich gleich mal!!!
nächste Frage: Kann man erkennen, wenn zwei Tage identisch sind? denn, wenn ich ausgebe, wer als letztes Geburtstag hatte, dann sollte es ja gehen, das auch, wenn zwei Leute am selben Tag geburtstag haben, beide ausgegeben werden,...?
danke erstmal... ich versuch das oben...
Larsidotnet 21-11-2001, 18:22 Hmm... das funktioniert noch nicht so ganz. Er gibt mir zwar etwas aus, aber es ist die jüngste im Bunde... und nicht die von heute aus gesehen als letzte Geburtstag hatte. Gibts da noch nen Trick?
thanx
also du könntest noch eine WHERE Klausel einbauen alla WHERE datumsspalte >= '22-11-2001 00:00:00' für den Datumstring schau nochmal nach der genaueren Formatierung, bin jetzt gerade nicht sicher ( Hirn meldet das es genau so dunkel ist wie drausen). Dafür muss du dann das limit wieder raus nehmen. Naja und du musst das Datum wissen von heute :D
man könnte auch mal sowas probieren:
ORDER BY DAYOFYEAR(NOW())-DAYOFYEAR(datespalte) ASC
Ich mach mir später noch Gedanken dazu.
Ich bin ja blöd, verwirre mich selber mit irgendwelchen arithmetischen Problemen... Dabei bringt mySQL ja extra Funktionen für sowas mit:
SELECT * FROM tabelle ORDER BY (TO_DAYS(NOW())-TO_DAYS(datespalte)) ASC
Sollte das gewünschte Ergebnis erzielen!
:D Aber Achtung:
TO_DAYS() is not intended for use with values that precede the advent of the Gregorian calendar (1582), because it doesn't take into account the days that were lost when the calendar was changed.
Larsidotnet 22-11-2001, 14:57 Hi, find ich klasse das ihr mir alle so helft!
Leider hab ich es immer noch nicht hinbekommen.
Es wird weiterhin nur die jüngste im BUnde ausgegeben, also die jenige mit dem Geburtsdatum an erster Stelle. Woran kann das denn liegen?
danke für eure Hilfe, Lars
ICH KORRIGIERE, Zwar die Jüngste, also theoretisch mit dem Geburtsdatm ganz zum Schluss!
nich wahr?
[Editiert von Larsidotnet am 22-11-2001 um 15:08]
was ist denn dein aktueller SQL Query ?
Larsidotnet 22-11-2001, 17:12 So schauts aus:::
cut-----------------
<?
$conn_id = mysql_connect("mysql.domainfactory.de","xxxx","xxxx");
mysql_select_db("xxxx",$conn_id);
$letzter_geburtstag = mysql_query("SELECT name FROM jahrgangsstufe WHERE tag <> '0000-00-00' ORDER BY (TO_DAYS(NOW())-TO_DAYS(tag)) ASC") or die(mysql_error());
$last_geburtstagskind = mysql_result($letzter_geburtstag,0);
$heute_geburtstag = mysql_query("SELECT name FROM jahrgangsstufe WHERE DAYOFYEAR(tag)=DAYOFYEAR(NOW())");
$geburtstagskind = mysql_result($heute_geburtstag,0);
if ($geburtstagskind=="") $geburtstagskind = "niemand aus unserer Jahrgangsstufe";
echo "<FONT SIZE=\"1\">";
echo "Letztes Geburtstagskind: $last_geburtstagskind<BR>";
echo "<HR SIZE=\"1\">";
echo "Heute, am <B>"; echo date("d.m.y"); echo "</B> feiert $geburtstagskind Geburtstag <BR>";
echo "<HR SIZE=\"1\">";
echo "Nächstes Geburtstagskind: <BR>";
mysql_close($conn_id);
?>
cut-----------------
ich hoffe es ist etwas verständlich was ich damit will.
Um es bildlich zu sehen:
http://www.larsi.net/abi2001/anfang.php
danke für deine Hilfe...
bye, Larsi
Mach mal bitte ein
$test = mysql_query("SELECT name,(TO_DAYS(NOW())-TO_DAYS(tag)) AS blub FROM jahrgangsstufe WHERE tag <> '0000-00-00' ORDER BY (TO_DAYS(NOW())-TO_DAYS(tag)) ASC") or die(mysql_error());
while ($testdata = mysql_fetch_array($test)) {
echo 'Name: '.$testdata[name].' / Ergebnis: '.$testdata[blub].'<br>';
}
Larsidotnet 22-11-2001, 18:07 So, hab ich... url ist die selbe.
Das sieht sehr gut aus, weil da immer ne andere Nummer
steht, und bei leuten die am gleichen Tag geburtstag haben, steht die gleiche nummer....
super... nu müsste ich das bloss noch einbauen können...
Hm, sag mir mal bitte, wer korrekterweise als Ergebnis ausgegeben werden müsste.
Larsidotnet 22-11-2001, 18:18 wie ausgegeben werden müsste? Derzeit werden alle ausgegeben... Im Endeffekt soll aber nur derjenige der als letztes Geburtstag hatte ausgegeben werden, und der der als nächstes hat... oder wie meinst du das?
Welche Person davon hatte denn als letztes Geburtstag?
Larsidotnet 22-11-2001, 18:25 Ähm, ach so... moment:
Katharina Kaiser
Hm.. die steht ja mitten in der Landschaft rum... Das ist gar nicht schön...
Aber mir ist im Moment auch absolut nicht klar, woran es liegen könnte... Weiß jemand anders weiter?
Larsidotnet 22-11-2001, 19:11 naja, die zahl die da erzeugt wird, kann man die nich irgendwie als zwischenvariable nutzen? Zur ZEit ist von Jung nach alt sortiert wenn ich das richtig sehe...
Das nützt uns ja nichts... Kann ja einer 30 Jahre alt sein und im Juli geboren sein und der andere 15 und im Mai...
Larsidotnet 22-11-2001, 19:32 aber die zahl ist doch richtig, soweit ich sehe. Also wenn einer ein jahr eher, und im juni geboren ist steht er trotzdem hinter jemandem der im Januar, des vorjahres geburtstag hat. Also die Reihenfolge stimmt schon, von jung nach alt.
Klar, aber:
Es sei
Datum_Aktuell = 08.10.2001
Geb_A = 06.05.1980
Geb_B = 07.05.1979
Korrekt wäre, das B zuletzt Geburtstag hatte... Da hier aber nur das Jahr berücksichtigt wird, und nicht der Tag (obwohl es so sein sollte), wird A angezeigt...
Aber während ich das schreibe, kommt mir eine Idee, woran der Fehler liegen könnte - eben weil das Jahr mit drin ist.
Einen Moment...
Larsidotnet 22-11-2001, 19:42 supi :-) freut mich das meine Dummen fragen dich auf schlaue ideen bringen :-))) hehe
SELECT name FROM jahrgangsstufe WHERE tag <> '0000-00-00' ORDER BY (TO_DAYS(NOW())-TO_DAYS(CONCAT(DATE_FORMAT(NOW(),"%Y"),DATE_FORMAT(tag,"%m-%d")))) ASC
Ähem.. *verlegengrins* Ich hoffe, das geht nun... :D
Wahrscheinlich hab ich mich nun total verrannt und die Lösung geht viel einfacher.
Larsidotnet 22-11-2001, 19:57 Ähm,... nö, leider nich... jetzt ist andre Krämer das letzte Geburtstagskind, der hat aber erst am 30.12. geburtstag. Eigentlich müsste frau kaiser da stehen, die hatte gestern,.... hmmmmmm komisch...
Sorry, hab was vergessen.
SELECT name FROM jahrgangsstufe WHERE tag <> '0000-00-00' ORDER BY (TO_DAYS(NOW())-TO_DAYS(CONCAT(DATE_FORMAT(NOW(),"%Y"),'-',DATE_FORMAT(tag,"%m-%d")))) ASC
Larsidotnet 22-11-2001, 20:13 Nee, komisch, immer noch Andre Krämer... wie kommtn das?
Keine Ahnung... Kaffi, deine große Chance! :)
Larsidotnet 23-11-2001, 11:37 Bitte, Kaffi, wer immer du bist :-) zeig was du kannst :-))) *letztehoffnungsei* *bettel* :-))) danke!
War nur scherzhaft gemeint - wegen seiner mich betreffenden Signatur...
Aber Titus weiß vielleicht hier weiter... Der ist noch nicht von meinem Funktionsdschungel vorbelastet :D
also ich hab jetzt auch schon einige Varianten ausprobiert, auch mit Varianten von wegen ORDER BY MONTH(CURRENT_DATE)-MONTH(tag) usw. und bin zu dem Ergebnis gekommen das MySQL sich strikt dagegen wehrt beim aktuellen Datum an zu fangen, er beginnt irgendwie immer am 31.12., warum auch immer :( Naja, ich würde es in php mit der Hand sortieren, spart Nerven und ich kanns auch besser, ich mag keine Megaqueries die keiner mehr überblicken kann :)
Ich prinzipiell auch nicht; aber ich neige immer dazu, soviel wie möglich auf SQL-Ebene zu machen...
Larsidotnet 23-11-2001, 14:26 Ich sag mal so, wie man das ganze hinbekommt, das ist mir egal, ob php, sql query oder sonstewas. Das schlimme ist, ich kann beides nich so doll, von daher brauch ich eure Hilfe dafür. Also: versuchen wirs unter php. Die Grundbedingungen sind immer noch gleich. Ich habe eine Spalte mit 104 Einträgen des TYPS Date. Einige heissen noch 0000-00-00, das liegt daran das ich den Geburtstag noch nicht kenne. Der Rest bewegt sich zwischen 1981 und 1983.
Und wie gehts nun weißter? Bitte helft mir. Wie funktioniert das ganze? Danke für eure hilfe, ich habe das Gefühl, das wird ein Mörder-Thread :-))) Aber ich finds klasse! :-)))
thanx, Larsi
also inclusive php würd ich es so machen, ich würd die Datum(s) (wie ist die Mehrzahl ?? Germanistikgott Sky ? Datume oder Datums ? Oder anders ? ) nehmen und sie nach Monat und Tag sortieren mit einem ORDER BY, allerdings ohne Jahreszahl, dies hatten wir ja schon. So dann hast schonmal eine Liste in der richtigen Reihenfolge nur das du mitten drin irgendwo deinen Punkt brauchst, also nimmst du das aktuelle Jahr und erweiterst die Datums mit eben diesem so als hätte jeder 2001 Geburtstag, jetzt erzeugst du für jedes Datum den Timestamp. Diesen vergleichsts du jetzt von vorne nach hinten mit dem aktuellen aktuellen Timestamp solange bis ein Timestamp kleiner als der aktuelle ist, dies ist der der als letztes Geburtstag hatte, ab hier gibst du alle bist zu schluss aus, das sind die die bis zum 1.1. gehen, dann gibst du alle die aus von Index 0 des Array beginnend die du vorhin übersprungen hattest, das sind alle die die noch in diesem Jahr Geburtstag haben werden. Das war es.
Larsidotnet 23-11-2001, 16:11 Ähm.... .... ... ja. Ganz genau so wollt ichs machen :-) *spaß* Nee, also, klingt ja alles logisch, aber: Ich hab null Ansatz! :-/ Bis ich das so umsetzten kann, wie dus gesagt hast, sind bestimmt schon die Hälfte der Leute tot :-) Also, *umhilfebettel*, bitte... ihr ganzen Hard-Coder da draussen :-) habt ein Herz für einen Neuling, und gebt mir nen Ansatz... thanx... Larsi
hab hier leider keine DB aufem Rechner und kann deshalb nix scripten was auch funzt, also wenn kein hardcoder es vorher hier postet bastle ich mal ne prealphaversion heute nacht wenn ich daheim bin.
Larsidotnet 23-11-2001, 16:18 boah, das wär echt super! Danke dir! :-)
Bin heut nacht auch noch vorm Rechner, da kann ich das gleich ausprobieren... Danke erstma!
Original geschrieben von JoelH
(wie ist die Mehrzahl ??
Daten AFAIK, bin mir auch ziemlich sicher...
Larsidotnet 24-11-2001, 20:01 Hey Joel, wie schauts aus mit der realalpha version???
:-)
Larsidotnet 26-11-2001, 09:56 Hallo??? :-) *hilfeee*
Larsidotnet 26-11-2001, 11:49 naja, wann haste denn mal wieder Zeit? Ist ja nicht so wild, dachte nur du hast mich vergessen :-) Wäre trotzdem schön wenn wir das noch hinkriegen könnten... wie schauts aus?
so das hab ich jetzt mal schnell reingehackt und auch nicht testen können, es sollte eigentlich machen was du willst, wenn fragen auftauchen oder fehler bitte posten wir kümmern uns darum :
<?php
$heutejahr = date("Y",time());
$heute = date("d.m.Y",time());
$timerer = date("m",time());
$timererer = date("d",time());
$timestamp = mktime(0,0,0,$timererer,$timerer,$heutejahr);
$conn = mysql_connect("datenbankserver","masteruser","masterpass");
if ($conn)
{
$sel = mysql_select_db("datenbankname",$conn);
$query = "SELECT name, tag FROM jahrgangsstufe";
$result = mysql_query($query,$sel);
$anzahl = 1;
while ($zeileholen = mysql_fetch_array( $result, MYSQL_ASSOC ))
{
$schueler[$anzahl]["name"] = $zeileholen["name"];
$schueler[$anzahl]["tag"] = $zeileholen["tag"];
$anzahl++;
}
$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++;
}
}
for ($i=1;$i<=$anzahl;$i++)
{
if ($schueler[$i]["abgerechnet"] == 0)
{
echo $schueler[$i]["name"]." hat heute Geburtstag<br>";
}
}
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;
}
}
}
echo $schueler[$aktuell]["name"]."<br>";
$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;
}
}
}
echo $schueler[$aktuell]["name"]."<br>";
$schueler[$aktuell]["abgerechnet"] = 0;
}
?>
Larsidotnet 27-11-2001, 12:31 Oh, wow, krass :-) Edle Sache... ich hab noch bis um 4 Vorlesung, und dann setz ich mich gleich an den Rechner und probiere das. Riesen Großen Dank erstmal für deine Hilfe... aber ich freu mich mal nicht zu früh :-) Es taucht bestimmt noch ein Problem auf... :-))) ich melde mich. Thanx
(P.S. Ich glaube dieser Thread ist ein neuer Rekord!?)
das hab ich mal überhört, in meinen Scripten tauchen keine Probleme auf, meine Scripts sind Probleme :D :D
so , es hatten sich wirklich Syntaxbugs eingeschlichen, naja und auch unkreative Logikbugs, da ich keine SQL DB da habe hab ich jetzt etwas improvisiert. Dieses Script funzt es ist halt ohne DB sprich ich hab das Array das von der DB kommt simuliert, dafür funzt das Script jetzt perfekt, man kann halt nicht alles haben.
<?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 = true;
if ($conn)
{
$zeileholen["name"][1] = "Korry Solderknall";
$zeileholen["tag"][1] = "1973-04-23";
$zeileholen["name"][2] = "Harry Hirsch";
$zeileholen["tag"][2] = "1973-06-23";
$zeileholen["name"][3] = "Joe Knödel";
$zeileholen["tag"][3] = "1980-02-22";
$zeileholen["name"][4] = "Colin Raglett";
$zeileholen["tag"][4] = "1921-11-27";
$zeileholen["name"][5] = "Karl Napp";
$zeileholen["tag"][5] = "1969-12-23";
$zeileholen["name"][6] = "Salem Unteruns";
$zeileholen["tag"][6] = "1969-12-02";
$anzahl = 1;
$doedel=1;
while($doedel<=6)
{
$schueler[$anzahl]["name"] = $zeileholen["name"][$doedel];
$schueler[$anzahl]["tag"] = $zeileholen["tag"][$doedel];
$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++;
}
}
for ($i=1;$i<=$anzahl;$i++)
{
if ($schueler[$i]["abgerechnet"] == 0)
{
echo $schueler[$i]["name"]." hat heute Geburtstag<br>";
}
}
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;
}
}
}
echo $schueler[$aktuell]["name"]."<br>";
$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;
}
}
}
echo $schueler[$aktuell]["name"]."<br>";
$schueler[$aktuell]["abgerechnet"] = 0;
}
}
?>
PS: Optimierer werden gesucht, sollte nicht schwer sein
ich denke der Code ist verständlich, aber so performand wie Gummistiefel beim 100m Lauf. Die ganzen schleifen kann man zu zwei kürzen denke ich im optimierungswahn und wenn ich endlich mal durch die MULTISORT Funktion durchsteigen würde dann wäre es eine Sache von der 1/4 Codelänge glaub ich.
Larsidotnet 27-11-2001, 18:12 Ja, also ich würd sagen, 1A. Soweit funktioniert das supi, Nur... ich will ja nicht jeden einzeln eintragen... sondern das ganze von einer MySQL Datenbank beziehen. Im ersten Beispiel war ein DBconnect mit drin, ich hab versucht das irgendwie zu verbinden, aber es ist mir nicht gelungen... wer könnte das übernehmen? (jetzt sind wieder die mysql profis gefragt... :-) sky? thanx
Dazu bedarf es gar keines Profis, das ist nicht schwer...
$conn = mysql_connect($dbhost,$dbuser,$dbpass);
if ($conn) {
mysql_select_db($dbname,$conn);
$resid = mysql_query("SELECT namensspalte,datumsspalte FROM tabelle");
for ($i=1;$i<mysql_num_rows($resid);$i++) {
$tempdata = mysql_fetch_array($resid);
$zeileholen["name"][$i] = $tempdata[namenspalte];
$zeileholen["tag"][$i] = $tempdata[datumspalte];
}
$anzahl = 1;
$doedel = 1;
while($doedel<=mysql_num_rows($resid))
{
Ab da weiter wie bisher. Die Spaltennamen, den Tabellennamen und die Datenbankvariablen musst du natürlich noch anpassen.
Larsidotnet 27-11-2001, 19:47 Danke, soweit so gut...
nun scheint der connect zu funktionieren, aber folgender Fehler wird ausgespuckt:
Warning: Supplied argument is not a valid MySQL result resource in /kunden/larsi.net/webseiten/abi2001/anfang.php on line 36
und auch auf Line43
(siehe auch http://www.larsi.net/abi2001/anfang.php)
die betreffenden Zeilen sind diese hier:
for ($i=1;$i<mysql_num_rows($resid);$i++) {
und
while($doedel<=mysql_num_rows($resid))
was kann da schief laufen?
Dann ist deine Query wohl nicht in Ordnung... Poste sie mal kurz.
Hm, und noch ein kleiner Fehler meinerseits:
for ($i=1;$i<=mysql_num_rows($resid);$i++) {
muss es heißen.
Larsidotnet 27-11-2001, 20:11 <?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","dbxxx","xxx");
if ($conn) {
mysql_select_db($xxx,$conn);
$resid = mysql_query("SELECT name, tag FROM jahrgangsstufe");
for ($i=1;$i<=mysql_num_rows($resid);$i++) {
$tempdata = mysql_fetch_array($resid);
$zeileholen["name"][$i] = $tempdata[namenspalte];
$zeileholen["tag"][$i] = $tempdata[datumspalte];
}
$anzahl = 1;
$doedel = 1;
while($doedel<=mysql_num_rows($resid))
{
$schueler[$anzahl]["name"] = $zeileholen["name"][$doedel];
$schueler[$anzahl]["tag"] = $zeileholen["tag"][$doedel];
$anzahl++;
$doedel++;
}
Aha, dann sei doch so gut und
mysql_select_db($xxx,$conn) or die('Fehler bei DB-Auswahl: '.mysql_error());
Larsidotnet 27-11-2001, 21:47 No Database selected? Hä? Hab ich doch gemacht.. oder nich?
das kann ja kein barmherziger Mensch mitansehen, wie ihr PHP mißbraucht für Sachen, für die mySQL geschrieben wurde!
Also ... wir suchen die Leute (name), die zuletzt Geburtstag hatten (tag) aus der Tabelle jahrgangsstufe.
Vor ein oder zwei Jahren wär ich noch losgezogen und hätt per Schleife gesucht ...
# suchen
$t=time(); $n=0;
for ($t=$t-$t%86400; !$n; $t-=68400)
{
$q = mysql_query ("select name from jahrgangsstufe
where tag like '".date('%-m-d', $t)."'");
$n = mysql_num_rows($q);
}
$tag = date(d, $t);
$monat = date(m, $t);
$y = date(y);
# ausgeben
while ($r = mysql_fetch_row($q))
echo "$r[0] hatte am $tag.$monat. seinen "
. ($y-$r[1]). ". Geburtstag.<br>";
Aber mal abgesehen davon, dass das unter Umständen ziemlich lange dauert, ist es auch noch reichlich unelegant und belastet den mySQL-Server unnötig.
.........
Mit einer Query geht´s auch, allerdings muss dann die Abbruchbedingung in PHP geschrieben werden:
$q = mysql_query ("select name,
substr(tag,6,5) as datum,
substr(tag,1,4) as jahr
from jahrgangsstufe
where substr(tag,6,5)<'". date('m-d'). "'
order by substr(tag,6,5) desc, tag asc"
);
$y = date(y);
for ($i=0; $x=mysql_fetch_array($q); $i++)
{
if ($i || $x[datum]!=$lastdatum)
{
$lastdatum=$x[datum];
list ($monat, $tag) = explode('-',$x[datum]);
echo "$x[name] hatte am $tag.$monat. seinen "
. ($y-$x[jahr]). ". Geburtstag.<br>";
}
else
break;
}
Aber hier ist die Schleife doch reichlich kompliziert ... Einfacher geht´s mit zwei Queries.
Erst mysql nach dem passenden Datum suchen lassen; dann alle Leute holen, die an dem Tag Geburtstag hatten:
# letzten Geburtstag ermitteln
$q = mysql_query ("select substr(tag,6,5) as datum
from jahrgangsstufe
where substr(tag,6,5)<'". date('m-d'). "'
order by substr(tag,6,5) desc limit 1"
);
list($datum) = mysql_fetch_row($q);
list ($monat, $tag) = explode ('-', $datum);
$y = date(y);
# alle Leute raussuchen
$q = mysql_query ("select name, substr(tag,1,4)
from jahrgangsstufe
where tag like '%-$datum'
order by tag asc"
);
while ($r = mysql_fetch_row($q))
echo "$r[0] hatte am $tag.$monat. seinen "
. ($y-$r[1]). ". Geburtstag.<br>";
P.S.: Ich geh natürlich in allen Beispielen davon aus, dass das Datum in einem DATE-Feld gespeichert ist, wie sich das gehört.
leider bekomme ich kein eines von deinen zum laufen, naja gut die erste Variante läuft und hat mir eben alles zerschossen weil die Seite innerhalb weniger Sekunden >1.2 MB war dann sind mir hier die Prozesse in die Knie gegangen weil mein virtueller Speicher voll war, Apache hat sich mit ner Exeption verabschiedet, sogar die Inetverbindung hat sich verabschiedet und jetzt hab ich in der Taskleiste 2 von dien DFÜ Verbindungssymbolen :( Das hab bisher sogar ich nicht geschafft das System mit so ein Paar Zeilen in die Knie zu zwingen. Naja wie auch immer, ansonsten die anderen beiden Scripte erzeugen Mysql-Ressourceerrors, er mag ddeine Querys nicht :) An der DB liegst nicht die heisst jahrgangsstufe es wird auch connectet und die DB ausgewählt, das funzt, ich hab auch den Query von v3 mit dem phpmyadmin ein zu geben, daber das geht auch nicht aus date(m-d) hab ich 11-28 gemacht aber nix gehtmehr.
ps: dann doch lieger sicher mit php, da weiss ich dass es funzt, ich bin eh nicht davon überzeugt das die Scripte das machen was sie sollen, ich kann es mir einfach nicht Bildlich vorstellen und das ist selten.
Larsidotnet 28-11-2001, 15:52 Ähm, ja, zurück zum Php Script... wieso funktioniert die Database connection denn nicht??? Kann mir das jemand verraten??? danke...
ui ... da muß ich bald mal meinen Server mit abschießen ... vielleicht doch erst testen, dann posten -)
bis bald!
Tja, poste doch mal deine select_db Anweisung exakt so, wie sie in deinem Code steht (bitte auch nichts durch xxx ersetzen).
Larsidotnet 28-11-2001, 18:49 naja, wollte nicht mein Login hier offenbaren... ivh versteh das auch nicht, hat doch bis jetztz immer geklppt...
Jungs wenn ihr schon mit mysql_select_db arbeitet, damm müsst ihr diese Handle auch verwenden !! Sonst brauchts auch nicht erzeugt zu werden, also
$handle = mysql_select_db($dbname,$conn);
if (!$handle) { die("Sorry, diese DB gibts wohl nicht"); }
$resid = mysql_query("SELECT name, tag FROM jahrgangsstufe",$handle);
[Editiert von JoelH am 29-11-2001 um 06:25]
:confused:
bool mysql_select_db (string database_name, resource [link_identifier])
Das gibt doch kein Handle zurück, sondern nur, ob das Selektieren erfolgreich war. Der Befehl wirkt sich ja auch nur auf $conn aus und ist gültig, bis die Verbindung geschlossen wird oder eine andere DB selektiert wird.
das stimmt zwar, aber wenn die du nur
mysql_select_db ($xyz,$db);
machst ist das zwar schön aber es hilft immer noch nicht weiter , weil du trotzdem den selben Fehler erhalten kannst wie zuvor ! Man sollte schon überprüfen ob die selektion der DB gelungen ist !!
Original geschrieben von Sky ein paar Posts früher
Aha, dann sei doch so gut und
mysql_select_db($xxx,$conn) or die('Fehler bei DB-Auswahl: '.mysql_error());
Larsidotnet 29-11-2001, 15:30 Sorry, ich kein euch beiden nicht folgen!
Hier noch mal das betreffende Stück, so wie es im Moment ausschaut:
<?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","db11111","passwort");
if ($conn) {
mysql_select_db($db11111,$conn) or die('Fehler bei DB-Auswahl: '.mysql_error());
$resid = mysql_query("SELECT name, tag FROM jahrgangsstufe");
for ($i=1;$i<=mysql_num_rows($resid);$i++) {
$tempdata = mysql_fetch_array($resid);
$zeileholen["name"][$i] = $tempdata[namenspalte];
$zeileholen["tag"][$i] = $tempdata[datumspalte];
}
$anzahl = 1;
$doedel = 1;
while($doedel<=mysql_num_rows($resid))
{
$schueler[$anzahl]["name"] = $zeileholen["name"][$doedel];
$schueler[$anzahl]["tag"] = $zeileholen["tag"][$doedel];
$anzahl++;
$doedel++;
... usw....
bitte, nun noch mal für einen armen unwissenden: was hab ich falsch gemacht! wenn er meckert: No Database selected....
danke, Larsi
mysql_select_db($db11111,$conn) [...]
Und wo wird $db11111 gesetzt?
Larsidotnet 29-11-2001, 15:40 na oben drüber? Wo muss ich sie denn "setzen?"
es hing/hängt am mysql_select_db :)
naja und Sky ich weiss auch was du weiter oben posteste aber er hatte es ja nicht übernommen, also nochmal nachharken.
Obendrüber tuest du $conn setzen, aber $db11111 nicht, du benutzt "db1111" als Usernamen.
[Editiert von JoelH am 29-11-2001 um 15:46]
Lass das Dollarzeichen weg und setz den Parameter stattdessen in Anführungszeichen...
Larsidotnet 29-11-2001, 15:49 Oooookay..... soweit so gut... Jetzt ist der Fehler weg.
Aber aussehen tut es nicht sehr viel besser :-)
http://www.larsi.net/abi2001/anfang.php
------------------------------------------- cut
<br>
<b>Warning</b>: Unable to jump to row 0 on MySQL result index 4 in <b>/kunden/larsi.net/webseiten/abi2001/anfang.php</b> on line <b>149</b><br>
<FONT SIZE="1">Letztes Geburtstagskind: André Krämer<BR><HR SIZE="1">Heute, am <B>29.11.01</B> feiert niemand aus unserer Jahrgangsstufe Geburtstag <BR><HR SIZE="1">Nächstes Geburtstagskind: <BR>
<BR><B>Herzlichen Glückwunsch!</B>
</FONT></TD></TR></TABLE>
------------------------------------------- cut
nett, es bringt auch nichts dass du $db11111 so ersetzt wie Sky sagte, ind der $conn anweissung steht das "db11111" für den Usernamen des DB Servers, in die mysql_select_db anweissung wo du $db11111 stehen hast gehört der name der DB, das ist der Name den du der DB gegeben hast die die Tabelle jahrgangsstufe beinnhaltet. Wie administrierst du denn die DB ? mit phpMyAdmin ? Dann schau mal wie die DB heisst !
Larsidotnet 29-11-2001, 15:58 Ich administriere mit phpmyadmin... meine db heisst db20684
ich hab nur immer geändert, weil ich das nicht unbedingt hier veröffentlichen wollte... wo muss ich es dann nu ändern? Ich krieg die Kriese :-) (Bei mir kommt übrigens überhaupt nichts... ich habe nur einen leeren Kasten vor mir :-( )
Derzeitiger Stand:
<?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","db20684","xxxxx");
if ($conn) {
mysql_select_db("db20684",$conn) or die('Fehler bei DB-Auswahl: '.mysql_error());
$resid = mysql_query("SELECT name, tag FROM jahrgangsstufe");
for ($i=1;$i<=mysql_num_rows($resid);$i++) {
$tempdata = mysql_fetch_array($resid);
$zeileholen["name"][$i] = $tempdata[namenspalte];
$zeileholen["tag"][$i] = $tempdata[datumspalte];
}
$anzahl = 1;
$doedel = 1;
while($doedel<=mysql_num_rows($resid))
{
usw...
$conn = mysql_connect("mysql.domainfactory.de","db20684","xxxxx");
ist das db20684 falsch, es sei denn dass das dein username ist mit der du auf die DB zugreifst
ansonsten ist alles richtig. Du musst ja nicht die richtigen posten es reicht ja wenn du weisst was du ändern musst wenn man dir was sagt was du ändern sollst. Der rest sollte okay sein.
Larsidotnet 29-11-2001, 16:04 Das ist ja der Username. Bei allen anderen Sachen komme ich doch auch mit dem Namen so rein... Wieso klappt das bloß hier nicht????ß Das was du vorhin gepastet hast, war übrigens nur ein Kommentar-Schmierzettel, und hatte nix zu sagen....
der username ist gleich des datenbanknamens. naja warum auch nicht, ist ja bei f2s auch so. hmm, und das script geht nicht ? sehr seltsam.
könntest du mit phpmyadmin mal einen dump der DB machen und hier posten, zumindestens einen teilauschnitt ? Das geb ich dann hier mal ein und schau mal, also das script an sich funzt, das ist es irgendwie nicht :(
Larsidotnet 29-11-2001, 16:17 Ok, hier ein kleiner Ausschnitt:
# phpMyAdmin MySQL-Dump
# version 2.2.0
# http://phpwizard.net/phpMyAdmin/
# http://phpmyadmin.sourceforge.net/ (download page)
#
# Host: localhost
# Erstellungszeit: November 29, 2001, 4:18 pm
# Server Version: 3.23.42
# PHP Version: 4.0.6
# Datenbank : `db20684`
# --------------------------------------------------------
#
# Tabellenstruktur für Tabelle `jahrgangsstufe`
#
DROP TABLE IF EXISTS jahrgangsstufe;
CREATE TABLE jahrgangsstufe (
key tinyint(3) NOT NULL default '0',
name varchar(50) NOT NULL default '',
tag date NOT NULL default '0000-00-00',
died date NOT NULL default '0000-00-00',
history longtext NOT NULL,
activity text NOT NULL,
adresse varchar(70) NOT NULL default '',
verheiratet tinyint(1) NOT NULL default '0',
newname varchar(50) NOT NULL default '',
wohnort varchar(70) NOT NULL default '',
telefon varchar(20) NOT NULL default '',
handy varchar(20) NOT NULL default '',
email varchar(50) NOT NULL default '',
icq int(10) NOT NULL default '0',
homepage varchar(70) NOT NULL default '',
bildurl varchar(70) NOT NULL default '0',
lastmodified timestamp(14) NOT NULL
) TYPE=MyISAM COMMENT='Jahrgangsstufe des HGR 2001';
#
# Daten für Tabelle `jahrgangsstufe`
#
INSERT INTO jahrgangsstufe (key, name, tag, died, history, activity, adresse, verheiratet, newname, wohnort, telefon, handy, email, icq, homepage, bildurl, lastmodified) VALUES (20,'André Grobstieg','1982-06-02','0000-00-00','2001 - Abitur am HGR','macht sein Abitur am HGR','Pulsnitzer Straße 65e','','','01454, Radeberg','03528-445207','0172-9361107','housemeister2@gmx.de',115779449,'http://www.housemeister2k.de.vu','http://www.abi01.de/hgr/passpics/andre_grobstieg.jpg',20011124223611),
(51,'André Krämer','1982-12-30','0000-00-00','2001 - Grundwehrdienst in Holzminden','leistet seinen Grundwehrdienst in Holzminden','Flügelweg 59','','','01454, Radeberg','03528-445581','0174-2771035','kraemer@secondsense.de',76012506,'http://www.kraemi.com','http://www.abi01.de/hgr/passpics/andre_kraemer.jpg',20011109215502),
(44,'Andreas Känner','1983-01-30','0000-00-00','2001 - Studium an der TU-Dresden','studiert an der TU-Dresden','Wüllnerstraße 39','','','01139, Dresden','0351-8474678','0175-8303223','andreas.kaenner@gmx.de',108651711,'','http://www.abi01.de/hgr/passpics/andreas_kaenner.jpg',20011129155542),
usw....
jetzt aber
<?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("localhost", "board", "board");
if ($conn)
{
mysql_select_db("db20684",$conn);
$result = mysql_query("SELECT * 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++;
}
}
for ($i=1;$i<=$anzahl;$i++)
{
if ($schueler[$i]["abgerechnet"] == 0)
{
echo $schueler[$i]["name"]." hat heute Geburtstag<br>";
}
}
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;
}
}
}
echo $schueler[$aktuell]["name"]."<br>";
$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;
}
}
}
echo $schueler[$aktuell]["name"]."<br>";
$schueler[$aktuell]["abgerechnet"] = 0;
}
}
?>
Hier ist jetzt der gesamte Code der auch funktioniert, bei mir getestet, du musst nur oben entsprechend die zugriffstdaten austauschen.
also in mysql_connect , der rest sollte gehen. kopier das mal raus und speichers so aufem Server und für es aus, wenn es geht kannste noch immer den ganzen Designkram einbauen !
Larsidotnet 29-11-2001, 16:45 Soweit so gut... aber erstmal kann ich mit der großen Liste nicht viel anfangen. Wie geb ich denn nun den/die jeweiligen gewünschten Namen aus??? kannste mir das noch verraten? Der link ist der selbe, schaus dir mal an...
das kommt morgen ich hab jetzt Feierabend :)
Naja das ist wieder so eine Sache weil das über 3 Schleifen ausgegeben wird. Du kannst ja schonmal werkeln, also anstatt alles direkt aus zu geben, schreibst du zuerst die sachen in ein neues Array und dann gibst du soviel vom Array aus wie du willst,
oder du wartest bis morgen, dann so gegen 10 Uhr sollte es fertig sein.
ich hab jetzt Feierabend.
Morgen früh gehts weiter, die Idee ist alles anstatt aus zu geben zuerst in ein Array zu schreiben und dann soviel vom Array aus zu geben wie man will.
Naja oder du wartest bis morgen so um 10 Uhr, dann sollte ich es spätestens haben :)
Larsidotnet 29-11-2001, 16:59 ok, ich glaube ich lasse lieber die finger davon, und hoffe, das du morgen die Zeit für mich noch irgendwie übrig hast, das wär echt spitze... in diesem Sinne... bis morgen... Larsi
dies ist der Code ab Zeile 48 also dier ersten 47 Zeilen bleiben.
$dieshierzaehlt = 0;
for ($i=1;$i<=$anzahl;$i++)
{
if ($schueler[$i]["abgerechnet"] == 0)
{
$reihenfolge[$dieshierzaehlt]["name"] = $schueler[$i]["name"];
$dieshierzaehlt++;
}
}
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"];
$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"];
$dieshierzaehlt++;
$schueler[$aktuell]["abgerechnet"] = 0;
}
for($i=0;$i<=10;$i++) // gibt die ersten Zehn aus, ist variabel !
{
echo $reihenfolge[$i]["name"]."<br>";
}
}
?>
Larsidotnet 30-11-2001, 08:58 Hey, coole Sache... werd ich gleich mal testen, wenn ich nach Hause komme... Danke erstmal!
Original geschrieben von JoelH
leider bekomme ich kein eines von deinen zum laufen, ...
Also ... hab nochmal geschraubt & im MyAdmin getestet, und es funzt wie gewünscht. (MySQL 3.23.33)
fehlt nur noch die Ausgabe, aber die ist ja kein Problem. *hoff*
$result = array();
$select = "select *,substring(tag,6,5) as DATUM from jahrgangsstufe";
$order = "order by DATUM desc";
$q = mysql_query ("$select where substring(tag,6,5)<='".date('m-d')."' $order");
# wenn in diesem Jahr noch niemand Geburtstag hatte,
if (!mysql_num_rows($q))
# wird das letzte Datum aus dem Vorjahr benötigt
$q = mysql_query ("$select $order");
for ($i=0; $x=mysql_fetch_array($q); $i++)
{
# das Datum der ersten Zeile merken
if (!$i) $datum = $x[DATUM];
# und mit dem Datum der aktuellen Zeile vergleichen
elseif (strcmp($datum,$x[DATUM]))
# ändert sich das Datum, wird die Schleife abgebrochen
break;
# ansonsten eine Zeile dem Ergebnis hinzugefügt
$result[] = $x;
}
Wenn du noch nach Alter sortieren willst, einfach ",tag" (ältesten zuerst) bzw. ",tag desc" an dem Sortierstring anhängen:
$order = "order by DATUM desc,tag";
bzw.
$order = "order by DATUM desc,tag desc";
Larsidotnet 30-11-2001, 16:06 @JoelH Coole Sache! Funktioniert einwandfrei...
Aber: Was muss ich tun, damit der ausgegeben wird, der als nächstes Geburtstag hat?
Danke... wir sind ein riesiges Stück weiter.
Lars
[Editiert von Larsidotnet am 02-12-2001 um 12:35]
Larsidotnet 03-12-2001, 17:15 Hallo? Wie issn das nun?
Wie mache ich mit dem Script, das er mir ausgibt, wer als nächstes Geburtstag hat? Geht es wenn er einen Namen ausgibt, das er dahinter noch das Geburtsdatum ausgibt?
Larsi
garnicht gesehen dass es noch weiter geht, naja die letzte schleife einfach umdrehen.
also das hier austauschen, ist die letzte schleife :
for($i=$anzahl;$i>=$anzahl-10;$i--) // gibt die letzten Zehn aus, ist variabel !
{
echo $reihenfolge[$i]["name"]."<br>";
}
eigentlich hat sich nur die Zeile mit dem for Befehl geändert.
[Editiert von JoelH am 03-12-2001 um 19:39]
@Joel: falsch gedacht
@Lars:
Einfach das Vergleichszeichen in der ersten Query und die Sortierreihenfolge in $order umdrehen:
$order = "order by DATUM asc";
$q = mysql_query ("$select where substring(tag,6,5)>='".date('m-d')."' $order");
Larsidotnet 05-12-2001, 18:51 Kann mir mal jemand sagen was hier dran falsch ist?????
Folgender Fehler wird ausgegeben:
Warning: Unable to jump to row 0 on MySQL result index 3 in /kunden/larsi.net/webseiten/abi2001/anfang.php on line 128
$heute_geburtstag = mysql_query("SELECT name FROM jahrgangsstufe WHERE DAYOFYEAR(tag)=DAYOFYEAR(NOW())");
$geburtstagskind = mysql_result($heute_geburtstag,0);
if ($geburtstagskind=="") $geburtstagskind = "niemand aus unserer Jahrgangsstufe";
echo "Heute, am <B>"; echo date("d.m.y"); echo "</B> feiert $geburtstagskind Geburtstag <BR>";
echo "<HR SIZE=\"1\">";
es muss heissen if (!$blabla) { ..... }
nicht if ($blabla == "")
denn es wird ein false zurückgegeben wenn nichts da ist, nicht ein leerstring und !false = true !!
Larsidotnet 05-12-2001, 19:29 Danke, aber soorry... ist mal wieder zu wenig für mich...
Kannst dus bitte noch mal anhand des letzten Quelltexts von mir zeigen? Das wäre super.. danke
Larsidotnet 06-12-2001, 21:54 Halloooo? Noch nich abhaken bitte! Thanx
Larsidotnet 10-12-2001, 18:54 tschuldigung, wollt nur noch mal mein Thema nach oben rücken. Wir sind noch nicht ganz fertig, aber so kurz vorm ziel sollte man nicht aufgeben? Also, Joel? kannste nochmal schauen???? danke
if ($geburtstagskind=="") $geburtstagskind = "niemand aus unserer Jahrgangsstufe";
echo "Heute, am <B>"; echo date("d.m.y"); echo "</B> feiert $geburtstagskind Geburtstag <BR>";
echo "<HR SIZE=\"1\">";
meinte ich
es muss
if (!$geburtstagskind) { echo "niemand aus unserer Jahrgangsstufe";}
else{
echo "Heute, am <B>"; echo date("d.m.y"); echo "</B> feiert $geburtstagskind Geburtstag <BR>";
echo "<HR SIZE=\"1\">";}
heissen.
Larsidotnet 11-12-2001, 16:38 Habs jetzt so, auch wenns umständlicher klingt als das was ich vorher hatte:
----------------------
$heute_geburtstag = mysql_query("SELECT name FROM jahrgangsstufe WHERE DAYOFYEAR(tag)=DAYOFYEAR(NOW())");
$geburtstagskind = mysql_result($heute_geburtstag,0);
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{
echo "<FONT COLOR=\"FF0000\">Heute, am <B>"; echo date("d.m.y"); echo "</B> feiert $geburtstagskind Geburtstag <BR></FONT>";
echo "<HR SIZE=\"1\">";}
------------------------
Es kommt aber immer noch der selbe Fehler:
Warning: Unable to jump to row 0 on MySQL result index 3 in /kunden/larsi.net/webseiten/abi2001/anfang.php on line 128
wieso row0 ????
Larsidotnet 18-12-2001, 12:06 Joel? Lebst du noch, oder bist du im Weihnachtsurlaub??? :-)
I need your help :-) thanx
schmalle 18-12-2001, 12:42 "$geburtstagskind = mysql_result($heute_geburtstag,0);" ersetzten durch
while($row = mysql_fetch_array($heute_geburtstag))
{ $geburtstagskind = $row[0]; }
sollte gehen
Larsidotnet 18-12-2001, 22:33 Super, danke für den Tip! Es funktioniert!!!!
Larsidotnet 18-12-2001, 22:44 So, nun meine Aller letzte Bitte in diesem Thread!
unter http://www.larsi.net/abi2001/anfang.php
ist das derzeitige Ergebniss! Und es ist fast perfekt
wie ich es mir vorgtestellt hatte!
Nur eins fehlt noch! Wie schaffe ich es, das bei den nächsten dreien und letzten dreien hinter dem Name, der jeweilige Geburtstag in [eckigen Klammern angezeigt wird] Sonst weiss man ja nicht wann der nächste geburtstag hat:-)
ich schätze mal da wird sich bloss Joel in dem Quelltext auskennen und zurecht findne :-)
naa du liest halt das Datum mit aus und fügst es in den echobefehl ein, hinter den Namen.
Larsidotnet 19-12-2001, 07:10 Hab ich probiert, bin leider an dem Umfang des Quelltexts gescheitert. kannste mir sagen wo genau? danke.
kannst du mir das Script mal zumailen ? jbb@joelh.de bitte
so sollte es gehen, ich hab die neuen Zeilen mit dem kommentar // ist neu !!!!! gekennzeichnet und die veränderten/erweiterten mit // ist erweitert !!! sollte nur ein paar sein !
<?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++)
{
if ($schueler[$i]["abgerechnet"] == 0)
{
$reihenfolge[$dieshierzaehlt]["name"] = $schueler[$i]["name"];
$reihenfolge[$dieshierzaehlt]["timestamp"] = $schueler[$i]["timestamp"]; // ist neu !!!!!
$dieshierzaehlt++;
}
}
for ($i=1;$i<=$positiv;$i++)
{
$momstand = 1000*24*60*60; // 1000 Tagegibt 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"]; // ist neu !!!!
$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"]; // ist neu !!!!
$dieshierzaehlt++;
$schueler[$aktuell]["abgerechnet"] = 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 !
{
echo $reihenfolge[$i]["name"]. " am ".date("d.M.Y",$reihenfolge[$i]["timestamp"])."<br>"; // ist erweitert !!!!
}
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]; }
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{
echo "<FONT COLOR=\"FF0000\">Heute, am <B>"; echo date("d.m.y");
echo "</B> feiert $geburtstagskind Geburtstag <BR></FONT>";
echo "<HR SIZE=\"1\">";}
echo"<B><U>Als nächstes haben Geburtstag:</U></B><BR>";
for($i=$anzahl;$i>=$anzahl-3;$i--) // gibt die letzten drei aus,ist variabel !
{
echo $reihenfolge[$i]["name"]." am "; // ist erweitert !!!!!
echo date("d.M.Y",$reihenfolge[$i]["timestamp"])."<br>"; // ist neu !!!!!
}
}
?>
Larsidotnet 19-12-2001, 18:55 Hey danke....
es kommt noch ein kleines Fehlerchen, kannst du noch mal
auf die URL schauen http://www.larsi.net/abi2001/anfang.php
und dir anschauen wer als nächstes Geburtstag hat?
Da kommt als erstes "am 01.Jan 1970"
Ist bestimmt nur ein Flüchtigkeitsfehler...
Hier noch mal das Script.
Wenn das dann weg ist, dann haben wirs endlich geschafft!!!
<?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++)
{
if ($schueler[$i]["abgerechnet"] == 0)
{
$reihenfolge[$dieshierzaehlt]["name"] = $schueler[$i]["name"];
$reihenfolge[$dieshierzaehlt]["timestamp"] = $schueler[$i]["timestamp"];
$dieshierzaehlt++;
}
}
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;
}
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]; }
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{
echo "<FONT COLOR=\"FF0000\">Heute, am <B>"; echo date("d.m.y"); echo "</B> feiert $geburtstagskind Geburtstag <BR></FONT>";
echo "<HR SIZE=\"1\">";}
echo"<B><U>Als nächstes haben Geburtstag:</U></B><BR>";
for($i=$anzahl;$i>=$anzahl-3;$i--) // gibt die letzten drei aus, ist variabel !
{
echo $reihenfolge[$i]["name"]." am ";
echo date("d.M.Y",$reihenfolge[$i]["timestamp"])."<br>";
}
}
?>
for($i=$anzahl-1;$i>=$anzahl-3;$i--) // gibt die letzten drei aus, ist variabel !
Larsidotnet 20-12-2001, 10:42 Danke, hat funktioniert! Also designmäßig ist es jetzt
perfekt und gefält mir sehr gut!
Wie sollte es aber anders sein? Ich habe einen Bug entdeckt.
Heute ist der 20.12. Gestern hat er richtig angezeigt das jemand am 19. also gestern - HEUTE Geburtstag hat.
am 20. aber zeigt er den, der am 19. hatte nicht unter den letzten dreien mit auf.
Ich glaube ich hatte das schon mal, da war der jenige dann erst einen Tag später zu sehen. bin mir aber nich sicher. woran kann das liegen?
thanx, Larsi
DAYOFYEAR(tag)=DAYOFYEAR(NOW())
Ich weiß nicht, von wem du gehostet wirst, aber unter Umständen der Zeitverschiebung wegen...?
Larsidotnet 20-12-2001, 10:49 Das DAYOFYEAR(tag)=DAYOFYEAR(NOW()) funktioniert ja einwandfrei. Es wird nur benötigt für den Fall das Heute jemand geburtstag hat. und das klappt auch wunderbar.
Doch, wenn gestern jemand geburtstag hatte, dann wird er nicht angezeigt, bei denen die als letztes hatte...
werde von domainfactory.de gehostet. dürfte keine probleme geben.
irgendein wert scheint noch nicht zu stimmen für den fall das jemand einen tag vor heute geburtstag hatte...
schmalle 20-12-2001, 11:00 wollt ihr nicht mal bei kleinem ein neues thread aufmachen? das geht ja gar nicht hier :D
schmalle du musst ja nicht jedesmal auf Seite eins anfangen zu lesen wenn du das Topic anschaust *ggg*
@Larsi,
hmm, also lass dir mal die ganze liste ausgeben und schaumal was so alles drin steht , dann erkennst du vielleicht ein System. Ich weiss jetzt nicht warum das nicht geht.
Larsidotnet 20-12-2001, 11:16 Ähm... ganze Liste ausgeben? so sehr bin ich durch den quelltext noch nicht durchgestiegen. wie mach ich das?
for($i=1;$i<=3;$i++) // gibt die ersten drei aus, ist variabel !
in
for($i=1;$i<=$anzahl;$i++) // gibt alle aus, ist variabel !
ändern. und dann mal die Reihenfolge betrachten was da schief geht in der Liste.
Larsidotnet 20-12-2001, 11:32 Das kam raus:
Ein Name fehlt, nämlich der der gestern geburtstag hatte...
----------------------------------------------
Philipp Böhmig am 17.Dec.2001
Silvia Wurm am 17.Dec.2001
Thomas Herklotz am 10.Dec.2001
Matthias Neubert am 06.Dec.2001
Katharina Kaiser am 21.Nov.2001
Anja Kallauch am 19.Nov.2001
Melanie Schreiber am 15.Nov.2001
Franziska Mittag am 12.Nov.2001
Ines Koch am 28.Oct.2001
Julia Hänsel am 18.Oct.2001
Claudia Querner am 01.Oct.2001
Yvonne Querner am 01.Oct.2001
Angela Herrmann am 24.Sep.2001
Markus Hartig am 23.Sep.2001
Daniel Großmann am 22.Sep.2001
Robert Neugabauer am 20.Sep.2001
Sebastian Flegel am 16.Sep.2001
Stefan Bosdorf am 15.Sep.2001
Manuela Winkler am 13.Sep.2001
Thomas Rentsch am 09.Sep.2001
Nadia Schnorrbusch am 03.Sep.2001
Katrin Menzel am 31.Aug.2001
Katja Röhl am 21.Aug.2001
Lars Großmann am 09.Aug.2001
Uwe Biscop am 09.Aug.2001
Dana Mühlbauer am 07.Aug.2001
Matthias Metzke am 06.Aug.2001
Matthias Zocher am 06.Aug.2001
Maik Kießling am 03.Aug.2001
Stephanie Naumann am 28.Jul.2001
Linn Truxa am 19.Jul.2001
Heike Hilbenz am 16.Jul.2001
Robert Endler am 16.Jul.2001
Claudia Schöne am 12.Jul.2001
Tina Weirauch am 09.Jul.2001
Claudia Schier am 08.Jul.2001
Martin Schubert am 08.Jul.2001
Nadine Lotzmann am 08.Jul.2001
Robert Magiera am 30.Jun.2001
Carsten Müller am 29.Jun.2001
Friederike Schöbel am 29.Jun.2001
Yvonne Kretzschmar am 23.Jun.2001
Kathrin Hantzsche am 21.Jun.2001
Sandro Haubold am 14.Jun.2001
Karin Hofmann am 13.Jun.2001
Anne Reimann am 05.Jun.2001
André Grobstieg am 02.Jun.2001
Anne Bergmann am 02.Jun.2001
Carina Hoppstock am 31.May.2001
Patrick Wernicke am 28.May.2001
Matthias Rothe am 26.May.2001
Evelyn Babatz am 21.May.2001
Jan Helas am 18.May.2001
Franziska Buchner am 13.May.2001
Jan Schulz am 12.May.2001
Frank Jahn am 30.Apr.2001
Janine Rooch am 28.Apr.2001
René Bonkowski am 19.Apr.2001
Emanuel Thomas am 17.Apr.2001
Nicole Schmidt am 11.Apr.2001
Ronny Otte am 05.Apr.2001
Katja Günther am 23.Mar.2001
Torsten Leuthold am 17.Mar.2001
Konrad Schütze am 26.Feb.2001
Magnus Thiemig am 26.Feb.2001
Robert Hantzsche am 19.Feb.2001
Rena Förster am 07.Feb.2001
Andreas Känner am 30.Jan.2001
Juliane Schlicke am 30.Jan.2001
Silvia Großmann am 21.Jan.2001
Steve Weidig am 13.Jan.2001
Andrej Balzer am 30.Nov.2000
Anja Böhme am 30.Nov.2000
Anja Kowalke am 30.Nov.2000
Anne Philip am 30.Nov.2000
Dirk Hantzsche am 30.Nov.2000
Fanny Nitschke am 30.Nov.2000
Gerd Hübner am 30.Nov.2000
Ilka Fiedler am 30.Nov.2000
Jan Lorber am 30.Nov.2000
Johannes Kuhnert am 30.Nov.2000
Katharina Mittag am 30.Nov.2000
Marc Paulitz am 30.Nov.2000
Marcel Lindner am 30.Nov.2000
Maria Barthel am 30.Nov.2000
Markus Starzetz am 30.Nov.2000
Martin Spillner am 30.Nov.2000
Matthias Böhm am 30.Nov.2000
Matthias Hommel am 30.Nov.2000
Michael Fuchs am 30.Nov.2000
René Mundt am 30.Nov.2000
Reni Gabel am 30.Nov.2000
Ronny Forke am 30.Nov.2000
Sebastian Kiontke am 30.Nov.2000
Sebastian Thieme am 30.Nov.2000
Steffi Berndt am 30.Nov.2000
Thomas Nebel am 30.Nov.2000
Thomas Wähnert am 30.Nov.2000
Tobias Klengel am 30.Nov.2000
Torsten Beger am 30.Nov.2000
André Krämer am 30.Dec.2001
Christiane Höfgen am 29.Dec.2001
Sven Kotte am 24.Dec.2001
am 01.Jan.1970
seltsam, hab jetzt keine Idee dazu, vielleicht ist das die 1.1.1970 Leiche, hmm, warte mal ab was morgen passiert, wenn er dann immernoch weg ist ist es sehr seltsam, ansonsten ist es nur misterös, weiss gerade nicht an was es liegt , sorry.
Larsidotnet 20-12-2001, 11:38 ich vermute morgen ist er da. Ich hab das schon mal beobachtet, aber nicht gezielt verfolgt.. ob das was mit 1970 zu tun hat weiß ich auch nich,...
mal sehen wies morgen ausschaut!
danke erstmal. cu Lars
Original geschrieben von JoelH
for($i=1
Fängt der Array-Index nicht bei 0 an?
schmalle 20-12-2001, 12:02 ich meine joel versucht die leiche zu überspringen ...
fehlt schon wieder ein post von mir...
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 :
for($i=0;$i<=2;$i++) // gibt die ersten drei aus, ist variabel !
der rest sollte stimmen, also mit der Schleife von Sky.
Larsidotnet 20-12-2001, 13:23 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.
wers nich verstanden hat: http://www.larsi.net/abi2001/anfang.php
statt
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\">";
Larsidotnet 20-12-2001, 13:40 Perfekt, ich glaube jetzt hammers!!! Ein wahnsinniges Dankeschön an alle die mitgeholfen haben! Ihr seid super!
Larsidotnet 20-12-2001, 13:43 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\">";
}
Larsidotnet 20-12-2001, 14:02 Phu, jetzt bin ich durcheinander :-)
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++)
{
if ($schueler[$i]["abgerechnet"] == 0)
{
$reihenfolge[$dieshierzaehlt]["name"] = $schueler[$i]["name"];
$reihenfolge[$dieshierzaehlt]["timestamp"] = $schueler[$i]["timestamp"];
$dieshierzaehlt++;
}
}
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>";
}
}
?>
Larsidotnet 26-12-2001, 22:14 Ä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...
Biiittteeee. Bringen wir das zu Ende!
Thanx Larsi
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 !
PS: Congrats zu 1000 Postings+ Sky.
Larsidotnet 29-12-2001, 15:56 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 :-)
Larsidotnet 07-01-2002, 18:11 Mahlzeit :-) Na, Sylvester gut überstanden? Wieder nüchtern? Dann könnten wir ja jetzt den ultimativen letzten Part angehen? oder?
Das wär echt klasse,....
bye, Larsi
Larsidotnet 07-01-2002, 18:16 Mahlzeit :-) Na, Sylvester gut überstanden? Wieder nüchtern? Dann könnten wir ja jetzt den ultimativen letzten Part angehen? oder?
Das wär echt klasse,....
bye, Larsi
Larsidotnet 07-01-2002, 18:27 Mahlzeit :-) Na, Sylvester gut überstanden? Wieder nüchtern? Dann könnten wir ja jetzt den ultimativen letzten Part angehen? oder?
Das wär echt klasse,....
bye, Larsi
Larsidotnet 14-01-2002, 12:15 Na Joel, Euro Umstellung erfolgreich? Stress bewältigt? Ich will nicht nerven, nur ab und zu mal erinnern. :-) bye, Larsi
Ich muss noch mal editieren. Habe mir gerade den Thread SQL Klausur durchgelesen! Ich muss dir Joel hier noch mal ein Riesen Großes Dankeschön aussprechen, da du mich ja auch in dem Thread erwähnt hast. ICh bin ja auch neu in der Materie, und das alles hat mich schon mehr als eine schlaflose Nacht gekostet. Aber auch wenn die Probleme noch so sinnlos waren, oder einfach, habe ich hier immer jemanden gefunden, der mir geholfen hat. Und insbesondere Sky und JoelH haben mich nicht hängen lassen, das finde ich einfach klasse. Und ich glaube das einzige, was mich von diesem Zoga unterscheidet ist, das ich es lernen will, aber einfach das meisste noch nicht kann! Aus Fehlern wird man ja klug, und ich habe in meiner "Php-Sql-Karriere" schon tausende Fehler gemacht. Und das war auch gut so, denn ich habe aus jedem Fehler etwas gelernt! Will sagen: DANKE das es noch Leute wie euch gibt, und ich hoffe ich kann mich irgendwann mal erkenntlich zeigen.
[Editiert von Larsidotnet am 14-01-2002 um 12:51]
Larsidotnet 14-03-2002, 09:17 Hallo? Ist noch jemand da der mir helfen kann? Joel? Gibts dich noch? Wäre echt klasse, wenn mir jemand noch bei zwei Klitze kleinen Problemen helfen könnte! Danke schon mal im Vorraus!
Gruss Lars
schmalle 14-03-2002, 09:28 mach mal neuen thread auf. hier blickt keiner mehr durch!
|
-
- |