Registriung / Skript

lissylucky

Mitglied
Hallo,

bei mir klappt iwie das Skript nicht.
http://www.php-einfach.de/tuts_mysql_login.php

Kann mir jemand sagen, was ich falsch mache****?

Code:
$verbindung = mysql_connect("mysql.lima-city.de", "*********" , "*********")
or die("Verbindung zur Datenbank konnte nicht hergestellt werden");

mysql_select_db("db_180227_1") or die ("Datenbank konnte nicht ausgewählt werden");

$email = $_POST["email"];
$passwort = $_POST["passwort"];

if($email == "" OR $passwort == "")
    {
    echo "Eingabefehler. Bitte alle Felder korekt ausfüllen. <a href=\"eintragen.html\">Zurück</a>";
    exit;
    }
$passwort = md5($passwort);

$result = mysql_query("SELECT id FROM login WHERE email LIKE '$email'");
$menge = mysql_num_rows($result);

if($menge == 0)
    {
    $eintrag = "INSERT INTO login (email, passwort) VALUES ('$email', '$passwort')";
    $eintragen = mysql_query($eintrag);

    if($eintragen == true)
        {
        echo "Benutzername <b>$email</b> wurde erstellt. <a href=\"login.html\">Login</a>";
        }
    else
        {
        echo "Fehler beim Speichern. Bitte erneut versuchen. <a href=\"eintragen.html\">Zurück</a>";
        }


    }

else
    {
    echo "Benutzername schon vorhanden. <a href=\"eintragen.html\">Zurück</a>";
    }
?>
 
Hi lissylucky,

was genau funktioniert denn daran nicht?
Fehler beim Verbinden mit der Datenbank?
Wird iwas nicht in der Datenbank abgespeichert oder falsch?

Müsstest etwas genauer werden, damit man dir helfen kann^^

LG Zneaf
 
