2012-03-05 118 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