SQL: Überpfüfen ob ein Eintrag schon vorhanden ist...
Christian
- php
0 Rouven0 Christian Bliß1 Cheatah
Hallo, ich bräuchte mal wieder Hilfe. ^^
Ich bin gerade für meine Homepage ein "Newslettersystem" am basteln. Eintragen funktioniert wunderbar.
Da ich aber nicht möchte das man sich mehrfach mit der selben E-Mail-Adresse eintragen kann, möchte ich vor dem eintragen überprüfen ob der Eintrag schon vorhanden ist.
Ich habe es so versucht:
» $search = mysql_query('SELECT * FROM liste
WHERE mail='.$\_POST['mail'].'
LIMIT 0 , 30');
» if(!$search) {
» print "Eintrag schon vorhanden!";
» return;
» }
Naja, als Ausgabe bekomme ich immer den Fehler: "Eintrag schon vorhanden!";
Und wenn ich das so ändere:
» $search = mysql_query('SELECT * FROM liste
WHERE mail='.$\_POST['mail'].'
LIMIT 0 , 30');
» if($search) {
» print "Eintrag schon vorhanden!";
» return;
» }
Wird der Punkt irgendwie ganz übersprungen und es wird immer eingetragen.
Was ist daran falsch? Wie würde es richtig sein?
Danke
Christian
Hallo,
schau dir bitte mal an, was die Rückgabe von mysql_query ist: Ein Result-Handle (oder false falls die Abfrage fehlgeschlagen ist).
Du könntest z.B. im Anschluss an die Abfrage mittels mysql_num_rows prüfen, ob du Treffer gefunden hast. Oder du machst ein SELECT COUNT(*) FROM... und liest nach der Abfrage den ersten Wert aus. Steht 0 drin wurden keine Treffer gefunden, ansonsten halt so viele wie da drin stehen.
MfG
Rouven
Hallo,
Ich habe es so versucht:
» $search = mysql_query('SELECT * FROMliste
WHERE mail='.$\_POST['mail'].'
LIMIT 0 , 30');
» if(!$search) {
» print "Eintrag schon vorhanden!";
» return;
» }
Ich verstehe grad nicht, warzm da LIMIT 0 , 30 steht ... was hat das für einen Sinn?
Warum machst du es nicht so:
$mail_eingabe = die eingegebene Mail-Adresse vom Benutzer
SELECT * FROM liste WHERE mail='$mail_eingabe'
dann lässt du dir die Anzahl der Zeilen ausgeben, die diese Abfrage bringt. Ist die Anzahl gleich Null, so ist die E-Mail-Adresse noch nicht eingetragen. Andernfalls doch.
Gruß Christian
Ich habe es so probiert, aber es klappt nicht. Ich probiere es mal wie es Rouven gesagt hat.
Danke trotzdem. :)
Christian
Hi,
Da ich aber nicht möchte das man sich mehrfach mit der selben E-Mail-Adresse eintragen kann, möchte ich vor dem eintragen überprüfen ob der Eintrag schon vorhanden ist.
der Eintrag ist schon vorhanden, wenn der Versuch eines INSERT am Unique-Constraint scheitert, welches Du angelegt hast. Wieso willst Du da vorher noch irgendwelche SQL-Roundtrips abfeuern? Schickst Du auch jemanden zum Supermarkt, um nachsehen zu lassen, ob die noch Tiefkühlpizza mit Peperoni-Schokoladen-Geschmack haben, damit Du anschließend hingehen kannst, um sie zu kaufen?
Cheatah
Also dein Beitrag ist sehr Hilfreich, aber aber INSERT funktioniert auch wenn der selbe Inhalt schon vorhanden ist. Nur was ist "Unique-Constraint". Ich habe gerade mal eben dannach geGooglelt, aber konnte nichts wirklich Hilfreiches finden.
Was ist das?
Christian
Hallo Christian!
Also dein Beitrag ist sehr Hilfreich, aber aber INSERT funktioniert auch wenn der selbe Inhalt schon vorhanden ist. Nur was ist "Unique-Constraint". Ich habe gerade mal eben dannach geGooglelt, aber konnte nichts wirklich Hilfreiches finden.
Die Suche nach Fachausdrücken hilft nicht immer.
Also zuerst etwas Theorie:
http://de.wikipedia.org/wiki/Sql
http://de.wikipedia.org/wiki/Schlüssel_(Datenbank)
Wenn du die Tabelle selbst erstellt hast, solltes du die Spalte „mail” mit einem eindeutigen Schlüssel versehen können. Dann ist es nicht mehr möglich, den selben Wert ein zweites Mal einzutragen.
SQL ist es Wert, erlernt zu werden:
http://www.computerjockey.de/mcdba/SQL_in_21_Tagen/inhalt.htm#TopOfPage
Indizes werden dich besonders interessieren:
http://www.little-idiot.de/mysql/mysql-112.html
Als erste Hinweise sollte das helfen, jetzt musst du erst einmal viel lesen. Ich kann dir sagen, es ist wirklich nützlich.
http://www.gulp.de/kb/mk/chanpos/relationaledb.html#fuenf
Viele Grüße
H-P Ortner
yo,
wobei ein constraint UNIQUE alleine nicht reicht, sondern noch der Constraint NOT NULL zusätzlich eingerichtet werden.
Ilja
Hi,
Die Suche nach Fachausdrücken hilft nicht immer.
keine Suche hilft immer - es kommt auf die Suchstrategie an. Die Suche nach "Unique-Constraint" ist äußerst erfolgreich, wenn man sie auf den Teil des Internets anwendet, der das Thema am ehesten behandeln[1] muss.
Cheatah
[1] Die Site ist bereits recht weit gefasst. Wenn das immer noch zu unpräzise ist, dürfte dev.mysql.com helfen.
Hallo Christian,
... Nur was ist "Unique-Constraint". Ich habe gerade mal eben dannach geGooglelt, aber konnte nichts wirklich Hilfreiches finden.
Was ist das?
Hättest du mal ein Wörterbuch befragt:
"constraint" kann man mit "Einschränkung" übersetzen.
"unique" mit "eindeutig/einmalig/singulär".
Wenn du mit CREATE TABLE eine Tabelle anlegst, kannst du hinter den Spaltenbezeichnungen neben dem Datentyp auch Einschränkungen angeben. Das Datenbanksystem prüft dann bei einem späteren INSERT, ob der einzufügende Wert den Einschränkungen entspricht. UNIQUE bedeutet in dem Fall, dass jedes Datenfeld in einer so markierten Spalte einen eindeutigen Wert besitzt. Oder anders ausgedrückt: Jeder Wert darf nur maximal ein Mal vorkommen.
Im PostgreSQL-Handbuch ist das ordentlich beschrieben:
http://www.postgresql.org/docs/8.1/static/ddl-constraints.html
Im MySQL-Handbuch nicht so schön (aber dafür auf deutsch):
http://dev.mysql.com/doc/refman/5.1/de/create-table.html
Neben den "Constraints" für einzelne Spalten gibt es auch noch Einschränkungen, die für mehrere Spalten oder die ganze Tabelle gelten ...
MffG
EisFuX