2013-05-08 60 views
0

我從Android數據庫中檢索數據,因此創建瞭如下的PHP文件。PHP未定義索引錯誤在與Android通信

<?php 

$db_host = "localhost"; 
$db_uid = "root"; 
$db_pass = ""; 
$db_name = "abc";   
$db_con = mysql_connect($db_host,$db_uid,$db_pass) or die('could not connect'); 
mysql_select_db($db_name); 
$sql = "SELECT * FROM people WHERE birthyear > '". $_POST["birthyear"]."'"; 
$result = mysql_query($sql); 
while($row=mysql_fetch_assoc($result)) 
    $output[]=$row; 
print(json_encode($output)); 
mysql_close(); 
?> 

現在,當我在瀏覽器爲localhost/script.php的 引發錯誤和輸出顯示如下

通知運行它:用C birthyear::未定義指數\ XAMPP \ htdocs中\ jasonscript.php on line 14 [{「id」:「1」,「name」:「m」,「sex」:「1」,「birthyear」:「1989」},{「id」:「2」 , 「姓名」: 「一」, 「性別」: 「1」, 「birthyear」: 「1986」},{ 「ID」: 「3」, 「名稱」: 「b」, 「性別」: 「0」 ,「birthyear」:「1986」}]

請告訴我如何更正我的代碼。

回答

2
$output[]=array("key"=>$row['field_name'],"key1"=>$row['field_name2']); 

存儲陣列這樣

+0

我很好的輸出。需要知道爲什麼通知:未定義的索引:第14行中的C:\ xampp \ htdocs \ jasonscript.php中的birthyear正在顯示。 – 2013-05-08 10:45:40

1

正在直接插入您的查詢,使你容易受到SQL注入$_POST["birthyear"]。馬上停止吧!

這也是爲什麼你會得到錯誤。當你直接在你的瀏覽器中調用腳本時,這將與一個GET請求,並且不會有任何可用的POST變量。所以你的$_POST陣列將不會有一個密鑰birthyear,因此它會警告你。

你應該這樣開始喜歡

<?php 
$by = isset($_POST["birthyear"]) ? $_POST["birthyear"] : ""; 
if (empty($by)) { 
    echo 'Invalid birthyear'; 
    exit; 
} 

//SANITIZE YOUR BIRTHYEAR HERE 
//in this case, probaly check for a integer between 1900 and 2100 or something. 
//Although just an int could be enough to prevent injection 

if (!is_int($by)) { 
    echo 'You failed to provide a valid year'; 
    exit; 
} 

$sql = "SELECT * FROM people WHERE birthyear > '". $by."'"; 

//execute the code 
?> 

雖然上面的代碼是安全的,你應該檢查出bound parametersmysqli prepared statementsPDO

+0

+1絕對應該進行清理,以避免它們無意中將您的整個數據庫丟出... – o0rebelious0o 2013-05-08 10:46:31

+0

Thnx很多。問題解決了 :) – 2013-05-08 10:54:06

0

你可能未能正確發送的值槽後使用。 嘗試print_r($_POST);,看看你是什麼實際發送

你仍然可以得到所有的結果,因爲每一年都是> ''