Prüfen, ob Eintrag vorhanden ist

lisali

Erfahrenes Mitglied
Hallo,

ich habe folgende Abfrage:

PHP:
list ($cr) = mysql_fetch_row(mysql_query("SELECT 1 FROM `users` AS u 
LEFT JOIN `activate` AS a 
ON u.`id` = a.`uid` 
WHERE a.`uid`='".$_GET['id']."' OR u.`id` = '".$_GET['id']."' IS NULL"));

Also, der letzte Teil ab dem OR funktioniert natürlich nicht.

Ich möchte überprüfen, ob...

1.) der User in der `activate` Table zu finden ist (das funktioniert alleinstehend auch)
2.) der User mit der id von $_GET['id'] überhaupt existiert

Dann mache ich eine Weiterleitung zur Startseite, wenn das passiert... (weil wenn nicht aktiviert oder nicht vorhanden, soll die Profilseite nicht angezeigt werden)
aber wie prüfe ich, ob $_GET['id'] überhaupt in der DB vorhanden ist im selben SQL-Befehl?
 
Mach doch einfach einen "harten" Join ohne LEFT und prüfe anschließend ob $cr den Wert 1 beinhaltet. Wenn nicht, dann leite auf Start weiter.

Du sagst ja selber, der User muss a) existieren und b) aktiv sein.

Grüße BN
 
Auf die Profilseite soll nur der User kommen der aktiv ist und deshalb jetzt mal ne blöde Frage: kann ein User aktiv sein obwohl er nicht existiert ? ? ? ?

Die Überprüfung ob aktiv oder nicht ist da doch wohl ausreichend.

Gruß Thomas
 
Wenn die DB sauber ist, dann wäre das eine einfache Möglichkeit. Sofern jedoch Benutzer Einträge aus der Tabelle users entfernt werden, Einträge in der anderen Tabelle jedoch verbleiben, wäre die Prüfung auf eine Abhängigkeit hin unabdingbar.

Grüße BN
 
Ansonsten müsste es doch so auch gehen:

SQL:
"SELECT 1 AS feld FROM users WHERE users.id = '" .$_GET['id'] ."' UNION SELECT 2 AS feld FROM activate WHERE activate.id = '" .$_GET['id'] ."'";

Kommt als Ergebnis nur 1 Datensatz zurück, ist auch nur in einer der Tabellen ein Eintrag vorhanden. Welche der Tabelle das ist kannst du anhand des Wertes (1 oder 2) auch feststellen.

Gruß Thomas
 
Auf die Profilseite soll nur der User kommen der aktiv ist und deshalb jetzt mal ne blöde Frage: kann ein User aktiv sein obwohl er nicht existiert ? ? ? ?

Die Überprüfung ob aktiv oder nicht ist da doch wohl ausreichend.

Gruß Thomas

Vielleicht habe ich das nicht gut genug erklärt. Also die `activate`-Tabelle speichert nach Registrierung entsprechend die ID des Users. Wenn man sich nicht aktiviert hat, bleibt der Eintrag in der Tabelle bis man sich aktiviert hat. Dann wird alles aus der Tabelle gelöscht.
Ja... und in der User-Tabelle ist der User, der sich registriert hat, immer eingetragen, weil dort auch das Passwort, die E-Mail und so gespeichert werden muss.

Mach doch einfach einen "harten" Join ohne LEFT und prüfe anschließend ob $cr den Wert 1 beinhaltet. Wenn nicht, dann leite auf Start weiter.

Du sagst ja selber, der User muss a) existieren und b) aktiv sein.

Grüße BN

Hey bloddy newbie,

was genau meinst du mit harten?
 
Vielleicht habe ich das nicht gut genug erklärt. Also die `activate`-Tabelle speichert nach Registrierung entsprechend die ID des Users. Wenn man sich nicht aktiviert hat, bleibt der Eintrag in der Tabelle bis man sich aktiviert hat. Dann wird alles aus der Tabelle gelöscht.
Ja... und in der User-Tabelle ist der User, der sich registriert hat, immer eingetragen, weil dort auch das Passwort, die E-Mail und so gespeichert werden muss.

Hi Lisa,

es ist doch wohl so das ich ein Anmeldeformular ausfülle und abschicke. Dann werden diese Angaben in der Tabelle "activate" gespeichert.

Dann erhalte ich eine eMail mit einem Link. Wenn ich diesen Link anklicke, wird die Anmeldung bestätigt und meine Daten werden in die Tabelle "user" übernommen und gleichzeitig wieder aus der Tabelle "activate" gelöscht.

Klar kann es jetzt jemand geben der sich anmeldet aber die Anmeldung dann nicht bestätigt/aktiviert. Diese Einträge sollten dann aber nach 1, 2 Tagen auch automatisch gelöscht werden. Somit bleibt es doch dabei das nur derjenige auf die Profilseite kommen kann und darf der in der Tabelle "user" gespeichert ist.

