Video Tutorial - PHP Registrierung | Loginsystem

Hi,

wie kann ich abfragen, ob eine Registrierung erfolgreich war und ohne Umwege auf eine neue Seite leiten?
Also wie folgt: Button gedrückt, richtige Werte in die DB geschrieben, SessionStart und weiter (quasi wie eingeloggt durch Registrierung).
Das würde dieses Skript hier zu genau dem erweitern was ich mir vorstelle. Ohnehin haben mir allein die Erklärungen in den Videos schon einiges gelernt :)

Zusätzlich wird bei mir fast immer die Fehlermeldung $lang_register_errorStmt angezeigt... zB hier:

Bild: http://www.abload.de/img/unbenanntq4ym6.png

Habe $salt und den Inhalt der $errors in eine Lang-Datei und die config.php ausgelagert.
Es werden sonst keine Fehlermeldungen angegeben. Ich mein da stimmt doch irgendwas noch nicht.

PHP:
<?php
if(!isset($_POST['submit'])) return;
if(!isset($_POST['username']) || !isset($_POST['email']) || !isset($_POST['password']) ||
	empty($_POST['username']) || empty($_POST['email']) || empty($_POST['password'])) {
    $error = $lang_register_errorForm;
    return;
}
var_dump($_POST['username']);
if(strlen($_POST['username']) > $lang_game_usernameMaxLenght ) {
    $error = $lang_register_errorUsername;
    return;
}

$_POST['username'] = trim($_POST['username']);

var_dump($_POST['email']);
if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
    $error = $lang_register_errorEmail;
    return;
}
var_dump($_POST['password']);
$_POST['password'] = hash('sha256', $_POST['password'][0].$salt);

$user_ip = ip2long($_SERVER['REMOTE_ADDR']);

$sql = 'INSERT INTO users
        (username, email, password, IP, registerDate)
        VALUES
        (?, ?, ?, ?, NOW())';

$stmt = $db->prepare($sql);
$stmt->bind_param('sssi', $_POST['username'], $_POST['email'], $_POST['password'], $user_ip);

if(!$stmt->execute()) {
    if(strpos($db->error, 'Duplicate') !== false) {
        $error = $lang_register_errorDuplicate;
    }
    $error = $lang_register_errorStmt;
    return;
}
$stmt->close();

$success = $lang_register_success;
?>
 
Zuletzt bearbeitet:
Hi :) Da ich selber neu auf dem Gebiet bin habe ich mal eine Frage. Du sagst ja das <action = ""> sein soll. Kann man wenn man eine dynamische Navigation hat welche mit index.php?site=xyz arbeitet auch einfach "action='index.php?site=login'" schreiben? Oder ist dies auch wieder eine Sicherheitslücke?
 
Servus ;)

Habe das Tutorial befoplgt und muss sagen "TOP"! Jedoch habe ich ein Problem...

1. Ich bekomme KEINE Fehlermeldungen oder Co. ausgespuckt und bekomme auch nichts in die DB geschrieben...

Ich habe das Script mal drastisch gekürzt und hatte letztendlich die Funktion vom salt noch ausdeklariert und dann funktionierte es...

hier mal der Code


PHP:
<?php

require "../Configurations/_sqlconnect.php";
require "../Languages/_deDE.php";

$db = new mysqli ($dblocalhost, $dbusername, $dbuserpass, $dbname);


