2016-05-06 2 views
0

У меня есть регистрационная форма, в которой входные данные записываются в базу данных. Пароль «pw» будет хэширован с помощью BCRYPT, это правильно работает с этим кодом:Password Hashing

$ pwHash = pw_hash ($ pw, PASSWORD_BCRYPT, array ('cost' => 10));

Проблема:

Когда я хочу, чтобы обновить данные не будут работать. Приведенный ниже код записывает данные без шифрования в базу данных.

Как я могу сделать пароль зашифрованным?

Может ли кто-нибудь помочь мне здесь?

<?php 
 
include_once 'dbcon.php'; 
 
$id = $_POST['id']; 
 
$fn = $_POST['fn']; 
 
$ln = $_POST['ln']; 
 
$em = $_POST['em']; 
 
$hid = $_POST['hid']; 
 
$tn = $_POST['tn']; 
 
$us = $_POST['us']; 
 
$pw = $_POST['pw']; 
 
$ul = $_POST['ul']; 
 

 
$chk = $_POST['chk']; 
 
$chkcount = count($id); 
 
for($i=0; $i<$chkcount; $i++) 
 

 
$pwHash = pw_hash($pw, PASSWORD_BCRYPT, array('cost' => 10)); 
 

 
{ 
 
$MySQLiconn->query("UPDATE user SET FName='$fn[$i]', LName='$ln[$i]', Email='$em[$i]', HerbalifeID='$hid[$i]', TelNr='$tn[$i]', UplineS='$us[$i]', Password='$pwHash[$i]', UserLevel='$ul[$i]' WHERE UserID=".$id[$i]); 
 
} 
 
header("Location: indexAdmin.php"); 
 
?>

+0

Подтяжки ('{...}') вокруг блоков кода (для блока 'if'?); выглядит как ошибка в вашей логике –

+0

'$ pwHash' - это не массив, это строка; но ваш блок запросов пытается ссылаться на него так, как будто это массив ... поскольку '$ pwHash' - это строка,' $ pwHash [0] 'будет ссылаться на первый символ' $ pwHash'; '$ pwHash [1]' будет ссылаться на второй символ и т. д. –

+0

Почему ваши '$ _POST ['id']', '$ fn = $ _POST ['fn'];', '$ em = $ _POST [' em ']; 'и т. д. все равно рассматриваются как массивы? –

ответ

0

Я предполагаю, что исправление должно быть следующими

<?php 
include_once 'dbcon.php'; 
$id = $_POST['id']; 
$fn = $_POST['fn']; 
$ln = $_POST['ln']; 
$em = $_POST['em']; 
$hid = $_POST['hid']; 
$tn = $_POST['tn']; 
$us = $_POST['us']; 
$pw = $_POST['pw']; 
$ul = $_POST['ul']; 

$chk = $_POST['chk']; 
$chkcount = count($id); 
for ($i = 0; $i < $chkcount; $i++) { 

    $pwHash = password_hash($pw[$i], PASSWORD_BCRYPT, array('cost' => 10)); 
    $MySQLiconn->query("UPDATE user SET FName='$fn[$i]', LName='$ln[$i]', Email='$em[$i]', HerbalifeID='$hid[$i]', TelNr='$tn[$i]', UplineS='$us[$i]', Password='$pwHash', UserLevel='$ul[$i]' WHERE UserID=".$id[$i]); 
} 
header("Location: indexAdmin.php"); 

Изменения

  1. Создать pwHash переменной и обновление таблицы внутри одного цикла.
  2. Доступ $pw[$i] как другие переменные, такие как $id и $fn - все они кажутся массивами.
  3. $pwHash не массив, доступ к нему, как скалярная переменная.
  4. Использование password_hash функции - обновление на основе комментариев по Paul Crovella

Есть несколько вопросов, связанных с кодом. И, по-моему, я считаю, что код открыт до SQL injection attack.

+0

Hello Victor, Спасибо за ваш комментарий! Я становлюсь Неустранимая ошибка: Позвоните в неопределенную функцию pw_hash() по строке 17 Регары, Бенни – Benny

+0

@Benny приветствуются. Работает ли это для вас? У вас есть вопросы? –

+0

@benny - well 'pw_hash()' было именем функции, которую ваш вопрос сказал, что вы используете, поэтому, если это вызывает ошибку сейчас, она всегда должна вызывать ошибку. –

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