我是PHP编程的新手,并决定创建一个登录系统。
以下是我的登录和注册脚本使用的加密文件secure.php
:
<?php
$key = "string";
function loginUser($password, $iv) {
$password = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $password, MCRYPT_MODE_CBC, $iv);
return $password;
}
function registerUser($password) {
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND);
$password = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $password, MCRYPT_MODE_CBC, $iv);
return array($password, $iv);
}
?>
以及我拨打loginUser
的文件:
<?php
// ...
$iv_query = "SELECT iv FROM table WHERE username = '$username'";
$get_iv = mysqli_query($dbcon, $iv_query);
$password = loginUser($password, $get_iv);
$check_user = "SELECT * FROM table WHERE username = '$username' AND password = '$password'";
$user_query = mysqli_query($dbcon, $check_user);
if (mysqli_num_rows($user_query)) {
// ...
}
?>
函数registerUser
有效,但loginUser
函数无效。 PHP错误消息显示Catchable fatal error: Object of class mysqli_result could not be converted to string in secure.php on line 5
。为什么第 11 行中的代码有效,但行 5 中的代码无效?有什么方法可以解决这个问题吗?当前的注册和登录系统位于yikjin.ga。您可能想尝试注册并使用帐户登录,我将在此问题解决后删除所有帐户。提前谢谢!
答案 0 :(得分:0)
您正在将mysqli result set object
而不是值传递给function loginUser
。
从结果集中检索值,然后将其传递给function loginUser
。
$iv_query = "SELECT iv FROM table WHERE username = '$username'";
$rs = mysqli_query($dbcon, $iv_query);
$row - mysqli_fetch_assoc($rs); // Get value from result set
$get_iv = $row['iv'];
$password = loginUser($password, $get_iv);
答案 1 :(得分:0)
mysqli_query
将返回对象,而不是字符串。
因此,您需要循环才能获取变量。 $iv
将成为字符串。
然后传递给函数loginUser
。
while ($row = mysqli_fetch_array($user_query)) {
$iv = $row['iv'];
$password = loginUser($password, $get_iv);
}