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.
Login freischalten & Email senden
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.
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.
Ich geh jetzt erstmal ein Buchkaufen: PHP und MySQl für den Status vor Anfänger...... 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.
Aber Danke dennoch. Ich werde das hinbekommen...... Fürher oderspäter
Hat´s schon jemand versucht?
Hi,
also,ich muss jetzt an das Problem ran... Hat es eventuell schon jemand gemacht???
also,ich muss jetzt an das Problem ran... Hat es eventuell schon jemand gemacht???
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
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
- Chefpraktikant
- Senior Member
- Beiträge: 302
- Registriert: Do 1. Jan 1970, 02:00
- Wohnort: Freising
- Kontaktdaten:
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:
Dieses Passwort ($webuser['Password']) muß man nur noch an die bei der Registrierung vergebene Emailadresse schicken.
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();
?>
Internetagentur Aysberg • www.aysberg.de • webEdition Partner
Hallo Chefpraktikant,
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:
Richtig war es aber so:
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
Ja, da hast Du natürlich recht. Mittlerweile habe ich das auch mit so einer UniqID gelöst.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.
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);
Code: Alles auswählen
mysql_query("UPDATE tblWebUser SET Confirmed = '1' WHERE UniqID = '".$uniqid."'");
Deine Idee mit dem Datumsfeld und dem Löschen der Datenleichen wäre jetzt natürlich noch die Luxus-Variante.
viele Grüße
afrik
Datenleichen
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
Das sieht alles sehr schön aus, habt ihr den eine lösung für die datenleichen??
gruss
robert
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
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
Wie jetzt die Email versenden
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.
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.
Verschlüsseltes Passwort!?
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:
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 .....
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();
?>
Danke .....
Wer ist online?
Mitglieder in diesem Forum: Google [Bot] und 16 Gäste