Login freischalten & Email senden

Hier können Sie Fragen bezüglich der Kundenverwaltung stellen.
JumpIT

Login freischalten & Email senden

Beitragvon JumpIT » Do 11. Dez 2003, 13:31

Hallo zusammen,

ich bastel gerade an einer Registrierung für einen Login Bereich. Nun möchte ich das zum einen der User der sich gerade Registriert hat eine Email mit einem Passwort erhält welches das System irgendwie automatisch erzeugt. Sprich er kann sich registrieren muss aber auf eine Email warten ,welches ohne Manuelles zutun, versendet wird. ( Email check). Ich habe so was ähnliches hier schon gelesen wo aber nur eine Standart Email versendet wird...

Kann jemand schnell helfen? Habe leider von PHP nicht so sonderlich die Hammer ahnung.

Christoph Lütjen

Beitragvon Christoph Lütjen » Di 30. Dez 2003, 11:00

Hallo,

die Umsetzung ist nicht ganz trivial, aber eigentlich ganz gut möglich ;-) Also, hier ein paar Tipps, die hoffentlich weiterhelfen...

Zuerst brauchen Sie eine eindeutige Nummer, hier sollte der PHP Befehl uniqid() gute Dienste leisten:

http://de3.php.net/manual/en/function.uniqid.php

Diese müssen Sie mit der Mail (im Link) verschicken und in den Kundendaten speichern. (Wie das mit der Mail funktioniert wissen Sie ja, wenn ich richtig gelesen habe ;-)

Jetzt soll wahrscheinlich in der Mail ein Link enhalten sein, der auf eine zweite Seiten "bestaetingung.php" oder ähnlich geht. Diese Seite müsste nun die ID übergeben bekommen. Der Link muss also folgendermaßen aussehen:

http://www.domain.tdl/pfad/bestaetigung ... 1523415234

.. wobei die letzten Zahlen den Wert darstellen sollen, der von uniqid() zurückgegeben wurde und auch in den Kundendaten gespeichert ist.

Auf dieser Bestätigungsseite müssen Sie nun den Datensatz suchen, der diese Nummer hat und ein weiteres Feld (z.B. confirmed) auf z.B. 1 setzen. Werfen Sie hierfür mal einen Blick auf die Tabelle tblWebUser in Ihrer Datenbank. Zum Zugriff können Sie die Funktion mysql_query() nutzen.

http://de3.php.net/manual/en/function.mysql-query.php

Nähere Infos zur SQL Syntax finden Sie auf

http://www.mysql.com

Jetzt können Sie ganz normal über den Tag we:ifRegisteredUser und dem Parameter "permission" prüfen, ob Ihr "confirmed" Feld richtig gesetzt ist und nur dann den Zugriff erlauben.

JumpIT

Beitragvon JumpIT » Di 13. Jan 2004, 12:41

.. wobei die letzten Zahlen den Wert darstellen sollen, der von uniqid() zurückgegeben wurde und auch in den Kundendaten gespeichert ist.

Auf dieser Bestätigungsseite müssen Sie nun den Datensatz suchen, der diese Nummer hat und ein weiteres Feld (z.B. confirmed) auf z.B. 1 setzen. Werfen Sie hierfür mal einen Blick auf die Tabelle tblWebUser in Ihrer Datenbank. Zum Zugriff können Sie die Funktion mysql_query() nutzen.
Ich geh jetzt erstmal ein Buchkaufen: PHP und MySQl für den Status vor Anfänger....

Aber Danke dennoch. Ich werde das hinbekommen...... Fürher oderspäter :wink:

JumpIT

Hat´s schon jemand versucht?

Beitragvon JumpIT » Mo 9. Feb 2004, 13:46

Hi,

also,ich muss jetzt an das Problem ran... Hat es eventuell schon jemand gemacht???

afrik

Beitragvon afrik » Mi 9. Jun 2004, 21:51

Hallo,

ich habe den Tipp von Christoph Lütjen mal umgesetzt, und das funktioniert auch ganz gut.

