2014-12-03 2 views
0

У меня проблема с моей проверкой и регистрацией пароля.Проверка формы и пароля в php

Проблема в том, что я создал валидацию, и она работает, а затем я создал раздел хэш-пароля и он тоже работает ... НО теперь проверка не работает.

Кажется, что он пропускает проверку и сохраняет информацию в базе данных и имеет пароль. Как я могу сделать так, чтобы проверка и хеширование пароля и сохранение информации в базе данных работали?

Я не знаю, как объяснить больше, но если вы не понимаете или не нуждаетесь в дополнительной информации, расскажите мне.

Пользователь вставляет информацию в форму, а затем переходит к проверке и проходит проверку, если нет ошибок в проверке, она переходит к try/catch и вставляет информацию в базу данных и «хэш», пароль.

Две части (валидация и вставка в базу данных с помощью хеш-пароля) работают отлично друг от друга, но когда у меня есть две части вместе, проверка не работает, она пропускает ее.

HTML-форма

<form action="index.php" method="post"> 
           <table> 
            <tr><td> 
             <label for="fullname">Fullname<span class="req">*</span></label> 
             </td> 
            <td><input type="text" name="fullname" value="<? echo $fullname ?>"><span class="error"><?php echo $fullnameErr; ?></span> 
             </td></tr> 
            <tr><td> 
             <label for="email">Email<span class="req">*</span></label></td> 
            <td><input type="email" name="email" value="<? echo $email ?>"><span class="error"><?php echo $emailErr; ?></span> 
             </td></tr> 
            <tr><td> 
             <label for="user">Username<span class="req">*</span></label> 
             </td> 
            <td><input type="text" name="user" value="<? echo $user ?>"><span class="error"><?php echo $userErr; ?></span> 
             </td></tr> 
            <tr><td> 
             <label for="pass">Password</label><span class="req">*</span</td> 
             <td><input id="pass" name="pass" type="password" value=""><span class="error"><?php echo $passErr; ?></span> 
             </td></tr> 
            <tr><td> 
             <label for="rePass">Re-Password</label><span class="req">*</span</td> 
             <td><input id="rePass" name="rePass" type="password" value=""><span class="error"><?php echo $rePassErr; ?></span> 
             </td></tr> 
            <tr><td><input type="submit" name="submit" value="Sign Up"> 
             </td></tr> 
           </table> 
          </form> 

А вот проверка PHP и сохранение в базу данных с хэшированным паролем.

<?php 
    $fullname = $user = $email = $pass = $rePass = "" ; 
    $fullnameErr = $userErr = $emailErr = $passErr = $rePassErr = ""; 
?> 

    <?php 
    if(isset($_POST["submit"])){ 

     $fullname = trim($_POST["fullname"]); 
      $email = trim($_POST["email"]); 
      $user = trim($_POST["user"]); 
      $pass = trim($_POST["pass"]); 
      $rePass = trim($_POST["rePass"]); 

      if (!preg_match("/^[A-Za-z ]*$/", $fullname)) { 
       $fullnameErr = "Only letters are allowed"; 
      } 
      if (!preg_match("/^[A-Za-z0-9]*$/",$user)) { 
       $userErr = "Only letters and numbers are allowed"; 
      } 
      if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { 
       $emailErr = "Invalid email format"; 
      } 
      if (!strlen($pass) > 8) { 
       $passErr = "Password at least 8 characters"; 
      } 

      if (empty($_POST["fullname"])) { 
       $fullnameErr = "Fullname is required"; 
      } 
      if (empty($_POST["email"])) { 
       $emailErr = "Email is required"; 
      } 
      if (empty($_POST["user"])) { 
       $userErr = "Username is required"; 
      } 
      if (empty($_POST["pass"])) { 
       $passErr = "Password is required"; 
      } 
      if (empty($_POST["rePass"])) { 
       $rePassErr = "re-enter password is required"; 
      } 
      if ($_POST["rePass"] != $_POST["pass"]) { 
       $rePassErr = "The re-entered password don't match"; 
      } 

     try{    
      require_once("db_connect.php"); 

      $options = [ 
      'cost' => 12, 
      ]; 

      $hashedPass = password_hash($pass, PASSWORD_BCRYPT, $options); 

      $query = "INSERT INTO users (fullname, email, user, pass) "; 
      $query .= "VALUES (:fullname, :email, :user, :pass)"; 
      $ps = $db->prepare($query); 

      $result = $ps->execute(
       array(
        'fullname' => $fullname, 
        'email' => $email, 
        'user' => $user, 
        'pass' => $hashedPass 
       )); 

      if($result){ 
       header("Location: index.php?signup=true"); 
      }else { 
       echo "Signup failed";       
      } 

     }catch(Exception $exception) { 
      echo "Query failed, see below: <br><br>"; 
      echo $exception."<br /><br />"; 
     } 
    } 
