Dann erstatte ich mal Bericht über meine Vortschritte:
Sicher fragt man sich jetzt was der freischaltcode oder $_POST['schluessel'] ist. Dies ist einfach nur ein Schlüssel, den man bei der Freischaltung benötigt. Die Freischaltcodes liegen bereits in der Datenbank unter den richtigen Namen der Benutzer, sprich dass sich nur Personen freischalten können, die die Datenbank kennt. Die Sicherheitsschlüssel sollen später an die jenigen Personen weitergegeben werden.
Zunächst die Funktion, die beim abschicken des Formulars ausgeführt wird:
<?php
function register() {
$errors = array();
// Kontrolle der Eingabe
if($_POST['wunschname'] == '') {
$errors[] = 'empty_name';
}
if($_POST['passwort1'] == '') {
$errors[] = 'empty_pw1';
}
if($_POST['passwort2'] == '') {
$errors[] = 'empty_pw2';
}
if($_POST['email1'] == '') {
$errors[] = 'empty_email1';
}
if($_POST['email2'] == '') {
$errors[] = 'empty_email2';
}
if($_POST['schluessel'] == '') {
$errors[] = 'empty_schluessel';
}
if ($_POST['passwort1'] != $_POST['passwort2']) {
$errors[] = 'pw_no_match';
}
if ($_POST['email1'] != $_POST['email2']) {
$errors[] = 'email_no_match';
}
if(count($errors) > 0) {
return $errors;
}
// Freischaltcodes auslesen
$sql = "SELECT
user_id,
user_name,
user_vorname,
user_freischaltcode
FROM
".MYSQL_PREFIX."users
WHERE
user_freischaltcode = '".$_POST['schluessel']."'
";
$result = mysql_query($sql) OR die(mysql_error());
while ($entry = mysql_fetch_assoc($result)) {
$key_exist = $entry['user_freischaltcode'];
}
// Prüfen, ob Freischaltcode richtig ist
if (!isset($key_exist)) {
$errors[] = 'wrong_key';
return $errors;
}
// bereits vergebene Benutzernamen auslesen
$sql = "SELECT
user_benutzername
FROM
".MYSQL_PREFIX."users
WHERE
user_benutzername = '".$_POST['wunschname']."'
";
$result = mysql_query($sql) OR die(mysql_error());
while ($entry = mysql_fetch_assoc($result)) {
$name_exist = $entry['user_benutzername'];
}
// Prüfen, ob Benutzername schon vorhanden
if (isset($name_exist)) {
$errors[] = 'username_exist';
return $errors;
}
// Wenn alles OK, dann REGISTRIEREN
$sql = "UPDATE
".MYSQL_PREFIX."users
SET
user_benutzername ='".htmlspecialchars($_POST['wunschname'])."',
user_passwort ='".htmlspecialchars(md5($_POST['passwort1']))."',
user_email ='".htmlspecialchars($_POST['email1'])."',
user_freigeschaltet ='1',
user_freischaltcode =''
WHERE
user_freischaltcode = '".$_POST['schluessel']."'
";
$result = mysql_query($sql) OR die(mysql_error());
$sql = "SELECT
user_id,
user_name,
user_vorname,
user_benutzername
FROM
".MYSQL_PREFIX."users
WHERE
user_benutzername = '".$_POST['wunschname']."'
";
$result = mysql_query($sql) OR die(mysql_error());
while ($user_infos = mysql_fetch_assoc($result)) {
$name = $user_infos['user_name'];
$vorname = $user_infos['user_vorname'];
$username = $user_infos['user_benutzername'];
}
$success = array(
'success' => '1',
'name' => $name,
'vorname' => $vorname,
'username' => $username);
return $success;
}
Die Fehler-Texte, die beim Formular ausgegeben werden sollen(Danke hierfür an suit):
~~~php
$error_messages = array(
'default' =>
array(
'empty_name' => 'Fill in your favor username',
'empty_pw1' => 'Fill in your favor Passwort',
'empty_pw2' => 'Confirm your Passwort',
'empty_email1' => 'Fill in your email-address',
'empty_email2' => 'Confirm your email-address',
'empty_schluessel' => 'Verification-Key is needed',
'pw_no_match' => 'Passwords do not match',
'email_no_match' => 'Email-Adress' do not match',
'wrong_key' => 'This is not a valid key',
'username_exist' => 'This username already exist'
),
'de' =>
array(
'empty_name' => 'Der Benutzername fehlt',
'empty_pw1' => 'Bitte gebe dein Passwort ein',
'empty_pw2' => 'Bitte bestätige dein Passwort',
'empty_email1' => 'Bitte gebe deine Emailadresse an',
'empty_email2' => 'Bitte bestätige deine Emailadresse',
'empty_schluessel' => 'Sicherheitsschlüssel fehlt',
'pw_no_match' => 'Die Passwörter stimmen nicht überein',
'email_no_match' => 'Diese Adressen stimmen nicht überein',
'wrong_key' => 'Dieser Schlüssel ist nicht gültig',
'username_exist' => 'Dieser Benutzername ist bereits vergeben'
)
);
?>
Hier ein Standard-Meldetext, der ausgegeben wird, wenn das Formular abgeschickt wird:
~~~php
<?php
if(isset($_POST['submit_register'])) {
$proof = register();
}
if(isset($_POST['submit_register']) AND !isset($proof['success'])){
echo 'Überprüfe deine Eingaben nochmal';
}
if(isset($_POST['submit_register']) AND isset($proof['success'])){
echo '<span style="color:#0F0">Der Account ';
echo $proof['username'];
echo ' wurde erfolgreich für ';
echo $proof['vorname'].' '.$proof['name'];
echo ' freigeschaltet. Viel Spaß.</span>';
}
?>
Hierdurch wird das Fenster, mit dem man sich freischaltet, bei Fehler-Eingabe wieder angezeigt:
<?php
echo '<div id="box-register" style="margin-top:40px;';
if (isset($_POST['submit_register']) AND $proof['success'] != 1) {
$get_post_back = 1;
echo 'display:block">';
} else {
echo 'display:none">';
}
?>
Und folglich das Formular (gekürzt), in dem die Daten eingetragen werden:
<form action="index.php" method="post">
<table border="0" style="width:800px;color:silver">
<tr>
<td>
Wunsch-Name:
</td>
<td>
[code lang=php]<?php
echo '<input name="wunschname" type="text" class="standard_form_text" size="20" ';
if(isset($get_post_back)) {
echo 'value="'.$_POST['wunschname'].'"';
}
echo ' />';
if(isset($_POST['submit_register']) AND in_array('empty_name',register())) {
echo '<span style="color:darkred">'.$error_messages['de']['empty_name'].'</span>';
} elseif (isset($_POST['submit_register']) AND in_array('username_exist',register())) {
echo '<span style="color:darkred">'.$error_messages['de']['username_exist'].'</span>';
}
?>
</td>
</tr>
<tr>
<td>
Passwort:
</td>
<td>
~~~php
<?php
echo '<input name="passwort1" type="password" class="standard_form_text" size="20" ';
if(isset($get_post_back)) {
echo 'value="'.$_POST['passwort1'].'"';
}
echo ' />';
if(isset($_POST['submit_register']) AND in_array('empty_pw1',register())) {
echo '<span style="color:darkred">'.$error_messages['de']['empty_pw1'].'</span>';
}
?>
</td>
</tr>
<!-- to be contiune... -->[/code]
Dieser Code ist noch ziemlich 'unschön' und auch noch nicht vollständig,doch zumindest funktionierts =)
Würde mich trotzdem für ein kleines Feedback freuen.
Danke