ich überlege zur Zeit, wie sich eine Auktionsmaschine mit PHP/MySQL am besten realisieren läßt.
Das Bieten stelle ich mir so vor:
Die zu versteigernden Artikel werden in eine Tabelle "Artikel" geschrieben, mit ID.
Dann könne sich die Bieter in eine Tabelle "Bieter" eintragen, auch mit ID. Wenn die Versteigerung startet, wird in die Tabelle "Auktionen" der Endzeitpunkt und die ArtikelID sowie Startpreis geschrieben.
Das wird dann angezeigt als aktuelle Auktion, die Bieter können bieten, indem sie einen geringeren Preis eingeben, und das Formular abschicken, dadurch wird der Datensatz mit der entsprechenden ID in der Tabelle "Auktionen" aktualisiert, d.h. neuer Preis und neuer Bieter.
Das heißt beim nächsten öffnen steht der neue Preis da.
So hatte ich mir das vorgestellt, ist dagegen was einzuwenden?
Prinzipiell nicht, du mußt nur aufpassen, daß du die Passage "Ist eingereichtes Gebot besser als aktuelles Bestgebot? Wenn ja, Bestgebot und Bieter entsprechend ändern." ununterbrechbar in einem Rutsch machst und nicht etwa erstmal SELECT bestesGebot, dann im Skript prüfen, ob das gut ist und falls ja, dann erst die Daten mit UPDATE in die Datenbank zurückzuschreiben. Zwischen dem SELECT und dem UPDATE könnte nämlich noch ein zweites Gebot reinkommen, das noch besser ist. Und vor allen Dingen könnte es auch -vollständig- bearbeitet werden.
Probleme bereitet mir z.B., wenn ich hinterher eine Liste aller Gebote haben will, müßte ich dann bei jedem neuen Gebot nicht die Tabelle "Auktionen" aktualisieren, sondern einfach einen neuen Datensatz einfügen, und dann immer nach dem mit dem geringsten Preis mit gleicher ID suchen?
Also wenn du die Gebote eh sammeln willst, dann solltest du gleich drei Tabellen machen: eine für die Bieterdaten, eine für die Artikeldaten und eine, in der sämtliche Gebote gesammelt werden (à la "bieterid,artikelid,zeit,gebot").
Damit hast du dann auch das Problem von oben beseitigt. Um das aktuelle Bestgebot rauszufinden, brauchst du nur aus der Gebotetabelle eine Zeile nach entsprechender Sortierung auszulesen.
Deshalb suche ich noch nach einer Möglichkeit, wir man die aktuellen Stände beser zeigen kann, ich könnte je immer per meta-variable das Dokument selbst aktualisieren, Aber das ist auch nicht das ware, da die Seite ja dann immer aufgebaut wird, und wenn man gerde was eingegeben hat..... Gibt es da wohl eine Möglichkeit mit einem Header vom Server aus, der gesendet wird sobald sich was ändert?
Nein, das geht schon prinzipiell nicht. Eine HTTP-Verbindung sieht so aus, das der Browser eine Verbindung zum Server herstellt, einen Befehl an den Server übermittelt und der Server darauf (hoffentlich:) antwortet. Abschließend wird die Verbindung wieder gekappt.
Es ist nicht vorgesehen, daß der Server von sich aus Daten an den Browser sendet. Und das ist auch schon technisch nicht möglich, weil ja keine dauerhafte Verbindung zwischen Server und Browser besteht.
Es gab mal was ganz tolles namens PUSH. Das war die Sensation des Jahrhunderts, ist aber, wie alle anderen Sensationen des Jahrhunderts, wieder eingegangen, bevor es überhaupt richtig eingesetzt wurde.
Mit dieser Technik kenne ich mich nicht aus, frag' mal Google (irgendwas mit "push netscape http server" oder so).
Die einzige praktikable Lösung, die ich vorschlagen würde, wäre ein Java-Applet. Damit hast du die Möglichkeit, eine dauerhafte Verbindung zur Servermaschine aufzubauen - allerdings bräuchtest du dafür auch auf der Gegenseite ein Serverprogramm. Webserver eignen sich für dauerhafte Verbindungen aus eben genannten Gründen eher weniger.
Ich glaube allerdings nicht, daß sich der Aufwand lohnen würde. Mach es wie bei eBay, mit Maximalgeboten (bzw. Minimalgeboten) und automatischen Schritten. Ich finde das System sehr gut, man bietet nie zu viel, braucht aber andererseits auch nicht ständig nachzuschauen, ob man schon überboten wurde.
Problem dabei auch, wenn sollte die Zeit auch sekundengenau mit der Serverzeit übereinstimmen. Gibt es da wohl irgendwelche Tricks, das zu umgehen?
Du kannst höchstens vom Server die aktuelle Zeit in einen Javascript-Bereich der gesendeten Seite schreiben und dann hoffen, daß die Seite gaaaanz schnell beim Browser ist, wo diese Javascript-Uhr (über timeout) dann mit eben der reingeschriebenen Zeit als Basis gestartet wird. Dürfte gut funktionieren, aber einen Quarzwecker würde ich danach nicht stellen :)
Gruß,
soenk.e