2016-07-10 5 views
0

Моя система входа в систему md5 хэширует имя пользователя и пароль password_hash. Поэтому я не могу получить строку на основе имени пользователя? Затем мой клиент вводит адрес электронной почты, который я base64encode. Затем я предлагаю вариант с потерянным паролем. Однако, когда я ОБНОВЛЯЮТ поле с использованием одного и того же типа хэша, но, используя поле электронной почты в качестве идентификатора, новый пароль неверен? Ниже приведен пример моего UPDATE, но жесткий код для иллюстрации (PS это тоже не работает?).Password_hash Неправильно после обновления таблицы

$em = '[email protected]'; 
$em1 = base64_encode($em); 
$ps = 'some password'; 
$password_hash = password_hash($ps, PASSWORD_BCRYPT); 
$qu = "UPADTE table SET field = '$password_hash' WHERE email = '$em1'"; 
$res = mysqli_query($link, $qu); 

Edited вопрос, чтобы включить свой код после проверки того, что пользователь существует и отправки по электронной почте, чтобы они положительно идентифицировать себя в качестве владельца счета. Вот последняя страница процессора.

if(EMPTY($_POST[psw1])) { 
echo "New password must be supplied"; } 
elseif(EMPTY($_POST[psw2])) { 
echo "Repeat password must be entered"; } 
elseif($_POST[psw1] != $_POST[psw2]) { 
echo "Passwords entered do not match"; 
} elseif(EMPTY($_POST[eu])) { 
echo "Essential data is missing in order to complete this process."; 
} 
elseif (strlen($_POST['psw1']) < 6) { 
echo "Password must be at least six characters in length"; 
    } 
elseif (preg_replace("/[^a-zA-Z0-9]/", "", $_POST['psw1']) !=  $_POST['psw1']) { 
echo "Password may only contain letters and numbers"; 
    } 
elseif(!EMPTY($_POST[psw1]) && !EMPTY($_POST[psw2]) && !EMPTY($_POST[eu]) && $_POST[pw1] == $_POST[pw2]) { 

include "conn.php"; 
echo "$_POST[eu]<br />"; 
$eu = $_POST[eu]; 
$pdw = password_hash($_POST[pw1], PASSWORD_BCRYPT); 

$sq = mysqli_query($link, "UPDATE str1 SET pf = '$pdw', cu_pw_status = '2' WHERE cu_type = '$eu'"); 
echo "Your password has been changed, you may now login <a href='login2.php'>Login</a>"; 
} else { 

echo "Произошла ошибка. }

+0

Привет, не таблица не называется str1, столбец или поле называется пф, это было ради эталонным. Пароль обновлен, но неверен? – Szue

ответ

1
  1. Проверьте, есть ли у вас столбец «поле» в таблице ваших пользователей. Кажется, подозрения.
  2. Проверьте свою строку обновления, теперь она пропускает имя таблицы.
  3. Проверьте, если у вас есть пользователь перед обновлением:

    $exists = mysqli_query("SELECT id FROM users WHERE email='$em1'); 
    
    if (!is_empty($exists)) { 
    
        mysqli_query("UPDATE TABLE users SET password = '$ps' WHERE id='$exists'); 
    
        echo 'updated' . "\n"; 
    
    } else { 
    
        echo 'no user with such email hash' . "\n"; 
    } 
    
+0

Привет, я уже проверил, что пользователь существует, отправил им электронное письмо, получил идентификатор обратного вызова из проверенного письма. Затем я меняю пароль, но не хожу, он не будет работать здесь, это код. – Szue

+0

Можете ли вы опубликовать фактический рабочий код? Это не может работать только потому, что у вас нет котировок 'EMPTY ($ _ POST [psw1])' вокруг ключей объектов. –

+0

И что вы имеете в виду, говоря, что «новый пароль неверен». Если он обновлен, проблема заключается в вашей функции входа, где вы проверяете пароль. –