Deine Abfrage die auf beide Tabellen zugreift ist somit meiner Meinung nach unnötig. Wenn du es trotzdem so prüfen willst, hast du dann meine Abfrage von oben getestet

Gruß Thomas
 
Hey tombe,

ja, das ist fast richtig. Ich habe es etwas anders gemacht. Bei mir braucht man nur die E-Mail Adresse zur Bestätigung, weil viele Leute es hassen mehr Angaben zu machen. Und dann bekommt man ein Passwort zugeschickt, um sich mit E-Mail und Passwort anzumelden. Dann ist man drin, muss selbst nur noch sein gewünschtes Passwort und einen Benutzernamen angeben und dann ist es auch fertig und es wird von "activate" gelöscht. Somit gilt der User als freigeschaltet und das Profil soll dann auch angezeigt werden können.

Und ich wollte eigentlich den User nicht nach 1-2 Tagen löschen, weil ich nämlich per Cronjob immer wieder eine E-Mail Benachrichtigung schicke, dass der Account noch nicht aktiviert ist. Ich habe mir da noch nichts einfallen lassen, aber ich denke ich würde deswegen die Accounts erst nach 2 Monaten oder so löschen.

Bisher habe ich es so gelöst, aber das sind leider 2 Abfragen, was mich etwas stört:

PHP:
elseif ($_GET['s']=='user' && isset($_GET['id']))
{
list ($cr) = mysql_fetch_row(mysql_query("SELECT 1 FROM `users` AS u 
LEFT JOIN `activate` AS a 
ON u.`id` = a.`uid` 
WHERE a.`uid`='".$_GET['id']."'"));
list ($cr2) = mysql_fetch_row(mysql_query("SELECT 1 FROM `users` WHERE `id`='".$_GET['id']."'"));

if ($cr == 1 || $cr2 == 0) header("Location: ?s=home");

}
 
Ich glaube wir reden irgendwie aneinander vorbei.

Nehmen wir an Herr XY kommt zufällig auf die Seite und will sich mit irgendwelchen erfundenen Angaben einloggen.

Tabelle "activate" = NEIN, Tabelle "user" = NEIN -> Somit kein Zugriff auf die Profilseite

Nehmen wir mal an ich habe mich gestern bei dir angemeldet, habe das Formular ausgefüllt aber die Anmeldung noch nicht bestätigt. Jetzt gehe ich heute auf die Seite und will mich einloggen um auf meine Profilseite zu kommen.

Tabelle "activate" = JA, Tabelle "user" = NEIN -> Somit auch kein Zugriff auf die Profilseite

Da ich mich eben nicht einloggen konnte, aktiviere ich nun meine Anmeldung.

Tabelle "activate" = NEIN, Tabelle "user" = JA -> Somit Zugriff auf die Profilseite möglich.

Der Zugriff ist nur erlaubt wenn der Benutzer in der Tabelle "user" vorhanden ist und das ist erst der Fall wenn er sich (logischerweise) angemeldet hat und dies auch bestätigt hat. Warum also willst du beim Login also beide Tabellen prüfen. Das verstehe ich immer noch nicht.

Was die 2 Monate angeht, da kann man unterschiedlicher Meinung sein. Ich denke es ist zu lange und vor allem wenn jemand seinen Zugang nicht aktivieren will und du löschst das erst nach 2 Monaten. Will er dann so lange per Mail daran erinnert werden

Gruß Thomas
 
Zuletzt bearbeitet:
Ach, so meinst du das.

Also, darum habe ich mich ja bereits gekümmert. Das mit dem Login steht eigentlich gar nicht zur Frage. Es geht lediglich um die eigentliche Anzeige der Profilseite für die Gesamtheit.

Das heißt deaktivierte User haben im eigentlichen Sinne eine Profilseite, diese soll aber nicht betrachtbar sein. Genauso wenig die User, die es gar nicht in der Tabelle `users` gibt.

Ich weiß nicht, ob wir immer noch aneinander vorbeireden, aber es geht nur darum, dass die Anzeige der Profilseite nicht erlaubt ist (sprich Weiterleitung), wenn noch nicht aktiviert oder nicht vorhanden.

Und die E-Mail im Zeitraum von einem oder zwei Monaten wollte ich natürlich nicht täglich senden lassen... wie gesagt, das ist jetzt alles noch frisch und werde ich mir noch genauer überlegen. Aber ich fände es auch irgendwie doof, wenn man es bereits nach 2 Tagen löscht.

Weil vielleicht hat sich jemand schnell mal angemeldet und konnte dann aus irgendwelchen Gründen nicht mehr seine Mails prüfen. Und vielleicht erst nach 4 Tagen. Und dann möchte er sein Account aktivieren, aber er ist bereits gelöscht. Dann müsste er alles nochmal machen, was zwar nicht viel Arbeit wäre, aber wer macht sich schon so eine "Mühe" heutzutage bei all den Websites.
 

Neue Beiträge

Zurück