• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Datenbank: User Registrierung

Krobbus

Mitglied
Hallo, ich habe mir folgenden Code geschrieben, damit sich User registrieren können. Das Ganze ist noch sehr simpel, und ich würde es gerne noch ausbauen. Folgendes würde ich gerne integrieren:
1.) Ich würde gerne per php überprüfen, ob in die einzelnen Felder nicht zuviel reingeschrieben wurde, sprich eine Zeichenbegrenzung. Das kann ich vorerst natürlich auch mit maxlength machen, aber ich habe gehört dass es sicherer ist es mit php zu überprüfen.
2.) Eine Email-Bestätigung, die direkt nach der Registrierung abgeschickt wird, wo man auf einen Aktivierungslink klicken muss um den Account entgültig freizuschalten.
3.) Wie sieht der Code aus, wenn ich ein zweites Passwordeingabefeld mache, und dann abfragen will ob in beiden Fällen das gleiche eingegeben wurde?

Wäre super wenn ihr mir sagen könnt wie sowas aussehen kann bzw. mir sagt wo ich Codebeispiele mit Erklärungen finde

Code:
<html>
<head>



<?php


if (isset($_POST["gesendet"]))
{
mysql_connect("XXX","YYY","ZZZ");
mysql_select_db("YYY");

$sqlab = "insert nutzerdaten (benutzername, vorname, nachname, email) values ('" . $_POST["bn"] . "', '" . $_POST["vn"] . "', '" . 

$_POST["nn"] . "', '" . $_POST["email"] . "')";
mysql_query($sqlab);

$num = mysql_affected_rows();
if ($num>0)
{
echo "Registrierung erfolgreich";
}
else
{
echo "Fehler";
}
}
?>

</head>
<body>

<form name="form" action ="register.php" method="post">
<p><input name="bn" />Benutzername</p>
<p><input name="vn" />Vorname
<p><input name="nn" />Nachname</p>
<p><input name="email" />Email</p>
<p><input type="submit" name="gesendet" />
</form>



</body>
</html>
 
Zu 1:
Das kannst du mit dieser Funktion:
PHP: strlen - Manual
Beispiel:
PHP:
<?php

if(strlen($_POST['eingabefeld']) <= 20){
    // soll passieren, wenn Eingabe kleiner gleich 20 Zeichen ist
}

?>

Zu 2:
Für das versenden der Email kannst du
PHP: mail - Manual
nutzen (es besteht jedoch die Gefahr, dass die Email beim Empfänger im Spam-Ordner landet).
Zudem musst du in der Nachricht einen Link beilegen, in dessen URL Daten mitgegeben wurden.
Beispiel:
http://deinedomain.tld/datei.php?name=23nrf4389nf
Den Wert für Name kannst du durch eine Funktion zufällig und automatisch generieren lassen.
Beispiel:
PHP : Random string with numbers and letters

Zu 3.
Indem du über eine IF-Bedingung beide Variablen/Eingaben mit dem ==-Operater vergleichst.
Beispiel:
PHP:
<?php

if($_POST['passworteingabe1'] == $_POST['passworteingabe2']){
    // soll passieren, wenn Passwörter identisch sind
}else{
    // soll passieren, wenn Passwörter ungleich sind
}

?>


P.S. Dein Code ist sehr stark anfällig für SQL-Injections, das heisst, dass ein Hacker durch bestimmte Eingaben evtl. Daten aus der Datenbank auslesen könnte, welche ihn 'nichts angehen'.
Du solltest alle Eingaben mindestens mit der Funktion PHP: mysql_real_escape_string - Manual maskieren.

Gruß
 
Danke!
Ich bekomme immer die Fehlermeldung 'Parse error: syntax error, unexpected T_LOGICAL_AND in /www/htdocs/w00cae6b/register.php on line 9' bei folgendem Code:
if (isset($_POST["gesendet"])) and (strlen($_POST['benutzername']) >= 1)

Woran liegt das?
 
