晚上的人,
让其他人“看着这个太久的时刻”。
这段代码在运行时返回成功消息,但没有任何内容输入到数据库表中,没有错误被抛出,我知道所有正确的值都是从_post收到但是我看不出有什么问题,我差不多了在另一个页面上的相同查询,它工作正常。
任何人都可以看到代码问题吗?
if (isset($_POST['username']) && $_POST['username'] !== '')
{
$salted = md5($_POST['pass1'] . 'salt');
try
{
$sql = 'INSERT INTO users SET
username = :username,
firstname = :firstname,
lastname = :lastname,
email = :email,
password = $salted,
joined = CURDATE()';
$s = $PDO->prepare($sql);
$s -> bindValue(':username', $_POST['username']);
$s -> bindValue(':firstname', $_POST['firstname']);
$s -> bindValue(':lastname', $_POST['lastname']);
$s -> bindValue(':email', $_POST['email']);
$s -> execute();
}
catch (PDOException $e)
{
$error = 'Error adding submitted user.';
echo $error;
exit();
}
?> <div class="alert alert-success">User added to the database.</div> <?php
}
答案 0 :(得分:1)
总结这里的评论,为了得到答案。标记社区维基。
应引用INSERT语句中的字符串。
password = '$salted',
无论如何你应该使用一个参数。
password = :password,
. . .
$s -> bindValue(':password', $salted);
MD5不是现代强密码存储的首选散列函数。 SHA1也不是。
尝试使用SHA256或Bcrypt。
$salted = hash('sha256', $_POST['pass1'] . 'salt');
如果您为每个用户使用随机盐字符串,则Salting会更好。
确保您的PDO实例为configured to throw exceptions。
$PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
始终捕获PDO异常的错误消息,即使您没有将其输出给用户。
error_log($e->getMessage());