我有一个脚本,可以将电子邮件地址和密码添加到表中。我首先搜索表中是否存在电子邮件地址。如果有,我会给出一个错误消息。如果没有,我添加记录。
然后,使用mysqli\u insert\u id(),我运行另一个查询来更新刚才添加的记录,用md5加密密码。
但是每次我运行它时,都会添加记录,但是密码不会用md5版本的密码更新。我已经回显了查询,它显示它应该用加密更新密码,但它没有。有什么想法吗?
<?php
session_start();
error_reporting(E_ALL);
if (array_key_exists("submit", $_POST)) {
$link = mysqli_connect("localhost", "eits_Admin", "WebSpinner1", "EITS_Sandbox");
if (!$link) {
die("Database connection error");
}
$error = '';
if (!$_POST['email']) {
$error .= "<br/>An email address is required";
}
if (!$_POST['password']) {
$error .= "<br/>A password is required";
}
if ($error != "") {
$error = "There were errors in your form - ".$error;
} else {
$query = "select id from secretdiary
where email = '".mysqli_real_escape_string($link, $_POST['email'])
."' limit 1";
// echo $query;
$result = mysqli_query($link, $query);
if (mysqli_num_rows($result) > 0) {
$error = "That email address is not available.";
} else {
$query = "insert into secretdiary
(email,password)
values ('" . mysqli_real_escape_string($link, $_POST['email'])
. "', '"
. mysqli_real_escape_string($link, $_POST['password']) . "')";
if (!mysqli_query($link, $query)) {
$error = "Could not sign you up at this time. Please try again later.";
} else {
$encPass = md5(md5(mysqli_insert_id($link)) . $_POST['password']);
$query = "update secretdiary
set password = '" . $encPass
. "' where id = " . mysqli_insert_id($link) . " limit 1";
echo $query;
$result = mysqli_query($link,$query);
echo "Sign up successful.";
}
}
}
}
?>
<div id="error"><? echo $error; ?></div>
<form method="post">
<input type="email" name="email" placeholder= "Your Email">
<input type="password" name="password" placeholder="Password">
<input type="checkbox" name="stayLoggedIn" value=1>
<input type="submit" name="submit" value="Sign Up!">
</form>
1条答案
按热度按时间sxissh061#
对于一个相对简单的过程,你有很多行代码。就个人而言,可以通过添加
required
在每个html表单输入元素的末尾(这就是我要做的)其次,md5对于散列密码是不安全的(你是散列密码而不是加密密码)
第三,这里有一种使用bcrypt对表单中的密码进行散列的方法,它比使用md5散列要好得多。所以在检查错误之前要做什么
like counting the usernames and if row > 0 die('username exists)
使用pdo的基本完整代码示例当检查用户登录时,只需使用
password_verify()
这样做的功能整洁的代码可以帮助人们理解你的问题所在,并且通常更易于阅读。我知道你可能只是在寻找一些'做的工作',但它可以帮助你调试时,我们当你要求帮助。
我会给你一个比你的方法更安全的方法。
索引.php
连接.php
寄存器.php
登录.php