Oh das habe ich in der Hektik total vergessen :(

Es wird der Fehler angezeigt: Fehler beim Speichern. Bitte erneut versuchen

Eben diese Fehlermeldung aus dem Skript.


Grüßle
 
Code:
<div id="top"></div><div id="middle">		
				<div class="section">
					<form action="eintragen.php" method="post">
					<span>E-Mail:</span> 
					<input type="text" name="email">
				</div>
				<div class="section2"></div>
				<div class="section">			
					<span>Passwort:</span> 
					<input type="password" name="passwort"><br />
				</div> 
				<div class="section2"></div>
			</div><div id="botom"></div> 
		
 
		   	<div class="text" style="float: right;"> 
			<input type="submit" value="Login" class="submit" /> 
			</form>
		</div>

Teil des html Regstrierungsseite
 
mysql_query gibt nie true zurück. Sondern ev. false oder ansonsten eine Ressource.
mit mysql_affected_rows() kannst du prüfen ob es funktioniert hat oder nicht

PHP:
    $eintragen = mysql_query($eintrag);
 
    if(mysql_affected_rows($eintragen) == 1){
        //TODO: Code für erfolgreichen Insert
    }
 
Hey lissylucky,

was mir auffällt ist, dass du einfach mit php code anfängst, ohne einen <?php zu verwenden.
Der muss vor jeden php Code zur eröffnung.

Auserdem ist nirgends definiert, wann er deine php befehle durchführen soll.
das machst du am besten mit:
PHP:
if ( array_key_exists('submit', $_POST) ){}else{}

Desweiteren fällt mir auf, dass du die ganzen Daten einfach einträgst, ohne eventuelle leerzeichen, slaches und ähnliches zu entfernen.
Ich empfinde das als wichtig. Hier der Code:
PHP:
$passwort = trim(strip_tags(stripslashes($_POST['passwort'])));
Das würde ich aber nicht bei der email adresse machen.

Ich glaube auch einen Fehler beim Eintragen der Daten in die Datenbank gefunden zu haben:
ich mache das bei meinem script so:
PHP:
'". mysql_escape_string($email) ."',
'". mysql_escape_string($passwort) ."'

ich würde dir übrigens auch dazu raten, die eingabemaske und die Verarbeitung der Daten in eine einzige Datei zu packen.

Auserdem würde ich die Daten zur Verbindung mit der Datenbank auslagern in eine Datei wie z.b. config.php oderso...ist etwas sicherer^^

Ich hab das hier einfach mal mit deinem Script gemacht:

PHP:
<?php
// Sobald man auf Abschicken klickt,
// wird eine Verbindung zur Datenbank hergestellt.
// Gibt es dabei Probleme, so wird eine Fehlermeldung ausgegeben. 
if ( array_key_exists('submit', $_POST) ) {

	// Hier musst du die Daten eintragen bzw.
	// Due kannst diese auch aus Sicherheitsgründen in eine
	// andere Datei auslagern. Z.B. "config.php"
	// Wenn du das machst, kannst du diese hier ganz einfach aufrufen lassen.
	// Verwende hierzu den Befehl:
	// require_once ('config.php');
	// Dann kannst du die beiden Codes wegen der Verbindung zur Datenbank
	// Hier weglassen und musst diese nur mit dem oben genannten Befehl einbinden.
	$verbindung = mysql_connect("mysql.lima-city.de", "*********" , "*********")
	or die("Verbindung zur Datenbank konnte nicht hergestellt werden");
 
	mysql_select_db("db_180227_1") or die ("Datenbank konnte nicht ausgewählt werden");

	// 1. Leerzeichen werden vom Anfang und Ende der eingegebenen Daten entfernt
	// 2. Eventuelle Tags und Slasheswerden aus den eingegebenen Daten entfernt
	$email = $_POST["email"];
	$passwort = trim(strip_tags(stripslashes($_POST['passwort'])));	
	
	// Wenn die Email - Adresse oder das Passwort nicht ausgefüllt worden sind,
	// wird eine Fehlermeldung ausgegeben
	if($email == "" OR $passwort == ""){
		echo "Eingabefehler. Bitte alle Felder korekt ausfüllen. <a href=\"eintragen.php\">Zurück</a>";
		exit;
    }

	// Hier wird überprüft, ob die eingegebene
	// E-Mail-Adresse bereits vorhanden ist
	$result = mysql_query("SELECT
							   id
						   FROM
							   login
						   WHERE
						       email = '" . trim($_POST['email']) . "'";

	// Hier wird das Ergebnis der Überprüfung
	// abgespeichert.
	$menge = mysql_num_rows($result);
 
	// Wurde keine E-Mail-Adresse gefunden,
	// die der angegebenen gleicht, so wird
	// Der Benutzer angelegt.
	if($menge == 0)
		{
		$eintrag = "INSERT INTO login
			(
				email,
				passwort
			)VALUES (
				'". mysql_escape_string($email) ."',
				MD5('".$password."'),";

    $eintragen = mysql_query($eintrag);

	// Wenn ein Benutzer angelegt wurde,
	// wird ihm eine erfolgsmitteilung angezeigt.
	// Ist die angegebene E-Mail-Adresse bereits vorhanden,
	// wird ihm eine misserfolgsmeldung
	// angezeigt und ein Link zurück zum Formular
	// erscheint.
    if($eintragen == true)
        {
        echo "Benutzername <b>$email</b> wurde erstellt. <a href=\"login.html\">Login</a>";
        }
    else
        {
        echo "Fehler beim Speichern. Bitte erneut versuchen. <a href=\"eintragen.php\">Zurück</a>";
        }
 
	// Wurde kein Benutzer angelegt, wird ihm
	// eine misserfolgsmeldung und ein Link zurück
	// zum Formular erscheint.
    }else{
		echo "Benutzername schon vorhanden. <a href=\"eintragen.php\">Zurück</a>";
	}
}
// Ein Else-Zweig wird hier nicht benötigt.
?>
<form action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
Dein Username:<br>
<input type="text" size="24" maxlength="50"
name="username"><br><br>

Dein Passwort:<br>
<input type="password" size="24" maxlength="50"
name="passwort"><br>

Passwort wiederholen:<br>
<input type="password" size="24" maxlength="50"
name="passwort2"><br>

<input type="submit" value="Abschicken">
</form>

Desweiteren rate ich dir dazu, alles aus zu kommentieren
(wie ich es im Script gemacht habe)
Dadurch kannst du immer nachvollziehen, was an welcher Stelle geschieht.
Das ist sehr nützlich, wenn dein Code wächst undso^^

LG Zneaf
 
Sorry Zneaf. Aber ich muss dir in einigen Dingen klar weidersprechen.

was mir auffällt ist, dass du einfach mit php code anfängst, ohne einen <?php zu verwenden.
Der muss vor jeden php Code zur eröffnung.
Ich geh davon aus, dass das da oben nur ein Ausschnitt ist. Gott behüte uns davor, dass immer die ganzen Scripte gepostet werden.

Desweiteren fällt mir auf, dass du die ganzen Daten einfach einträgst, ohne eventuelle leerzeichen, slaches und ähnliches zu entfernen.
Ich empfinde das als wichtig. Hier der Code:
PHP:
$passwort = trim(strip_tags(stripslashes($_POST['passwort'])));
Das würde ich aber nicht bei der email adresse machen.
Und auch nicht beim Passwort. Ansonsten speicherst du ein anderes Passwrt als der User eingegeben hat. Dann wird er sich nie einloggen können

Ich glaube auch einen Fehler beim Eintragen der Daten in die Datenbank gefunden zu haben:
ich mache das bei meinem script so:
PHP:
'". mysql_escape_string($email) ."',
'". mysql_escape_string($passwort) ."'
mysql_escape_string() ist sicher empfehlenswert, aber hier tritt nur ein Fehler auf, wenn ganz spezielle Zeichen im Passwoert drin sind. Ansonsten nützt mysql_escape_string() vor allem zur Sicherheit um SQL-Injections zu verhindern

ich würde dir übrigens auch dazu raten, die eingabemaske und die Verarbeitung der Daten in eine einzige Datei zu packen.
Un ich rate gerade das Gegenteil. Design und Programm zu trennen. Doch das sind Grundsatzdiskusionen und haben nix mit dem Fehler zu tun

In deinem Script hast du den Fehler von lissylucky 1zu 1 übernommen. Siehe mein Posting weiter oben.
 
Hey yaslaw ;)

hatte den Fehler nicht entfernt, weil ich ne halbe Stunde oderso an dem code geschrieben hab und daher deinen Post erst gelesen hatte, nachdem ich meinen post gemacht hatte :D

Das mit dem <?php kann gut sein^^
Wollte es bloß erwähnt haben :D

Und das mit dem Passwort stimmt....jetzt wo dus sagst ;D

Danke und viel Spaß mit dem Registration-Script :D

LG Zneaf
 
Zurück