Asterix: Datenbank Einträge mehrerer Clients gleichzeitig

Hallo, ich habe folgendes Problem.
Ich habe einen Countdown auf meiner Webseite die von der Serverzeit generiert wird. das heisst alle clients haben den gleichen Countdownwert.

Wenn der Countdown auf 0 ist soll einen PHP Datei einen Eintrag in ein Datenbank erledigen.

$eintrag = "INSERT INTO bid (name,details,startpreis,endpreis,image,dauer) VALUES ('$name','$details','$startpreis','$endpreis','$image','$dauer')";
$eintragen = mysql_query($eintrag);

So jetzt habe ich das Problem, das wenn 5 Cients auf meiner Seite surfen und bis zum Countdown 0 kommen, alle einen Eintrag machen. Ich hätte aber gerne, das der Eintrag nur ein einziges Mal gemacht wird, egal wieviele Clients auf der Seite sind.
Habe auch schon von flock() oder locking tables gelesen, leider hab ich überhaupt keine idee wie ich das hin bekomme.

Vielen Dank für Eure Hilfe.
Asterix

  1. Habe auch schon von flock() oder locking tables gelesen, leider hab ich überhaupt keine idee wie ich das hin bekomme.

    wie rufen die clients dieses script überhaupt auf wenn der countdown abgelaufen ist?

    und kann dieses script nicht prüfen, ob schon ein eintrag in der datenbank besteht?

    sprich vor dem insert einfach einen select machen und schaun ob eine andere instanz des scripts vor 10 ms schon einen eintrag eingetragen hat?

    1. Hallo danke für eure vielen Hilfestellungen,
      wie kann ich denn überprüfen ob vor 10ms sek ein eitrag in die Datenbank stattgefunden hat?

      THX

  2. Hi,

    So jetzt habe ich das Problem, das wenn 5 Cients auf meiner Seite surfen und bis zum Countdown 0 kommen, alle einen Eintrag machen. Ich hätte aber gerne, das der Eintrag nur ein einziges Mal gemacht wird, egal wieviele Clients auf der Seite sind.

    Und wenn zu dem Zeitpunkt gar kein Client "auf der Seite ist" ...?

    MfG ChrisB

  3. Hello,

    $eintrag = "INSERT INTO bid (name,details,startpreis,endpreis,image,dauer) VALUES ('$name','$details','$startpreis','$endpreis','$image','$dauer')";
    $eintragen = mysql_query($eintrag);

    So jetzt habe ich das Problem, das wenn 5 Cients auf meiner Seite surfen und bis zum Countdown 0 kommen, alle einen Eintrag machen. Ich hätte aber gerne, das der Eintrag nur ein einziges Mal gemacht wird, egal wieviele Clients auf der Seite sind.
    Habe auch schon von flock() oder locking tables gelesen, leider hab ich überhaupt keine idee wie ich das hin bekomme.

    Das geht im Prinzip ganz einfach. Du musst nur ein eindeutiges Zertifikat haben und auf diese Spalte einen Contraint setzen, also einen Unique Index.

    Aus Deinen Angaben

    name,
      details,
      startpreis,
      endpreis,
      image,
      dauer

    kann ich jetzt nicht erkennen, welche denn die Eigenschaft eines Schlüssels (Zertifikat) haben könnte. Du hast den Code einfach nicht gut genug dokumentiert.

    Stell Dir eBay vor. Die haben eine Auktionsnummer.
    Angenommen, da gäbe es eine Tabelle, in der die Auktionsnummer und die Nummer des Bieters inserted werden soll. Auf der Auktionsnummer liegt ein Unique Index. Wenn nun fünf Bieter derselben Auktion versuchen, ihren Datensatz dort eintragen zu lassen, bekommen vier einen MySQL Status beim Insert, der ihnen sagen könnte, dass sie leider Pech gehabt haben, wenn denn der Programmierer nach demmInsert den Status abgefragt hätte.

    Verstanden?

    Ein harzliches Glückauf

    Tom vom Berg

    http://bergpost.annerschbarrich.de

    --
    Nur selber lernen macht schlau
    1. Hallo ich könnte doch die session_id des clients nehmen, oder?
      Aber wie kann ich denn dann verhindern das andere Clients den gleichen Eintrag machen?
      Kannst du mir noch ein bisschen mehr Hilfestellung geben?
      thx ASTERIx

      1. Hello,

        Hallo ich könnte doch die session_id des clients nehmen, oder?
        Aber wie kann ich denn dann verhindern das andere Clients den gleichen Eintrag machen?

        Nein, die Session-ID des Clients ist die falsche Nummer, denn da bekommt doch jeder eine eigene :-)
        Du musst ein Vorgangszertifikat vergeben, dass für alle gleich ist. Da gewinnt dann nr der Erste.

        Kannst du mir noch ein bisschen mehr Hilfestellung geben?

        Nicht wirklich gut, denn Du hast immer noch nicht die Doku zu Deinen Datansätzen geliefert.
        Was verstehst Du unter "doppelt?

        Ein harzliches Glückauf

        Tom vom Berg

        http://bergpost.annerschbarrich.de

        --
        Nur selber lernen macht schlau