2017-02-17 4 views
1

так долго боролись с этим ... История: Я попытался добавить «подтверждение пароля» ($repassword) в мою регистрационную форму. Также добавлена ​​строка, в которой говорится: «Пароли не соответствуют», которые должны активироваться, если это так (если пароли не совпадают).
Проблема: все работает нормально, за исключением того, что это не покажет это сообщение, если пароли не совпадают.
Немного больше истории, если вы не спешите: я пробовал несколько вещей. Например, вводя это в действие (function valid_pws) или помещая его в одно выражение if. Некоторые из них работают путем вывода «Пароли не соответствуют», но тогда это всегда показывает это сообщение, если пользователь нажал кнопку «Регистрация». О, и все в порядке с базой данных. Он всегда понимает, что я хочу делать, просто не могу этот текст показать (если это необходимо) или скрыть (если это не нужно).PHP - не может показать выходной текст, если пароли не совпадают

PHP код:

<?php 
require ('insert.php'); 

function valid_pws($password,$repassword) { 

    // Validate pws. 
    if (empty($password || $repassword)) { 
     return false; 
    } 
    else if ($password !== $repassword) { 
     // error matching passwords 
     return false; 
    } 
    else { 
    return true; // passwords match 
    } 
} 

// create that user 
function create_user($name, $username, $password, $email) { 
     require ('insert.php'); 
     $query = "INSERT INTO `users` (Name, Username, Password, EMail) VALUES('$name','$username', '$password', '$email')"; 
     $result = mysqli_query($connection, $query); 

     if($result){ 
      return true; // Success 
     }else{ 
      return false; // Error somewhere 
     } 
} 

// If the values are posted, insert them into the database. 
    if (isset($_POST['username']) && isset($_POST['password'])){ 
     $name = $_POST['name']; 
     $email = $_POST['email']; 
     $username = $_POST['username']; 
     $password = $_POST['password']; 
     $repassword = $_POST['repassword']; 

     // I'm not using hash atm 
     $hash = password_hash($password, PASSWORD_DEFAULT); 

     //valid_pws function in a var 
     $pwerr = valid_pws($password,$repassword); 

     //if there's everything fine with passwords then good 
     if ($pwerr === true){ 
     //if there's everything fine with creating user then good 
     if (create_user($name, $username, $password, $email)) { 
       $smsg = "User registration success."; 
     } 
     else{ 
      //if there's something wrong with pws, then error. Should get it from function if false is returned... or not? 
      if($pwerr === false){ 
       $rmsg = "Passwords doesn't match"; 
      } 
      else { 
      // if there's something else with registration, then error 
      $fmsg = "User registration failed."; 
      } 
     } 
    } 
} 

mysqli_close($connection); 
?> 

HTML код:

<form action="" method="POST" class="form-horizontal" role="form"> 

     <!-- How registering went --> 
     <?php if(isset($smsg)){ ?><div class="alert alert-success" role="alert"> <?php echo $smsg; ?> </div><?php } ?> 
     <?php if(isset($fmsg)){ ?><div class="alert alert-danger" role="alert"> <?php echo $fmsg; ?> </div><?php } ?> 
     <?php if(isset($rmsg)){ ?><div class="alert alert-danger" role="alert"> <?php echo $rmsg; ?> </div><?php } ?> 

     <!-- Registration form begins --> 
     <h2>Register</h2><br> 

      <label for="Name">Name</label> 
      <input name="name" type="text" id="name" maxlength="40" placeholder="Name" class="form-control" required autofocus> <!-- end --> 

      <label for="email">Email</label> 
      <input name="email" type="email" id="email" maxlength="65" placeholder="Email" class="form-control"> <!-- end --> 


      <label for="userName">User</label> 
      <input name="username" type="text" id="userName" maxlength="12" placeholder="Username" class="form-control" required> <!-- end --> 

      <label for="password">Password</label> 
      <input name="password" type="password" id="password" maxlength="50" placeholder="Password" class="form-control" required> <!-- end --> 

      <label for="password">Repassword</label> 
      <input name="repassword" type="password" maxlength="50" placeholder="Password again" class="form-control"> <!-- end --> 


      <button type="submit" class="btn btn-primary btn-block">Register</button> 
     </form> 
+1

Ваш 'если ($ pwerr === истина)' не имеют другого. if ($ pwerr === false) {находится в пределах $ pwerr === true. Который никогда не будет иметь дело – Johan

+0

Ой, я думал, что это не так. Попытка исправить это. –

ответ

1

Вы перепутались условия должно быть:

if ($pwerr === true){ 
      //if there's everything fine with creating user then good 
      if (create_user($name, $username, $password, $email)) { 
        $smsg = "User registration success."; 
      } 
     }//<-------- note that coditopn over here 
      else{ 
       //if there's something wrong with pws, then error. Should get it from function if false is returned... or not? 
       if($pwerr === false){ 
        $rmsg = "Passwords doesn't match"; 
       } 
       else { 
       // if there's something else with registration, then error 
       $fmsg = "User registration failed."; 
       } 
      } 
+0

Позор мне ... Это была глупая (но важная) ошибка. Не могу поверить, что я потратил 3 часа на это ...>.> Хотя БОЛЬШОЕ СПАСИБО за ваши хорошие глаза! :) –

0

Попробуйте изменить эти условия:

if ($pwerr === true){ 
     if (create_user($name, $username, $password, $email)) { 
      $smsg = "User registration success."; 
     }else{ 
      $fmsg = "User registration failed."; 
     } 
    }else{ 
     $rmsg = "Passwords doesn't match"; 
    } 
0

Проблема с вашим кодом в том, что он никогда не входит в то место, где вы проверяете, не совпадают ли пароли.

Вы можете сделать что-то вроде:

<?php 
    function valid_pws($password,$repassword) { 
     // Validate pws. 
     if (empty($password || $repassword)) { 
      return false; 
     } else if ($password !== $repassword) { 
      // error matching passwords 
      return false; 
     } 
     return true; // passwords match 
    } 
    //valid_pws function in a var 
    $pwerr = valid_pws("teste","tete"); 

    //if there's everything fine with passwords then good 
    if ($pwerr === true){ 
     //if there's everything fine with creating user then good 
     if (create_user($name, $username, $password, $email)) { 
      $smsg = "User registration success."; 
     } else { 
      // if there's something else with registration, then error 
      $fmsg = "User registration failed."; 
     } 
    } else { 
     $rmsg = "Passwords doesn't match"; 
    } 

    if(isset($smsg)){ echo $smsg; } 
    if(isset($fmsg)){ echo $fmsg; } 
    if(isset($rmsg)){ echo $rmsg; } 

Код выше напечатает Passwords doesn't match

Смежные вопросы