Doppeleintrag in DB vermeiden
Honda
- php
Hallo,
ich versuche gerade ein kleines Party-Reservierungssystem (unter Verwendung einer MySQL-DB)zu basteln. Hierzu soll es möglich sein sich online auf die Gästeliste setzen zu lassen. Dabei wiederum sollen Doppeleinträge vermieden werden; dies versuche ich über die eingegebene Email-Adresse zu steuern.
Ich habe nun die Formularelemente "Vorname", "Nachname" und "Email" an eine Datei weitergeleitet (mittels form action) wo überprüft werden soll ob die angegebene Email-Adresse bereits in der Datenbank vorhanden ist.
Mein Versuch dies zu erledigen sieht so aus,... funktioniert aber irgendwie nicht ganz. Hat jemand eine Idee wie dies erfolgreicher gemacht werden kann? *am kopf kratz*
merci für alles!
$Email=$_Post['Email'];
$sql = "SELECT * FROM anmeldung WHERE Email='$Email'";
$num = mysql_num_rows($sql);
if($num=="1" or $num>"1")
{
echo "<center><font class=ueber1>Jede Person darf sich nur einmal anmelden</font></center><br>n";
echo"<br><center><a class=link href=anmeldung.php>Zurück</a></center>";
}
mysql_close();
Hi,
ich versuche gerade ein kleines Party-Reservierungssystem (unter Verwendung einer MySQL-DB)zu basteln.
es sollte m.E. nicht beim Versuch bleiben. ;-)
Hierzu soll es möglich sein sich online auf die Gästeliste setzen zu lassen. Dabei wiederum sollen Doppeleinträge vermieden werden; dies versuche ich über die eingegebene Email-Adresse zu steuern.
Eine findige, aber auch nicht unuebliche Eindeutigkeitsfindung.
Ich habe nun die Formularelemente "Vorname", "Nachname" und "Email" an eine Datei weitergeleitet (mittels form action) wo überprüft werden soll ob die angegebene Email-Adresse bereits in der Datenbank vorhanden ist.
Gut!
Mein Versuch dies zu erledigen sieht so aus,... funktioniert aber irgendwie nicht ganz. Hat jemand eine Idee wie dies erfolgreicher gemacht werden kann? *am kopf kratz*
merci für alles!
Hmm, Du musst schon versuchen zu verstehen, was Du machst.
$Email=$_Post['Email'];
$sql = "SELECT * FROM anmeldung WHERE Email='$Email'";
$num = mysql_num_rows($sql);if($num=="1" or $num>"1")
{
echo "<center><font class=ueber1>Jede Person darf sich nur einmal anmelden</font></center><br>n";
echo"<br><center><a class=link href=anmeldung.php>Zurück</a></center>";
}
mysql_close();
Ich neuere hier einfach mal mit dem Operator ">=", zum restlichen Code moechte ich mich jeglichen Kommentars enthalten. BTW - was funzt denn nicht? Fehlermeldungen oder Wert der Variable '$num' zum Zeitpunkt x?
Gruss,
Ludger
BTW - was funzt denn nicht? Fehlermeldungen oder Wert der Variable '$num' zum Zeitpunkt x?
Gruss,
Ludger
Hallo,
es tut sich einfach gar nichts, .... ich versuche es zu testen indem ich mit dem Browser-Zurückbutton nochmal zum Formular gehe und wieder auf Absenden klicke,.... in der Datenbank steht dann ein Doppeleintrag (zwei mal die gleiche E-Mail-Adresse)
Hallo Honda
ich versuche gerade ein kleines Party-Reservierungssystem (unter Verwendung einer MySQL-DB)zu basteln. Hierzu soll es möglich sein sich online auf die Gästeliste setzen zu lassen. Dabei wiederum sollen Doppeleinträge vermieden werden; dies versuche ich über die eingegebene Email-Adresse zu steuern.
Da ich davon ausgehe, dass eine Person durchaus mehrere Parties besuchen darf, wenn er will, muss die Kombination aus E-Mail-Adresse und Party-Identifizierung eindeutig sein.
Mein Versuch dies zu erledigen sieht so aus,... funktioniert aber irgendwie nicht ganz. Hat jemand eine Idee wie dies erfolgreicher gemacht werden kann? *am kopf kratz*
Sobald einer einmal auf einer Party war, darf er nicht mehr :-)
Eine Idee:
Ein kombinierter eindeutiger Index über die Spalten der E-Mail-Adresse und Party-Nummer. Mache ein INSERT. Rechne damit, dass Fehler auftreten.
Kein Fehler: Erfolgreiche Anmeldung
Fehler "Indexverletzung": Versuch einer Doppelanmeldung
Sonstiger Fehler: Was auch immer.
Freundliche Grüße
Vinzenz
Hello,
Eine Idee:
Ein kombinierter eindeutiger Index über die Spalten der E-Mail-Adresse und Party-Nummer. Mache ein INSERT. Rechne damit, dass Fehler auftreten.
Kein Fehler: Erfolgreiche Anmeldung
Fehler "Indexverletzung": Versuch einer Doppelanmeldung
Sonstiger Fehler: Was auch immer.
Kleine Ergänzung:
mysql_errno() und das Resultset sollte man immer abfragen.
Nur wenn mysql_errno() == 0 ist, konnte das Statement wunschgemäßausgeführt werden.
Aber auch wenn es == 0 ist, muss nicht unbedingt 'was passiert werden.
Dann sind ggf. noch die mysql_affected_rows() von Interesse.
Beispiel: delete from $tablename where id_party = $id_party and email = $email; #[1]
Wenn kein Treffer vorhanden war, konnte das Statement trotzdem fehlerfrei ausgeführt werden.
Allerdings muss das nicht unbedingt das erwartete Ergebnis gewesen sein.
[1] $id_party vorher auf unsigned Integer geprüft
$email vorher mit mysql_[real_]escape_string() behandelt
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
funktioniert aber irgendwie nicht ganz
ist meistens keine ausreichende Fehlerbeschreibung.
$Email=$_Post['Email'];
$sql = "SELECT * FROM anmeldung WHERE Email='$Email'";
$num = mysql_num_rows($sql);
mysql_num_rows() kann man nicht mit dem SQL-Statement füttern. Das muss an mysql_query() gegeben werden.
Dein SQL-Statement ist für diesen Zweck ungeeignet. Wenn du die Anzahl wissen willst, solltest du die DB nach der Anzahl fragen, und sie nicht erst eine Ergebnisliste erstellen lassen, die du dann doch nicht haben willst:
SELECT COUNT(*) FROM ...
$sql = sprintf(
"SELECT COUNT(*) FROM anmeldung WHERE Email='%s'",
mysql_real_escape_string($Email));
Du hast das error_reporting nicht auf E_ALL gesetzt, so dass dir verborgen blieb, dass $_Post nicht existiert. Richtig heißt das $_POST (Großschreibung!).
Warum hast du die Warnung, die bei mysql_num_rows ausgegeben wurde unterschlagen?
Noch weitere Fragen? :-)