[NEUES MODUL] Kundenregistrierung inkl. Emailaktivierung

Gesperrt
m2Designer
Beiträge: 41
Registriert: Mo 23. Aug 2004, 09:47
Kontaktdaten:

[NEUES MODUL] Kundenregistrierung inkl. Emailaktivierung

Beitrag von m2Designer »

Hallo Community,

um PHP zu lernen und vorallem auch Contenido ein bisschen besser zu verstehen, habe ich ein Registrierungsformular inkl. Emailbestätigung an den User geschrieben. Ich weiss leider nicht, ob ich die Umsetzung elegant gelöst habe oder nicht :? Immerhin ist dies mein 1tes PHP Script!

Was macht dieses Script?
Ein Benutzer kann sich auf der Seite registrieren und muss seinen Account über seine Emailadresse aktivieren.

Nun zur Installation:

1. Ladet euch folgende Datei runter:

http://www.m2designs.de/con_module/M2DLogin.rar

2. Öffnet die config.php und passt eure Daten an!

3. Ladet die Dateien auf euren Webspace in das Verzeichnis
cms/module/login (Ordner Login bei Bedarf anlegen)

4. Führt im PHPmyAdmin folgenden Befehl aus:

Code: Alles auswählen

ALTER TABLE `con_phplib_auth_user_md5` ADD `status` set( 'activ', 'waiting', 'locked' ) NOT NULL default 'waiting'
5. Ein neues Modul anlegen (Name bleibt euch überlassen)
Der Input bleibt leer!

Output lautet wie folgt:

Code: Alles auswählen

<?php
include('modules/login/config.php');

$username = $_POST['reg_name'];
$password  = $_POST['reg_pw2'];
$reg_pw = $_POST['reg_pw'];
$email = $_POST['reg_mail'];
$realname  = $_POST['reg_name1'];
$form = $_GET['form'];
$miss = "";

echo'<form name="form1" method="post" action="front_content.php?form=1"> 
<table width="400" border="0" align="center" cellpadding="0" cellspacing="0" class="layoutbox"> 
  <tr> 
    <td width="200"><font><strong>Registrierung bei '.$emailname.'</strong></font></td> 
    <td width="200">&nbsp;</td> 
  </tr> 
  <tr> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
  </tr> 
  <tr> 
    <td valign="top"><font>Benutzername*</font></td> 
    <td><input name="reg_name" type="text" class="input" id="reg_name" value="'.$reg_name.'"> 
    </td> 
  </tr> 
  <tr> 
    <td valign="top"><font>Name*</font></td> 
    <td><input name="reg_name1" type="text" class="input" id="reg_name1"  value="'.$reg_name1.'"> 
    </td> 
  </tr> 
  <tr> 
    <td valign="top"><font>EMail*</font></td> 
    <td><input name="reg_mail" type="text" class="input" id="reg_mail"  value="'.$reg_mail.'"> 
    </td> 
  </tr> 
  <tr> 
    <td valign="top"><font>Passwort*</font></td> 
    <td><input name="reg_pw" type="password" class="input" id="reg_pw"> 
    </td> 
  </tr> 
  <tr> 
    <td valign="top"><font>Passwort*<br>
      wiederholen</font></td> 
    <td><input name="reg_pw2" type="password" class="input" id="reg_pw2"> 
    </td> 
  </tr> 
  <tr> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>Felder mit * m&uuml;ssen ausgef&uuml;llt werden! </td>
  </tr> 
  <tr> 
    <td>&nbsp;</td> 
    <td><input type="submit" name="Submit" value="Anmelden"></td> 
  </tr> 
</table> 
</form>';