Nur seltsamerweise klappt es nicht mit dieser uniqid.

Stattdessen habe ich nun die ID des Kunden selbst als Parameter übergeben:
...confirm.php?id=22

Diesen Link kriegt der Kunde geschickt, klickt dann auf die Seite, und dann wird das Feld "Confirmed" in der Datenbank auf 1 gesetzt.

Frage: geht das auch mit der normalen ID des Kunden?
(die ist ja auch eindeutig - sogar Primärschlüssel in der DB)
oder wozu soll diese uniqid gut sein?

Danke
afrik

Benutzeravatar
Chefpraktikant
Senior Member
Beiträge: 302
Registriert: Do 1. Jan 1970, 02:00
Wohnort: Freising
Kontaktdaten:

Beitragvon Chefpraktikant » Do 1. Jul 2004, 11:12

Sinn dieser uniqid ist, den Kunden eindeutig zu identifizieren (wie es ja die ID auch macht), dabei aber nicht so leicht zu erraten ist wie die fortlaufende Nummer der ID in tblWebUser.

Damit das mit der uniqid funktioniert, muß man ein extra Feld in der tblWebUser anlegen, wo man diese uniqid mit dem jeweiligen Benutzer speichert. So läßt er sich auf der bestaetigung.php identifizieren wie mit seiner "normalen" ID.



Zum eigentlichen Problem der Opt-In-Variante des Login. Oben beschrieben ist es ja die wahre Opt-In-Variante, wobei man dabei eigentlich noch ein Datumsfeld verwenden sollte, um z.B. nach 30 Tagen unbestätigte Anmeldungen - also Datenleichen - löschen zu können.

Wir verwenden selbst eine "leichtere" Variante, wie auch in der ersten Frage ursprünglich gefragt: der Benutzer wählt kein eigenes Passwort, sondern bekommt ein zufälliges per Email zugesandt. Grob gesagt funktioniert das wie folgt:

Registrierung ganz normal, nur dass das Passwort-Feld vom typ hidden sein muß und einen beliebigen Wert hat (das Passwort-Feld weglassen geht nicht, da webedition sonst meckert). Nach dem normalen Prozedere zum Registrieren von webedition folgt noch eigener PHP-Code, der das zufällige Passwort erzeugt, speichert und per Email versendet. Die Kommentare sollten erklärend sein:

Code: Alles auswählen

<we:saveRegisteredUser/>
<?php
    // zufälliges Passwort mit 8 Zeichen generieren
    $webuser['Password'] = substr(crypt(uniqid(rand(),1)),0,8);    
    
    $sql = sprintf("UPDATE tblWebUser SET Password='%s' WHERE ID=%s",
                     $webuser['Password'], $webuser['ID']);
    $rs = mysql_query($sql);
    if (!$rs) {
        echo '<p class="alert">Datenbankfehler beim Eintragen des Benutzers.</p>';
    } else if (!mysql_affected_rows()) {
        echo '<p class="alert">Das Passwort konnte nicht gespeichert werden.</p>';
    }
    // Session killen, damit der Benutzer nicht eingeloggt ist
    session_destroy();    
?>
Dieses Passwort ($webuser['Password']) muß man nur noch an die bei der Registrierung vergebene Emailadresse schicken.
Internetagentur Aysberg • www.aysberg.dewebEdition Partner

afrik

Beitragvon afrik » Do 1. Jul 2004, 16:47

Hallo Chefpraktikant,
Sinn dieser uniqid ist, den Kunden eindeutig zu identifizieren (wie es ja die ID auch macht), dabei aber nicht so leicht zu erraten ist wie die fortlaufende Nummer der ID in tblWebUser.
Ja, da hast Du natürlich recht. Mittlerweile habe ich das auch mit so einer UniqID gelöst.

Dass das erst nicht klappte, lag daran, dass ich bei der SQL-Abfrage die UniqID nicht als String behandelt hatte...
(denn wenn man in der Kundenverwaltung ein neues Feld anlegt, kann man ja leider nicht bestimmen, dass es vom Typ int sein soll, es wird immer als varchar(255) in der Datenbank angelegt.)

