2013-02-19 38 views
1

這是一個Android應用程序,我使用的是用php編寫的web服務。我有3個PHP腳本 - dbconnect.php(這有所有的數據庫變量),login.php(這驗證用戶憑據和打開會話)和showCases.php(它將返回從userID變量login.php腳本)如何使用不同的php腳本的會話和變量到另一個php文件。

但是,出於某種原因,我有:「當用戶請求信息showCases.php時,拒絕用戶'ODBC'@'localhost'(使用密碼:NO)」。我不太確定會話是否正確使用。

這裏是login.php中的腳本:

//Displaying the error if sql query is incorrect 
if(!$result){ 
    die(mysql_error()); 
}else{ 
    $row = mysql_fetch_assoc($result); 
    $first_name = $row['first_name']; 
    $id = $row['id']; 
} 

//If found, number of rows must be 1 
if($num_rows==0){  
    $success = 0; 
}else{ 
    //creating session 
    session_start(); 
    session_register("$username"); 
    session_register("$password"); 
    $success = 1; 

} 
    $arr = array(
    array('username' => $username, 'id'=>$id,'success'=>$success, 'first_name'=>$first_name)); 
    #array('success'=> $success)); 

echo json_encode((array('Username'=>$arr))); 

mysql_close(); 
?> 

該腳本將用戶名數組返回給Android應用它來處理驗證。經過驗證,android應用程序會從這個php腳本請求票據。

session_start(); 

#require('dbconnect.php'); 
require_once('login.php'); 

$response=array(); 
$response['infos'] = array(); 

//execute the SQL query and return records 
$result = mysql_query("SELECT cases.id, cases.account_id.... casesvisibility.user_id = '$id'......"; 

//Displaying the error if sql query is incorrect 
if(!$result){ 
    die(mysql_error()); 
} 

$num_rows = mysql_num_rows($result); 
$arr = array(); 

if($num_rows!=0){ 
while ($row = mysql_fetch_assoc($result)) { 
$arr['cases_id']=$row['cases.id']; 
$infos[]=$arr; 
} 
}else{ 
#$arr['existingCases']=$row['0']; 
$arr['cases_id']=0; 
$infos[]=$arr; 
} 

#Echoing a JSONArray 
print(json_encode(array('Cases'=>$infos))); 
//close the connection 
mysql_close(); 
?> 

我不太確定這是我希望它實現的功能的編寫良好的代碼。當我打電話從Android應用程序這個劇本,我首先從登錄腳本得到JSON_array,它告訴我:

{"Username":[{"username":"","id":null,"success":0,"first_name":null}]}id is 
Warning: mysql_query() [function.mysql-query]: Access denied for user 'ODBC'@'localhost' (using password: NO) in E:\wamp\www\mobile.dcl.mu\webserver\showCases.php on line 18 

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in E:\wamp\www\mobile.dcl.mu\webserver\showCases.php on line 18 

訪問被拒絕的用戶「ODBC」 @「localhost」的(使用密碼:NO)

據我所知,我試圖從另一個PHP腳本使用變量。

你能幫我解決這個問題嗎?

謝謝

回答

1

你在哪裏創建$num_rows?也許你希望把這個代碼在頂部的login.php:

//Displaying the error if sql query is incorrect 
if(!$result){ 
    die(mysql_error()); 
}else{ 
    $num_rows = mysql_num_rows($result); 
    if ($num_rows) { 
      $row = mysql_fetch_assoc($result); 
      $first_name = $row['first_name']; 
      $id = $row['id']; 
    } 
} 
0

與數據庫連接呼叫最有可能的問題,你要麼不提供正確的用戶名和或密碼。我懷疑缺少密碼。檢查你的數據庫連接

$db_host = "localhost"; // database host 
$db_name = "test"; // database name 
$db_login = "root"; // database user 
$db_pass= "*****"; // database password 

$db = mysql_connect($db_host, $db_login, $db_pass); 
mysql_select_db($db_name,$db); 

這只是示例代碼來表明我指的是什麼。另外,確保你在每個php文件中包含這個db連接文件。有多種方法可以讓DB連接提供給不同的PHP文件(其中SQL調用得到使)

+0

我在login.php腳本的頂部有這個 include('dbconnect.php'); 該腳本包含有關數據庫和mysql連接的所有正確信息。我是否也需要將它包含在showCases.php之上,即使我已經包含了login.php? – mokko211 2013-02-19 11:33:35

1

我想你會議混淆DB連接(如果我正確地理解你的代碼片段)。

請記住,對於服務器來說,每個請求都是一個全新的過程。您可以通過會話共享變量,但不能共享像數據庫連接這樣的過程綁定資源。

當你的服務器告訴你,第二個請求沒有密碼,甚至可能是錯誤的(默認?)db用戶給出的。

所以,你需要做的很簡單:

提供所有可能的執行路徑的數據庫連接信息。即如果您的Android應用程序直接調用http://your.server/showCases.php,則也會在showCases.php中包含dbconnect.php。

我看你一次:在你的第二個腳本 你有這樣一行:

#require('dbconnect.php'); 

再試取消註釋這一點,它可能給你帶來更接近了一步你的目標。

P.S.純mysql_*函數已棄用,閱讀php.net文件(或其他問題在這裏)的安全問題有關這些功能。升級您的腳本以使用PDO或mysqli

+0

我嘗試使用require('dbconnect.php'),但它給了我相同的結果。我不太確定我能做什麼。 – mokko211 2013-02-19 11:53:54

+0

你需要'showCases.php'中的'login.php'嗎?你在'login.php'的源代碼片段底部有一個'mysql_close()'調用,這會在'showCases.php'中執行任何代碼之前終止你的db連接。嘗試請求而不需要'login.php' – cypherabe 2013-02-19 13:31:28

+0

我刪除了include('login.php');它工作正常。謝謝 – mokko211 2013-02-19 15:22:45

相關問題