?> 

Благодарим за помощь!

+0

Ну код собирает ошибки, но ничего с этим не делать ошибок. Он просто сохраняет значения независимо от наличия ошибок. – martinstoeckli

+0

@martinstoeckli, да, это была проблема, но я нашел решение, добавив «if (empty ($ fullnameErr) && empty ($ emailErr) && empty ($ userErr) && empty ($ passErr) && empty ($ rePassErr))) {«перед попыткой/уловить и закрыть его после этого. –

ответ

0

Вам понадобится какой-то способ остановить выполнение скрипта, если одна из ваших отказов завершится с ошибкой.

Например

if (empty($_POST["user"])) { 
    $userErr = "Username is required"; 
    return $userErr; 
} 

В противном случае он будет продолжать работать и хеширования и вставки базы данных будет происходить независимо от того, удается ли проверка.

+0

Да, я получил его в форме html после «ошибки класса span». –

+0

вызов «echo» не остановит выполнение скрипта. – Dallin

0

я найти ответ хехе .. Но я отправлю его, так что вы можете увидеть, если кто-то есть такая же проблема ..

if(empty($fullnameErr) && empty($emailErr) && empty($userErr) && empty($passErr) && empty($rePassErr)) { THE CODE OF TRY/CATCH } 

<?php 
    if(isset($_POST["submit"])){ 

     $fullname = trim($_POST["fullname"]); 
      $email = trim($_POST["email"]); 
      $user = trim($_POST["user"]); 
      $pass = trim($_POST["pass"]); 
      $rePass = trim($_POST["rePass"]); 

      if (!preg_match("/^[A-Za-z ]*$/", $fullname)) { 
       $fullnameErr = "Only letters are allowed"; 
      } 
      if (!preg_match("/^[A-Za-z0-9]*$/",$user)) { 
       $userErr = "Only letters and numbers are allowed"; 
      } 
      if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { 
       $emailErr = "Invalid email format"; 
      } 
      if (!strlen($pass) > 8) { 
       $passErr = "Password at least 8 characters"; 
      } 

      if (empty($_POST["fullname"])) { 
       $fullnameErr = "Fullname is required"; 
      } 
      if (empty($_POST["email"])) { 
       $emailErr = "Email is required"; 
      } 
      if (empty($_POST["user"])) { 
       $userErr = "Username is required"; 
      } 
      if (empty($_POST["pass"])) { 
       $passErr = "Password is required"; 
      } 
      if (empty($_POST["rePass"])) { 
       $rePassErr = "re-enter password is required"; 
      } 
      if ($_POST["rePass"] != $_POST["pass"]) { 
       $rePassErr = "The re-entered password don't match"; 
      } 

     if(empty($fullnameErr) && empty($emailErr) && empty($userErr) && empty($passErr) && empty($rePassErr)) { 

     try{    
      require_once("db_connect.php"); 

      $options = [ 
      'cost' => 12, 
      ]; 

      $hashedPass = password_hash($pass, PASSWORD_BCRYPT, $options); 

      $query = "INSERT INTO users (fullname, email, user, pass) "; 
      $query .= "VALUES (:fullname, :email, :user, :pass)"; 
      $ps = $db->prepare($query); 

      $result = $ps->execute(
       array(
        'fullname' => $fullname, 
        'email' => $email, 
        'user' => $user, 
        'pass' => $hashedPass 
       )); 

      if($result){ 
       header("Location: index.php?signup=true"); 
      }else { 
       echo "Signup failed";       
      } 

     }catch(Exception $exception) { 
      echo "Query failed, see below: <br><br>"; 
      echo $exception."<br /><br />"; 
     } 
     } 
    } 
?>