Ich hatte das erst so gecoded:

Code: Alles auswählen

mysql_query("UPDATE tblWebUser SET Confirmed = '1' WHERE UniqID = ".$uniqid);
Richtig war es aber so:

Code: Alles auswählen

mysql_query("UPDATE tblWebUser SET Confirmed = '1' WHERE UniqID = '".$uniqid."'");
Das klappt jetzt gut.

Deine Idee mit dem Datumsfeld und dem Löschen der Datenleichen wäre jetzt natürlich noch die Luxus-Variante.

viele Grüße
afrik

club-basic

Datenleichen

Beitragvon club-basic » Mo 23. Aug 2004, 09:33

Deine Idee mit dem Datumsfeld und dem Löschen der Datenleichen wäre jetzt natürlich noch die Luxus-Variante. ??

Das sieht alles sehr schön aus, habt ihr den eine lösung für die datenleichen??

gruss
robert

Christoph Lütjen

Beitragvon Christoph Lütjen » Mo 23. Aug 2004, 11:11

Hallo,

CronJob erstellen, der in der tblWebUser die Dateileichen löscht. z.B.

<?php

require('../we/include/conf/we_conf.inc.php');

$max_tage = 30;
$loesche_ab = time() - ($max_tage * 24 * 60 * 60);

$db = DB::connect('mysql://'.DB_USER.':'.DB_PASSWORD.'@'.DB_HOST.'/'.DB_DATABASE);
if(DB::isError($stat = $db->query('delete from tblWebUser where FeldNameDatumsfeld < '.$loesche_ab.'and FeldNameIstBestätigt == 'WertFürNichtbestätigtenKunden')){
die("Datenbankfehler beim Löschen der Datensätze: ".$stat->getMessage());
}else{
die($db->affectedRows()." Datensätze gelöscht.);
}

?>

.. ist nicht getetstet, sollte aber funktionieren. Feldnamen im SQL müssen natürlich angepasst werden. Das Script geht davon aus, dass es sich im Ordner /webEdition/crons befindet. Ansonsten bitte die require Anweisung anpassen.

Weitere Infos: http://pear.php.net, http://www.php.net

JumpIT

Wie jetzt die Email versenden

Beitragvon JumpIT » Do 9. Dez 2004, 17:44

Hallo,

also die sache scheint ja wirklich zu funktionieren. Nur wie versende ich jetzt noch die Email??? Bin in PHP und MySQL leider noch nicht einen Schritt weiter gekommen??!

Sorry.

JumpIT

Verschlüsseltes Passwort!?

Beitragvon JumpIT » Mo 13. Dez 2004, 12:58

Und es geht nochmals um das LoginProblem. Und zwar habe ich die lösung von Chefpraktikant verwendet um ein Passwort aus der UniqID zu erzeugen:

Code: Alles auswählen

<we:saveRegisteredUser/>
<?php
    // zufälliges Passwort mit 8 Zeichen generieren
    $webuser['Password'] = substr(crypt(uniqid(rand(),1)),0,8);   
   
    $sql = sprintf("UPDATE tblWebUser SET Password='%s' WHERE ID=%s",
                     $webuser['Password'], $webuser['ID']);
    $rs = mysql_query($sql);
    if (!$rs) {
        echo '<p class="alert">Datenbankfehler beim Eintragen des Benutzers.</p>';
    } else if (!mysql_affected_rows()) {
        echo '<p class="alert">Das Passwort konnte nicht gespeichert werden.</p>';
    }
    // Session killen, damit der Benutzer nicht eingeloggt ist
    session_destroy();   
?>
Mein Problem ist es das hier ja das Passwort schon verschlüsselt ist. Merin ansatz war ja der das ich $Password per Automatischer Email an den User senden möchte. Aber mit dem Verschlüsselten Passwort kann der ja auch nichts anfangen. Wie löse ich das nun wieder?

Danke .....


Zurück zu „Kundenverwaltung“

Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 16 Gäste