我正在尝试创建一个注册页面,并且在使用PASSWORD_BCRYPT和mysqli尝试哈希密码时遇到了麻烦.有人可以解释下面我的代码有什么问题吗?
<?php
if(isset($_POST['Register'])) { // checking that form is submitted
session_start(); //creating variables for form entries
$FName = $_POST['First_Name'];
$LName = $_POST['Last_Name'];
$Email = $_POST['Email'];
$PW = $_POST['Password'];
$StorePassword = password_hash($PW, PASSWORD_BCRYPT, array('cost' => 10));
$sql = $con->query("INSERT INTO users (Fname, Lname, Email, Password)Values('{$FName}', '{$LName}', '{$Email}', '{$PW}')");
header('Location: Login.php');
Run Code Online (Sandbox Code Playgroud)
首先,您在查询中使用了错误的变量$PW而不是$StorePassword您在顶部使用它的目标变量,然后将其传递给散列函数.
您的密码存储为"rasmuslerdorf"而不是"$ 2y $ 10 $ .vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a"
如果仍然无效,那么您可能无法使用该功能,需要使用密码兼容包
将错误报告添加到文件的顶部,这将有助于查找错误.
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
Run Code Online (Sandbox Code Playgroud)
旁注:显示错误只能在分段中完成,而不能在生产中完成.
请参阅以下链接
并将其应用于您的代码.
您的查询可能有错误,但您没有检查它们.
另外,如果您没有发布HTML表单,请确保它使用的是POST方法,并且所有输入都带有正确的名称属性.
只是出于争论的缘故; 您发布的代码缺少右括号}
还要exit;在标题后添加,之后应该有更多的代码.否则,您的代码可能希望继续执行.
确保使用与查询时相同的MySQL API确实成功连接mysqli_.这对我们来说是未知的.
mysql_PDO和PDO)不会混用,mysqli_反之亦然.确保你没有在标题使用之前输出session_start();它现在所在的位置; 它看起来好像在打开PHP标记之前有一个空格,它被视为输出.错误报告也会告诉您.
您现在的代码对SQL注入是开放的.使用准备好的语句,或PDO与准备好的语句,它们更安全.
脚注:
确保密码列足够长以存储哈希值.PHP.net建议使用VARCHAR(255)和以适应未来.所有列和正确的长度/类型都是一样的.
"请注意,此常量随着时间的推移而变化,因为新的和更强的算法被添加到PHP中.因此,使用此标识符的结果长度可能会随着时间的推移而变化.因此,建议将结果存储在数据库列可以扩展超过60个字符(255个字符将是一个不错的选择)."
| 归档时间: |
|
| 查看次数: |
166 次 |
| 最近记录: |