2016-12-22 6 views
1

Я пытаюсь получить мою регистрационную форму, работающую с базой данных php и mysql. В этот момент форма, кажется, ничего не делает. Когда я нажимаю кнопку «Отправить», он перезагружает страницу входа без формы входа.Система регистрации PHP PDO

Структура базы данных:

Database structure

код выглядит следующим образом:

<?php 
 

 
require_once 'header.php'; 
 
$current = 'login.php'; 
 
require_once 'navigatie.php'; 
 

 

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

 
    $username = $_POST["gebruiker"]; 
 
    $password = $_POST["psw"]; 
 

 
    try{ 
 
     $stmt = $db->prepare("SELECT * FROM gebruiker WHERE (naam = :gebruiker AND wachtwoord = :psw)"); 
 
      $stmt ->bindParam(":naam", $username); 
 
     $stmt ->bindParam(":psw", $password); 
 
     $stmt ->execute(); 
 
     $db = null; 
 
     $result=$stmt->fetch(); 
 
     if($stmt->rowCount() == 1) 
 
     { 
 
      //gebruiker bestaat 
 
      header("location: index.php"); 
 
      session_start(); 
 
     } 
 
     else{ 
 
      echo "gebruiker bestaat niet"; 
 
     } 
 

 
    } 
 
    catch (PDOException $e){ 
 
     $message = $e . "Failed"; 
 
    } 
 

 
} 
 
?> 
 

 
<main> 
 

 
    <div class="row"> 
 
    <form role="form" class="col s12" method="POST" action="login.php" > 
 
     <div class="row"> 
 
      <div class="container"> 
 

 
       <div class="input-field col s6"> 
 
        <i class="material-icons prefix">face</i> 
 
        <input name="gebruiker" id="icon_prefix" type="text" class="validate"> 
 
        <label for="icon_prefix">Naam</label> 
 
       </div> 
 

 

 
       <div class="input-field col s6"> 
 
        <i class="material-icons prefix">lock</i> 
 
        <input name="psw" id="icon_psw" type="password" class="validate"> 
 
        <label for="icon_psw">password</label> 
 
       </div> 
 

 
       <div class="col s12" > 
 
        <button id="submit" class="btn waves-effect waves-light" type="submit" name="login">Login 
 
         <i class="material-icons right">send</i> 
 
        </button> 
 

 
       </div> 
 
      </div> 
 
    </form> 
 
    </div>

+0

вместо '$ stmt -> bindParam (": naam ", $ username);' write '$ stmt -> bindParam (" : gebruiker ", $ username);' –

+1

Общее предупреждение о безопасности: каждый делает _never_ хранение паролей пользователей в базе данных. Никогда. То, что хранится, - это пароль _hash_. Затем, во время аутентификации, снова хешируется предоставленный пароль и _ сопоставляет два хэша_. Таким образом, вы не потеряете пароли пользователей, даже если одна из систем получает компрометацию. – arkascha

+0

На мгновение я подумал, что это парень из африкаанс из Кейптауна. –

ответ

0

Ну с помощью вас, ребята, и моего учителя я нашел soullotion. Я модифицировал базу данных, а код имеет некоторые дополнительные строки кода. Но я отправляю это, чтобы помочь другим студентам или кодовым машинам.

<?php 
 
session_start(); 
 
require_once 'header.php'; 
 
$current = 'login.php'; 
 
require_once 'navigatie.php'; 
 
$errMsg =""; 
 

 
if(isset($_POST['login'])){ 
 
    require_once "connectie.php"; 
 
    $username = $_POST["username"]; 
 
    $password = $_POST["password"]; 
 

 
    if($username == '') 
 
     $errMsg = "geen gebruiker gedefineerd"; 
 

 
    if($password == '') 
 
     $errMsg = "Geen wachtwoord"; 
 
    if ($errMsg == ''){ 
 

 
     $stmt = $db->prepare("SELECT id,username,password FROM gebruiker WHERE username =:username AND password =:password"); 
 
     $stmt ->bindParam(':username',$username); 
 
     $stmt ->bindParam(':password', $password); 
 
     $stmt->execute(); 
 
     $results = $stmt->fetch(); 
 
     if($stmt->rowCount() == 1){ 
 
      $_SESSION['username'] = $username; 
 
      echo "<script>window.location = 'index.php'</script>"; 
 
     }else{ 
 
      $errMsg = "Gebruiker en/of wachtwoord niet gevonden"; 
 
     } 
 
    } 
 
} 
 
?> 
 

 
<main> 
 
    <?php echo $errMsg;?> 
 
    <div class="row"> 
 

 
    <form role="form" class="col s12" method="POST" action="login.php" > 
 
     <div class="row"> 
 

 
      <div class="container"> 
 

 
       <div class="input-field col s6"> 
 
        <i class="material-icons prefix">face</i> 
 
        <input name="username" id="icon_prefix" type="text" class="validate"> 
 
        <label for="icon_prefix">Naam</label> 
 
       </div> 
 

 

 
       <div class="input-field col s6"> 
 
        <i class="material-icons prefix">lock</i> 
 
        <input name="password" id="icon_psw" type="password" class="validate"> 
 
        <label for="icon_psw">password</label> 
 
       </div> 
 

 
       <div class="col s12" > 
 
        <button id="submit" class="btn waves-effect waves-light" type="submit" name="login">Login 
 
         <i class="material-icons right">send</i> 
 
        </button> 
 

 
       </div> 
 
      </div> 
 
    </form> 
 
    </div> 
 

 

 

 

 
</main> 
 
<?php require_once 'footer.php'; ?>

Я изменил следующие таблицы в базе данных от Наама к имени пользователя и пароля от спам-роботов в. В этот ответ не входит отдельное connection.php, где определена переменная $ db

2

Там что-то worng это эти две строки ниже:

$stmt = $db->prepare("SELECT * FROM gebruiker WHERE (naam = :gebruiker AND wachtwoord = :psw)"); 
$stmt ->bindParam(":naam", $username); 

Вы пытаетесь связать параметр с именем :naam, но это слово, похоже, является столбцом в вашем SQL-заявлении.

После анализа вашего сценария и assumig gebruiker получает из запроса POST, эти линии должны быть:

$stmt = $db->prepare("SELECT * FROM gebruiker WHERE (naam = :gebruiker AND wachtwoord = :psw)"); 
$stmt ->bindParam(":gebruiker", $username); //<-- Look at Param name binded 
+0

Хорошо, если это правильно (поэтому, если вы вошли в систему), он должен начать сеанс и перенаправить на index.php, он не делает этого даже с теми изменениями, которые вы предложили. –

+0

Есть ли ошибки, которые вы получаете после этих изменений? Если да, разместите все ошибки, с которыми вы сталкиваетесь. – bcesars