2015-11-28 5 views
2

У меня есть этот HTML форму:Подтверждение пароля не работает

<form class="signup-form" action="action/register.php" method="post"> 
 
          <input type="text" class="input" name="user" id="user_name" autocomplete="off" placeholder="Username" required="true"> 
 
          <input type="text" class="input" name="nome" id="name" autocomplete="off" placeholder="Nome" required="true"> 
 
          <input type="password" class="input" name="pass" id="user_pass" autocomplete="off" placeholder="Password" required="true"> 
 
          <input type="password" class="input" name="cpass" id="user_cpass" autocomplete="off" placeholder="Confirme a Password" required="true"> 
 
          <input type="submit" class="button" name="submit" value="Sign Up"> 
 
         </form

и действие/register.php как это:

global $db; 
    $username=trim($_POST['user']); 
    $nome=trim($_POST['nome']); 
    $password=trim($_POST['pass']); 
    $cpassword=trim($_POST['cpass']); 



    if(strcmp($password,$cpassword)!==0) { 
     echo "<script> window.location.assign('../errors/password_error.php'); </script>"; 
     //header('Location: ../errors/password_error.php'); 
    } 

    $stmt = $db->prepare('SELECT username FROM utilizador'); 
    $stmt->execute(); 
    $result = $stmt->fetchAll(); 
    foreach ($result as $row) { 
     if($row['username'] === $username){ 
      header('Location: ../errors/username_error.php'); 
     } 
    } 

, когда я ввожу имя пользователя, уже существует, он успешно перенаправляет меня на ошибки/username_error.php, но когда я вставляю cpass, отличный от pass, он принимает его, когда он не должен (я пробовал bo го с эхом и с заголовком).

Любые предложения?

PS: Я уже пробовал, если ($ пароль == $ cpassword!)

PPS: Я думаю, что я решил, но я не понимаю, почему, не так ли? это все register.php, что у меня было:

<?php 
include_once('../database/connection.php'); // connects to the database 
session_start();       // starts the session 

function NewUser() 
{ 
    global $db; 
    $username=trim($_POST['user']); 
    $nome=trim($_POST['nome']); 
    $password=trim($_POST['pass']); 
    $cpassword=trim($_POST['cpass']); 

    if($password !== $cpassword) { 
     //echo "<script> window.location.assign('../errors/password_error.php'); </script>"; 
     header('Location: ../errors/password_error.php'); 
    } 

    else{ 
     $stmt = $db->prepare('SELECT username FROM utilizador'); 
     $stmt->execute(); 
     $result = $stmt->fetchAll(); 
     foreach ($result as $row) { 
      if($row['username'] === $username){ 
       header('Location: ../errors/username_error.php'); 
      } 
     } 



     $img = rand(0,10); 

     $stmt = $db->prepare("INSERT INTO utilizador (username,nome,password,img) VALUES (:username,:nome,:password,:img)"); 
     $stmt->bindParam(':username', $username); 
     $stmt->bindParam(':nome', $nome); 
     $stmt->bindParam(':password', $password); 
     $stmt->bindParam(':img', $img); 
     if($stmt->execute()){ 
      $_SESSION['loggedin'] = true; 
      $_SESSION['username'] = $username; 
      $_SESSION['img'] = $img; 
      header('Location: ../main.php'); 
     } 
    } 
} 


if(isset($_POST['submit'])){ 
NewUser(); 
} 
?> 

я изменил его на это (избавившись от функции), и это сработало!

<?php 



include_once('../database/connection.php'); // connects to the database 
session_start();       // starts the session 

if(isset($_POST['submit'])){ 
global $db; 
    $username=trim($_POST['user']); 
    $nome=trim($_POST['nome']); 
    $password=trim($_POST['pass']); 
    $cpassword=trim($_POST['cpass']); 

    if($password !== $cpassword) { 
     //echo "<script> window.location.assign('../errors/password_error.php'); </script>"; 
     header('Location: ../errors/password_error.php'); 
    } 

    else{ 
     $stmt = $db->prepare('SELECT username FROM utilizador'); 
     $stmt->execute(); 
     $result = $stmt->fetchAll(); 
     foreach ($result as $row) { 
      if($row['username'] === $username){ 
       header('Location: ../errors/username_error.php'); 
      } 
     } 



     $img = rand(0,10); 

     $stmt = $db->prepare("INSERT INTO utilizador (username,nome,password,img) VALUES (:username,:nome,:password,:img)"); 
     $stmt->bindParam(':username', $username); 
     $stmt->bindParam(':nome', $nome); 
     $stmt->bindParam(':password', $password); 
     $stmt->bindParam(':img', $img); 
     if($stmt->execute()){ 
      $_SESSION['loggedin'] = true; 
      $_SESSION['username'] = $username; 
      $_SESSION['img'] = $img; 
      header('Location: ../main.php'); 
     } 
    } 
} 

?> 
+0

вы можете проверить пароль и пароль, используя js. почему вы пытаетесь использовать скрипт на стороне сервера? –

+0

@VigneswaranS, я не знаю, как использовать js –

+0

Если вы добавляете 'var_dump ($ _ POST)', являются ли значения 'pass' и' cpass' одинаковыми? Вы должны быть в состоянии '==' без 'strcmp()'. –

ответ

1

попробовать:

if(strcmp($password,$cpassword)!=0) 

вместо:

if(strcmp($password,$cpassword)!==0) 

я не могу гарантировать работает с им своего рода новое для PHP

+0

попробовал, что вам не повезло –

+0

Вы пытались добавить else-блок с if-блоком?, вы также можете попробовать блок if, чтобы проверить, что пароли будут равны, а не тестировать его неравномерно. –

0

Clue 1: ли пароль от база данных зашифрована? Если да, вы должны шифровать пароль ввода, прежде чем делать с ним какие-либо сравнения.

Улика 2:

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

$stmt = $db->prepare('SELECT username, password FROM utilizador'); 
    $stmt->execute(); 
    $result = $stmt->fetchAll(); 
    foreach ($result as $row) { 
     if($row['username'] === $username){ 
      header('Location: ../errors/username_error.php'); 
     } 

     if($row['password'] === $password){ 
      header('Location: ../errors/password_error.php'); 
     } 
} 

Clue 3: Вы пытались очистить кэш браузера внутри register.php?

<?php 
header("Expires: Tue, 01 Jan 2000 00:00:00 GMT"); 
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); 
header("Cache-Control: post-check=0, pre-check=0", false); 
header("Pragma: no-cache"); 
?> 
+0

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

+0

@Francisco Estêvão, я пробовал ваш код только с паролем, и он отлично работает для меня. Возможно, это проблема с кешем. Не могли бы вы попробовать код подсказки 3 и дать мне свои отзывы? – Aurelien

+0

попробовал это, не повезло:/Я использую MAMP, как вы думаете, в чем проблема? –

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