if ($form == 1) 
{
include('modules/login/config.php');
//Eingabe Benutzername prüfen
if ($form == 1 AND empty($reg_name)) 
{ 
echo'<br><font color="#FF0000" size="2" face="Arial, Helvetica, sans-serif"><b>Sie müssen einen Benutzernamen angeben</b></font>'; 
$miss = $miss."<Li>Benutzername";
}
//Eingabe Name prüfen
if ($form == 1 AND empty($reg_name1)) 
{ 
echo'<br><font color="#FF0000" size="2" face="Arial, Helvetica, sans-serif"><b>Sie müssen einen Namen angeben</b></font>'; 
$miss = $miss."<Li>Name";
}
//Eingabe Email prüfen
if ($form == 1 AND empty($reg_mail)) 
{ 
echo'<br><font color="#FF0000" size="2" face="Arial, Helvetica, sans-serif"><b>Sie müssen eine E- Mail angeben</b></font>'; 
$miss = $miss."<LI>Mail";
}

//Eingabe Passwort prüfen
if ($form == 1 AND empty($reg_pw)) 
{ 
echo'<br><font color="#FF0000" size="2" face="Arial, Helvetica, sans-serif">Sie müssen ein Passwort angeben</font>'; 
$miss = $miss."<LI>pw";
}

//Eingabe Passwörter vergleichen prüfen
if ($form == 1 AND $reg_pw != $reg_pw2) 
{ 
echo'<br><font color="#FF0000" size="2" face="Arial, Helvetica, sans-serif">Die Passwörter stimmen nicht überein. Bitte versuchen Sie es erneut</font>'; 
$miss = $miss."<LI>pw2";
} 

$user_result = mysql_query("SELECT * FROM $user_tabelle WHERE username = '$username'", $mysql_con);
if (mysql_affected_rows($mysql_con) > 0)
{
$miss = $miss."<LI>Benutzername vorhanden";
echo'<div align="center"><font color="#FF0000" size="2" face="Arial, Helvetica, sans-serif">Der angegeben Benutzername ist leider schon vorhanden</font></div>';
}
$user_result = mysql_query("SELECT * FROM $user_tabelle WHERE email = '$email'", $mysql_con);
if (mysql_affected_rows($mysql_con) > 0)
{
$miss = $miss."<LI>Email vorhanden";
echo'<div align="center"><font color="#FF0000" size="2" face="Arial, Helvetica, sans-serif">Die angegebene Email Adresse ist bereits schon vorhanden</font></div>';
}

$reg_date = date("U");
$reg_id = md5($username);
$password  = md5($password);
$query = "INSERT into $user_tabelle (username, password, email, realname, reg_date)
values ('$username', '$password', '$email', '$realname', '$reg_date')";

if (empty($miss)) {
if (mysql_db_query ($contenido_database, $query, $mysql_con)) {

//Email an User 
$subject = "Ihre Anmeldung bei $emailname";
$message ="
Hallo $username,

Um die Anmeldung bei $emailname abzuschliessen, musst du noch auf den untenstehenden Bestätigungslink klicken:
".$script_dir."/activate.php?code=".$reg_id."&name=".$username."

Viel Spass wünscht dein 
     
$emailname Team
	 
Bei Fragen, Anregungen oder Problemen steht wir Ihnen gerne unter: $mailadi";

$headers = "From: $emailname <$emailad>\r\n";

mail($email, $subject, $message, $headers);

print "Herzlichen Glückwunsch, $username<br><br>
<b>Ihre Anmeldung war erfolgreich.</b>
Prüfen Sie nun Ihren Emaileingang!<br>
<br>
<b> $email </b>
<br>
<br>
Öffnen Sie die Email und klicken auf den Bestätignungslink um Ihren Account zu aktivieren.<br><br>
Solltest Sie keine Emai erhalten haben, wende Sie sich bitte an einen <a href=\"mailto:$emailad\">Administrator</a>.<br>";

} else {
print ("Leider traten Probleme bei der Anmeldung auf. Bitte wenden sie sich an einen Admin");
} 
}
}
?>
6. Optional die Format CSS um folgenden Befehle erweitern:

Code: Alles auswählen

.layoutbox {
	border: 1px dashed #FF6600;
	font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 12px;
	color: #333333;
	background-color: #FFFFCC;
}
.input {
	border: 1px solid #FF6600;
}
Verbesserungsvorschläge sind Willkommen! :)
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

Ähm. Na, dann wollen wir mal:

- Bitte rücke Deinen Code ein - es ist sehr schwer, dem Code zu folgen, wenn man nicht weiss, in welchem if man ist...

- Du solltest die Contenido-DB-Funktionen nutzen (siehe andere Module), dann kannst Du Dir vieles aus der config.php und auch die Arbeit mit mysql_db_query usw. ersparen.

- Du solltest alles, was in einem SQL-Statement landen kann, überprüfen. Etwas wie "SELECT * FROM irgendwo WHERE username = '$variable'" öffnet jedem Hacker Tür und Tor zu Deiner Datenbank. Bevor $variable im SQL-Statement verwendet wird, solltest Du ', " und -- entfernen. Ein urlencode leistet hier gute Dienste (wieder zurück: urldecode; ' wird zu \' - wenn man es also braucht, muss das wieder rückersetzen).

- Du bindest 2 mal die config.php ein - so vergesslich ist PHP nun doch nicht :wink:

- Den Namen der Tabelle solltest Du aus den Contenido-Variablen auslesen ($cfg["tab"]["phplib_auth_user_md5"]) - dann wird auch gleich der Prefix berücksichtigt.

In V4.6 wird übrigens etwas ähnliches über die Newsletter-Anmeldung realisiert (um jetzt unauffällig Werbung zu machen :wink: ).

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
m2Designer
Beiträge: 41
Registriert: Mo 23. Aug 2004, 09:47
Kontaktdaten:

Beitrag von m2Designer »

Hallo Herr B,

ich werde die angesprochenen Änderungen sobald wie möglich im Original Thread ändern. Wenn ich fragen hab werd ich diese hier posten.

Vielen Dank schonmal für die Anregungen und Hinweise. :D

PS. Hab heute nen Artikel in der Internet Intern über Communido gelesen :o
kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer »

ein kleiner nachtrag: nicht urlencode verwenden, sondern die wesentlich bessere funktion mysql_real_escape_string() ;-)

gruss,
andreas

ps: @herrB: macht das modul nicht genau das, was das newslettermodul auch schon macht?
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

ps: @herrB: macht das modul nicht genau das, was das newslettermodul auch schon macht?
Für V4.6: ja (mit dem Unterschied, dass ich via Newsletter-Anmeldung arbeite, diese Lösung geht direkt auf den Account). Sie ist auch nicht für V4.6 geeignet, da dort eine Trennung zwischen Backend- und Frontend-Accounts durchgeführt wurde.

Für V4.4.x gibt es keine Entsprechung.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
Gesperrt