if (isset ($_POST['submit']))
{

// Eingaben Überprüfen

if (!isset ($_POST['username']) || !isset($_POST['password']) || !isset ($_POST['email']) || 
	empty($_Post['username']) || empty($_Post['pass']) || empty($_POST['email']))
	{	
		$error_msg = "Das Formular wurde nicht korrekt ausgefüllt!";	
		return;
	}
	
// Passwörter Überprüfen

if($_POST['password'][0] !== $_Post['password'][1])

	{
		$error_msg = "Die Passwörter Stimmen nicht überein";	
		return;
	}
	
	else {


// Alles Korrekt? Dann geht es hier weiter!
	
  require_once('../Libs/recaptchalib.php');
  $privatekey = "xxxxxxxxxxxxxxxxxxxxxxxx";
  $resp = recaptcha_check_answer ($privatekey,
                                $_SERVER["REMOTE_ADDR"],
                                $_POST["recaptcha_challenge_field"],
                                $_POST["recaptcha_response_field"]);

  if (!$resp->is_valid) {
    // What happens when the CAPTCHA was entered incorrectly
    die ("Der eingegebene Sicherheitscode von reCAPTCHA war falsch! <br>Bitte versuche es erneut." .
         "(reCAPTCHA said: " . $resp->error . ")");
  } else {
	  
// reCAPTCHA Korrekt? Dann geht es hier weiter!
				
				
				// Salted Hash Generieren
				$salt = "sdflksdrh23hr23-7ztd,012345678973245z.erHEFKJWQERhuiHUIE§hr43627ZXYyXzx24JUHGIubhfew876sdjkgdhfb34534desrt";
				
				// Passwort Hashen mit "SHA512" und dem "Salt"
				$_Post['password'] = hash('sha512', $_POST['password'][1].$salt);
				
				
				// Länge des Benutzernamens Prüfen
			    if(strlen($_POST['username']) > 20 ) {
				
				$error_msg = "Der Benutzername ist zu lang!";
									
				}
				
				
				// Benutzername auf "White-Space" Prüfen und Ändern
				$_POST['username'] = trim ($_POST['username']);
				
				
				// Email Adresse Prüfen
				if(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)); {
				
				$error_msg = "Die E-Mail Adresse ist ungültig";
				return;	
					
				}
				
				
				// IP - Adresse Speichern
				$userip = ip2long($_SERVER['REMOTE_ADDR']); 
				
				
				
				// Daten SICHER in der SQL eingeben
				$sql = 'INSERT INTO _User (User_ID, User_Name, User_Pass, User_IP, User_Mail, User_Regdate)
						VALUES (?, ?, ?, ?, NOW())';
						
				$stmt = $database->prepare($sql);
				$stmt->bind_param('sssi', $_POST['username'], $_POST['password'], $_POST['email'], $userip);
				
				// Ausführung des Statements (SQL Anweisung)
				if(!$stmt -> execute()){
					
					// Auf Doppelten Usernamen oder Email Prüfen
					if(strpos($db->error, 'Duplicate') !== false) {
					
						$error_msg = "Der Benutzer oder doe Email sind bereits vorhanden!";
						
					}
					
					else {
						
								$error_msg = "Es ist ein Fehler aufgetreten!";
						
							}				
					
				return;
					
				}
	  			
				// Statement Beenden
				$stmt->close(); 
				
				// Erfolgsnachricht & Hinweis zur Sicherheit (HTMLSPECIALCHARS Verhindert Script Ausführungen)		
				$success_msg = "Das Benutzerkonto ".htmlspecialchars($_POST['username'])." wurde erfolgreich registriert.";
	}
		}
			}
			
// Ende des PHP Scripts!


?>

 <script type="text/javascript">
 var RecaptchaOptions = {
    theme : 'clean'
 };
 </script>
 
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Unbenanntes Dokument</title>
</head>
<body>
<table width="1000">
<form action="" method="post">

<?php echo "$userreg_username"; ?><br />
<input type="text" name="username" maxlength="20" size="40" value="<?php echo (isset($_POST['username'])) ? htmlspecialchars ($_POST['username']) : '' ?>" /><br /><br />

<?php echo "$userreg_password"; ?><br />
<input type="password" name="password[]" maxlength="40" size="40" /><br /><br />

<?php echo "$userreg_password_confirm"; ?><br />
<input type="password" name="password[]" maxlength="40" size="40" /><br /><br />

<?php echo "$userreg_email"; ?><br />
<input type="text" name="email" maxlength="40" size="40" value="<?php echo (isset($_POST['email'])) ? htmlspecialchars ($_POST['email']) : '' ?>" /><br /><br />

<?php
          require_once('../Libs/recaptchalib.php');
          $publickey = "xxxxxxxxxxxxxx"; // you got this from the signup page
          echo recaptcha_get_html($publickey);
        ?>
<input name="submit" type="submit" id="submit" value="<?php echo "$userreg_submit"; ?>" />

<br /><br /><br />


<!-- Ausgabe der Fehlermeldung -->
<?php if(isset($error_msg) && !empty($error_msg)): ?>
<?php echo "$error_msg"; ?>
<?php endif; ?>

<!-- Ausgabe der Erfolgsmeldung -->
<?php if(isset($success_msg) && !empty($success_msg)): ?>
<?php echo "$success_msg"; ?>
<?php endif; ?>

</form>
</table>
</body>
</html>


Und so ist meine DB aufgebaut

sql.png
 
Zuletzt bearbeitet:
Naja, der Klassiker halt – schreib folgendes über dein Skript:
PHP:
error_reporting(E_ALL);
ini_set('display_errors', true);
 
Hab
PHP:
error_reporting(E_ALL);
ini_set('display_errors', true);
nun direkt unter das "<?php" geschrieben aber auch hier tut sich nichts
 
Zurück