我很困惑, 不久前我被告知我需要哈希我的密码,我认为我已经完成了,我在这里找到了一个单独的溢出问题How to use password_hash
但遗憾的是我尝试将其添加到我的代码中似乎没有任何效果。我被告知的另一件事是添加http://php.net/manual/en/mysqli.construct.php这使我更加困惑。我觉得我的代码都没有正确完成,我觉得自己是一个完全白痴因为不知道这些,我真的很抱歉。我问过4年前做过PHP的老师,但遗憾的是她也不知道。我真的想在编码方面做得更好,但我觉得我不知道这些。我真的尽力做到这一点,而不是要求溢出,因为我觉得我做错了:/。
我已经尝试在php网站上做了很多研究,我到处寻找可能的答案我将如何添加mysqli_construct。显然我有机会注入我的代码。我知道这可能很容易解决,但我完全被所有事情搞糊涂了,
再次感谢你能帮助我。
大卫,
-Code -
的index.php
<?php
include("database.php");
session_start();
if($_SERVER["REQUEST_METHOD"] == "POST") {
// Create querystring
$sql = "SELECT id, password FROM admin WHERE username = ?";
// Prepare, bind, execute
$stmt = mysqli_prepare($db,$sql);
mysqli_stmt_bind_param($stmt, 's', $_POST['username']);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $user_id, $user_password);
if (mysqli_stmt_fetch($stmt)) {
// Validate password
if (password_verify($_POST['password'], $user_password)) {
session_register("username");
$_SESSION['login_user'] = $username;
header("location: myaccount.php");
exit;
} else {
$error = "Your Login Name or Password is invalid";
}
mysqli_stmt_close($stmt);
} else {
$error = "Your Login Name or Password is invalid";
}
}
?>
database.php中
<?php
$host = 'localhost';
$user = '-';
$pass = '-';
$db = 'database';
$mysqli = new mysqli($host,$user,$pass,$db) or die($mysqli->error);
?>
我的错误日志
[15-Jul-2017 05:29:20 America/New_York] PHP Warning: mysqli_prepare() expects parameter 1 to be mysqli, string given in /home/beaskxxb/public_html/index.php on line 10
[15-Jul-2017 05:29:20 America/New_York] PHP Warning: mysqli_stmt_bind_param() expects parameter 1 to be mysqli_stmt, null given in /home/beaskxxb/public_html/index.php on line 11
[15-Jul-2017 05:29:20 America/New_York] PHP Warning: mysqli_stmt_execute() expects parameter 1 to be mysqli_stmt, null given in /home/beaskxxb/public_html/index.php on line 12
[15-Jul-2017 05:29:20 America/New_York] PHP Warning: mysqli_stmt_bind_result() expects parameter 1 to be mysqli_stmt, null given in /home/beaskxxb/public_html/index.php on line 13
[15-Jul-2017 05:29:20 America/New_York] PHP Warning: mysqli_stmt_fetch() expects parameter 1 to be mysqli_stmt, null given in /home/beaskxxb/public_html/index.php on line 14
有人说我需要制作一个function.php?我深入研究了这一点,因为显然我没有定义所有内容, 我真的希望这个工作。因为它似乎要倒退, 对不起,我知道这不是很好。但我只想让它发挥作用,
编辑: admin的表结构:
1 username longtext latin1_swedish_ci Yes NULL Change Change Drop Drop
2 password longtext latin1_swedish_ci No None Change Change Drop Drop
你的大卫。
答案 0 :(得分:1)
首先 - 改变
$stmt = mysqli_prepare($db,$sql);
到
$stmt = mysqli_prepare($mysqli,$sql);
您传递的是数据库名称,而不是与数据库的连接。
如果表中没有名为id的列,则只需使用
即可$sql = "SELECT password FROM admin WHERE username = ?";
正如您刚刚查看密码一样,这就是您所需要的一切。
要检查您的准备是否正常,请更改以下行...
if (!$stmt = mysqli_prepare($mysqli,$sql)) {
echo "Failed to prepare:".mysqli_error($mysqli);
return;
}
编辑: 从select中删除id后,您需要将绑定更改为...
mysqli_stmt_bind_result($stmt, $user_password);