2017-05-09 3 views
0

Dies ist meine Anmeldeform.Echo Erfolg oder Fehlschlag auf derselben Seite

<div class="tab-content"> 
    <div id="signup"> 
     <h1>Sign Up for Free</h1> 

    <form action="register.php" method="POST"> 

    <div class="top-row"> 
    <div class="field-wrap"> 
     <label> 
     Username<span class="req">*</span> 
     </label> 
     <input name="username" type="text" required autocomplete="off" /> 
    </div> 

    <div class="field-wrap"> 
     <label> 
     E-mail<span class="req">*</span> 
     </label> 
     <input name="email" type="text"required autocomplete="off"/> 
    </div> 
    </div> 

    <div class="field-wrap"> 
    <label> 
     Password<span class="req">*</span> 
    </label> 
    <input name="password" type="password"required autocomplete="off"/> 
    </div> 

    <div class="field-wrap"> 
    <label> 
     Repeat password<span class="req">*</span> 
    </label> 
    <input name="rpassword" type="password"required autocomplete="off"/> 
    </div> 
    <button type="submit" class="button button-block"/>Get Started</button> 
    </form> 

</div> 

<div id="login"> 
    <h1>Welcome Back!</h1> 

    <form action="login.php" method="post"> 

    <div class="field-wrap"> 
    <label> 
     Username<span class="req">*</span> 
    </label> 
    <input name="username" type="text"required autocomplete="off"/> 
    </div> 

    <div class="field-wrap"> 
    <label> 
     Password<span class="req">*</span> 
    </label> 
    <input name="password" type="password"required autocomplete="off"/> 
    </div> 

    <p class="forgot"><a href="forgot.php">Forgot Password?</a></p> 

    <button class="button button-block"/>Log In</button> 

    </form> 

</div> 

Dann wird das register.php

<?php 
session_start(); 


$host= 'localhost'; 
$user='root'; 
$pass=''; 
$db='gameforum'; 


$conn=mysqli_connect($host, $user, $pass, $db); 
    if ($conn->connect_error) { 
     die("Connection failed: " . $conn->connect_error); 
} 

    $username = $_POST['username']; 
    $password = $_POST['password']; 
    $rpassword = $_POST['rpassword']; 
    $email = $_POST['email']; 

if ($password!==$rpassword) { 
    echo "Passwords did not match, please try again!" 
    $conn->close(); 
} 
else { 

$sql = "INSERT INTO users (username, password, Repeat_Password, email) 
VALUES ('$username', '$password', '$rpassword', '$email')"; 

    if ($conn->query($sql) === TRUE) { 
     $redirectUrl = 'index.php'; 

    echo '<script type="application/javascript">alert("Thank you for your registration! You may now log in with your account!"); window.location.href = "'.$redirectUrl.'";</script>'; 
}else{ 
    echo "Username or Email already exists!". mysql_error(); 
    } 

$conn->close(); 
} 


?> 

Das Problem ist, dass, wenn die Passwörter nicht übereinstimmen, dann der Benutzer auf eine leere Seite kommt, wo es das sagt. Ich möchte, dass die Fehlermeldung auf der gleichen Seite angezeigt wird, mit der ich mich angemeldet habe. Ich weiß nicht, wie das geht, irgendwelche Ideen?

+0

** Nie ** speichern Klartext Passwörter. Sie sollten ['password_hash()'] (http://us3.php.net/manual/en/function.password-hash.php) und ['password_verify()'] (http: //us3.php) verwenden. net/manual/de/function.password-verify.php) statt. Wenn Sie eine Version von PHP vor Version 5.5 verwenden, verwenden Sie ** nicht ** MD5 oder SHA1, um Passwörter zu hashen. Stattdessen können Sie [dieses Kompatibilitätspaket] (https://github.com/ircmaxell/password_compat) verwenden. –

+0

Ihr Code ist anfällig für [** SQL injection **] (https://en.wikipedia.org/wiki/SQL_injection) Angriffe. Sie sollten [** mysqli **] (https://secure.php.net/manual/en/mysqli.prepare.php) oder [** PDO **] (https://secure.php.net/) verwenden. manual/de/pdo.prepared-statements.php) vorbereitete Anweisungen mit gebundenen Parametern wie in [** dieser Beitrag **] beschrieben (https://stackoverflow.com/questions/60174/how-cani-i-prevent-sql -injektion-in-php). –

+0

Sie können den Benutzer entweder zurück zur Seite umleiten, die Fehlermeldung in einer Sitzung speichern und sie dann ausgeben, wenn sie existiert. Oder laden Sie das HTML-Formular, wenn der Fehler auftritt, und fügen Sie ihm eine neue Fehlermeldung in Form einer Variablen hinzu. – Oliwol

Antwort

0

Es gibt zwei Möglichkeiten, dies zu tun. Eine ist die Verwendung von Sitzungen, die andere ist die Umleitung des Benutzers zurück zur Anmeldeseite mit etwas wie signin.php? Err = invalid_pass

von Ihnen tun es mit einer Sitzung, Sie werden diesen Code oben auf Ihrer Anmeldung benötigen Seite. Es wird eine Fehlermeldung ausgegeben, wenn Sie in Ihrer Anmeldeseite eine Fehlermeldung setzen.

<?php 
session_start(); 
if(isset($_SESSION['err'])) 
{ 
echo $_SESSION['err']; 
unset($_SESSION['err']; 
} 

alternativ können Sie diesen Code auf der Anmelde-Seite hinzufügen:

<?php 
if(isset($_REQUEST['err'])) 
echo $_REQUEST['err']; 

Sie auch Ihre echo "Passwords did not match, please try again!"

mit diesem ersetzen müssen, wenn Sie Sitzungen tun:

$_SESSION['err']="Passwords did not match, please try again!"; 
header("Location: signin.php"); 

und dies, wenn Sie die andere Methode verwenden.

header("Location: signin.php?err=You_Goofed"); 
+0

Das hat funktioniert, danke! –

+0

Wissen Sie, wie die Fehlermeldung nach etwa 10 Sekunden verschwindet? –

+0

wickeln Sie Ihre Nachricht in ein div ein und fügen Sie diesen JavaScript-Code hinzu. Es erfordert JQuery. Aber es ist wahrscheinlich der einfachste Weg. http://stackoverflow.com/questions/820951/hide-div-after-a-few-seconds – Dimi

0

Sie müssen Ajax auf Ihrer HTML-Seite verwenden. Wenn der Benutzer auf die Formularschaltfläche klickt, anstatt das Formular an den Server zu senden, verwenden Sie ajax, um die Daten an den Server zu senden. Übergeben Sie dann die Daten vom Server an den Client.

Beispiel:

$('#submit-btn').click(function(e){ 
    $.ajax({ 
    type:'POST', 
    url:'register.php', 
    data:{ 
     user:username, 
     pw:password 
    } 
    }.done(function(data){ 
     if(data === false){ 
     alert("passwords don't match!"); 
     } 
    }); 
}); 

In Ihrer PHP-Seite finden Sie die Passwörter validieren. Wenn sie nicht übereinstimmen, echo false.

Verwandte Themen