PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : doppelte Eintraege verhindern



doobienodoubt
16-10-2008, 11:27
Hi,

um es gleich vorneweg zu sagen, ich bin kein Programmierer und habe auch von php wenig Ahnung und habe dazu noch folgendes Problem:

Wir haben hier an unserem College eine kleine DB in welche unsere Lehrer ihre Laptops, Beamer usw. ueber ein Formular buchen koennen. Das funktioniert auch soweit, allerdings ist es im Moment immer noch moeglich doppelte Eintraege zu machen.
Derjenige, der dieses Formular programmiert hat ist leider nicht mehr da und ich selbst habe wie gesagt wenig Ahnung wie ich das loesen koennte.

Ich poste mal den Code:


if($zeitstempel > time())
{
$eintrag = "INSERT INTO beamerbooking (tag,monat,jahr,stunde,minute,stundefertig,minutef ertig,raum,equipment,gruppe,verantwortlicher,times tamp) VALUES ('$tag','$monat','$jahr','$stunde','$minute','$stu ndefertig','$minutefertig','$raum','$equipment','$ gruppe','$verantwortlicher','$zeitstempel')";
$eintragen = mysql_query($eintrag);
}
else
{
echo "The date you tried to book is in the past, the entry will not be send. Please try again.";
}

if($eintragen != 0)
{
echo "Entry successful";
}

Der Zeitstempel wird so kreiert:


$zeitstempel = mktime("$stunde", "$minute", date("s"), "$monat", "$tag", "$jahr");

Ich dachte, dass man doppelte Eintraege verhindern koennte, wenn man die Zeitstempel miteinander vergleicht. Aber so wie es jetzt ist werden ja immer komplett neue Zeitstempel erstellt.

Jemand nen Vorschlag wie ich das einfach loesen koennte?

doobienodoubt
16-10-2008, 14:36
Also ich habe jetzt noch ein wenig experimentiert und zumindest herausgefunden, dass wegen date(...) immer verschiedene Zeitstempel generiert werden. Mittlerweile bin ich soweit, dass bei gleichem Datum und gleicher Zeit auch ein gleicher Zeitstempel erstellt wird.
Jetzt haengt es scheinbar nur noch an der Abfragebedingung:


if($zeitstempel > time())
{

# check if entry already exists
$old = "SELECT timestamp FROM beamerbooking WHERE (timestamp = '$zeitstempel' AND raum = '$raum') " or $old = 0;

if ($old == 0) {
$eintrag = "INSERT INTO beamerbooking (tag,monat,jahr,stunde,minute,stundefertig,minutef ertig,raum,equipment,gruppe,verantwortlicher,times tamp) VALUES ('$tag','$monat','$jahr','$stunde','$minute','$stu ndefertig','$minutefertig','$raum','$equipment','$ gruppe','$verantwortlicher','$zeitstempel')";
$eintragen = mysql_query($eintrag);
}
else echo "The room is already booked at this date!";

Ein

echo $old
nach dem SELECT-Befehl liefert mir nur ein

SELECT timestamp FROM beamerbooking WHERE (timestamp = '1443515410' AND raum = '1.1') Entry successful

Wo liegt jetzt hier der Fehler?

jan61
16-10-2008, 19:55
Moin,

zuerst mal müsstest Du die Abfrage zur Kontrolle ($old) auch mal abschicken. Im Moment definierst Du nur den SQL, damit ist er aber noch nicht ausgeführt.

Außerdem: Wie wäre es, wenn Du in der MySQL-Datenbank einen eindeutigen Index auf die Spalte "timestamp" legst? Dann kriegst Du nen sauberen SQL-Fehler, wenn ein Zeitstempel doppelt eingefügt werden soll, ganz ohne vorherige Abfrage.

Jan

doobienodoubt
17-10-2008, 14:45
Hi Jan,
vielen Dank! Hat geklappt! Das mit den Unique-Feldern macht die ganze Sache doch viel einfacher. :rolleyes:

Ein schoenes Wochenende dir!