Du hast die Klammern falsch gesetzt, so ist es richtig:
PHP:
if(isset($_POST["gesendet"]) and (strlen($_POST['benutzername']) >= 1)){
    //...
}
 
Vielen Dank!
Eine Frage noch: Ich experimentiere gerade mit folgendem Code herum, der eigentlich bezwecken soll, dass bei einer Falschangabe die Felder bereits ausgefüllt sind, so dass man nicht alle Felder neu ausfüllen muss.
<p><input name="bn" value="<?php ($_POST['bn']) ?>"/>Benutzername</p>
Irgendwie klappt das nicht, weiß einer warum?
 
Versuche es mal so:
PHP:
<p><label><input name="bn" value="<?php echo $_POST['bn']; ?>"/>Benutzername</label></p>
Das label-Tag habe ich zusätzlich eingebaut, da es zum Auszeichnen von Textfeldern genutzt wird.
 
Würde eher noch eine Maskierung einfügen, sonst gibt es Probleme.

Code:
<input name="bn" value="<?php echo htmlspecialchars($_POST['bn']); ?>"/>
 
Ja das klappt, danke!

Warum wird eigentlich der Rahmen nicht angezeigt? Ich vermute mal, dass es nicht klappt weil die Sachen die mit php dargestellt werden nicht als normaler Text gelten der innerhalb des <p> steht oder?

PHP:
echo "<p style=/'border-width:3px; border-color:#0000FF; padding:10px;/'>";
if (isset($_POST["gesendet"]) and (strlen($_POST['bn']) == 0)) {echo "Bitte geben Sie einen Benutzernamen ein.<br />";}
if (isset($_POST["gesendet"]) and (strlen($_POST['bn']) > 20)) {echo "Der Benutzername darf nicht länger als 20 Zeichen sein.<br />";}
if (isset($_POST["gesendet"]) and (strlen($_POST['vn']) > 20)) {echo "Der Vorname darf nicht länger als 20 Zeichen sein, kürzen Sie ihn gegebenfalls etwas.<br />";}
if (isset($_POST["gesendet"]) and (strlen($_POST['nn']) > 20)) {echo "Der Nachname darf nicht länger als 20 Zeichen sein, kürzen Sie ihn gegebenfalls etwas.<br />";}
if (isset($_POST["gesendet"]) and (strlen($_POST['email']) == 0)) {echo "Bitte geben Sie ihre Email Adresse ein.<br />";}
if (isset($_POST["gesendet"]) and (strlen($_POST['email']) > 30)) {echo "Die Email Adresse ist zu lang, sie darf höchstens 30 Zeichen lang sein.<br />";}
echo "</p />";
 
PHP und HTML sind getrennte Sachen. Das eine hat mit dem anderen nichts zu tun.

Allerdings kann ein in PHP falsch geschriebener HTML-Code auch die Darstellung der Webseite beeinflussen. In deinem Fall hast Du das beendende </p> falsch geschrieben, nämlich:

Code:
</p[COLOR="DarkRed"] /[/COLOR]>
 
Ok das hatte ich befürchtet. Wie kann ich es trotzdem machen, dass die Fehlermeldungen mit einem farblichen Rahmen umgeben werden?

und noch eine frage, kann es sein dass strlen nicht mit passwortfeldern funktioniert? Die Abfrage (strlen($_POST['pw']) >= 6) and (strlen($_POST['pw']) <= 30) funktioniert nämlich nicht, auch wenn das pw 7 zeichen lang ist.
 
Nochmal:
Du brauchst validen HTML-Code wenn Du eine Fehldarstellung beurteilt haben willst. Der von dir gezeigte Code ist nicht valide.

Und:
PHP und HTML sind 2 paar Schuhe. strlen ist eine PHP-Funktion und die interessiert es nicht wo sie im HTML-Code drinne steht.

Und:
Um dein Problem beurteilen zu können braucht man ggfs. den gesamten Quellcode von Dir und nicht nur Schnippsel.
 
Zurück
Oben