我正在尝试一些非常基本的东西,但由于某种原因它无法正常工作!基本上我正在尝试为我的网站创建一个新的用户名和密码。它仅用于测试。当我提交请求时,我明白了:
警告:mysql_real_escape_string()[function.mysql-real-escape-string]:在/home/khali197/public_html/test/enroll.php中拒绝用户'santoshs'@'localhost'(使用密码:NO)的访问权限在第27行
我不知道谁是santoshs在这里显示@ localhost。在家里它显示了不同的人。会是什么呢?
我有以下代码来尝试实现我的目标......真的非常简单:
<?php
class ServerConnection{
function connect(){
$mysqli = new mysqli("localhost", "dsdssd_admin", "sddsdsd",
"khadsdsli197_dsd");
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: (" .
$mysqli->connect_errno . ") " .
$mysqli->connect_error;
}
//echo $mysqli->host_info . "\n";
}
}
?>
register.php表格:
<form name="register" action="enroll.php" method="post">
Username: <input type="text" name="username" maxlength="30" />
Password: <input type="password" name="pass1" />
Password Again: <input type="password" name="pass2" />
<input type="submit" value="Register" />
</form>
以及处理该表单的表单,即enroll.php:
<?php
include("ServerConnection.php");
//retrieve our data from POST
$username = $_POST['username'];
$pass1 = $_POST['pass1'];
$pass2 = $_POST['pass2'];
if($pass1 != $pass2)
header('Location: register_form.php');
if(strlen($username) > 30)
header('Location: register_form.php');
$hash = hash('sha256', $pass1);
//creates a 3 character sequence
function createSalt()
{
$string = md5(uniqid(rand(), true));
return substr($string, 0, 3);
}
$salt = createSalt();
$hash = hash('sha256', $salt . $hash);
$connection = new ServerConnection();
$connection->connect();
$username = mysql_real_escape_string($username);
$query = "INSERT INTO users ( username, password, salt )
VALUES ( '$username' , '$hash' , '$salt' );";
mysql_query($query);
mysql_close();
header('Location: index.php');
?>
任何帮助都将受到高度赞赏!提前致谢
答案 0 :(得分:1)
MySQL不是MySQLi。如果您使用的是MySQLi扩展,请不要使用mysql_real_escape_string
功能。它们是两个完全不同的数据库驱动程序。
答案 1 :(得分:1)
当你调用mysql_real_escape_string()函数时,它会搜索之前打开的 mysql 连接,而不是 mysqli 连接。如果找不到,则尝试与系统登录用户打开新连接。如果您的系统用户名是santoshs
,那么这就是原因。
解决方案是更改ServerConnection
类以使用mysql
扩展名或使用enrole.php
中的mysqli扩展名
答案 2 :(得分:0)
当你调用mysql_real_escape_string()意味着你没有在mysql_connect()中捕获错误时你看到了错误 - 所以即使在考虑用户是什么之前,很明显代码正在运行的不是您向我们展示的代码。
尝试在ServerConnection.php中的mysql_connect()处添加一些错误检测,并检查用户santoshs的权限