2012-03-05 125 views
-1

我在尝试一些非常基本的东西,但它由于某种原因无法工作!基本上我试图为我的网站创建一个新的用户名和密码。它仅用于测试。当我提出要求,我得到这样的:php建立连接失败

警告:mysql_real_escape_string()[function.mysql实时逃逸字符串]:拒绝访问用户santoshs'@ 'localhost' 的(使用密码:NO) in /home/khali197/public_html/test/enroll.php on line 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

是你的登录用户名'santoshs' mysqli扩展? – 2012-03-05 09:49:26

+0

不是这不是这就是为什么我震惊 – 2012-03-13 04:16:25

回答

1

MySQL不是MySQLi。如果您使用MySQLi扩展名,请不要使用mysql_real_escape_string函数。他们是两个完全不同的数据库驱动

0

你在调用mysql_real_escape_string()时发现错误意味着你没有在mysql_connect()处捕获错误 - 所以即使在考虑用户是什么之前,显然正在运行的代码并不是代码你已经向我们展示过。

尝试增加在ServerConnection.php mysql_connect()函数的一些错误检测和检查权限用户santoshs

+0

再次桑托斯不是一个真正的用户...有没有人,但我.... :( – 2012-03-05 09:40:34

+0

你在哪里看到'mysql_connect'? – deceze 2012-03-05 09:42:15

+0

我不知道会发生什么但我相信现在mysqli或更像是ServerConnection类导致了这个问题,我会进一步检查,因为一旦我将其更改为常规mysql连接,突然所有工作!谢谢 – 2012-03-06 07:16:25

1

当你把它叫做搜索较早MySQL的连接打开了mysql_real_escape_string()函数,而不是的mysqli连接。如果找不到,则尝试使用系统登录用户打开新的连接。如果你的系统用户名是santoshs那么这就是原因。

的解决办法是变化ServerConnection类使用mysql扩展或使用enrole.php

+0

更正:如果没有建立的mysql连接,'mysql_ *'函数会尝试自动建立一个新的连接,并且以最好的猜测用户名的权利。 – deceze 2012-03-05 09:46:30

+0

'best-guess username'你的意思是,当前登录的用户名? – 2012-03-05 09:48:36

+0

我想是的,你也可以配置我认为php.ini中的默认值。无论哪种方式,这是一个非常可怕的机制。:) – deceze 2012-03-05 09:49:25