2016-07-24 54 views
2

我正在使用Ajax請求分頁處理一些數據。當其中一個頁碼按鈕被按下時,它將發送一個請求到一個單獨的文件來生成表格中的下一頁。如何通過Ajax請求傳遞查詢

在我的主網頁,我會碰到這樣的:

$query = "Select * from table WHERE field = 'something' LIMIT 5"; 
$result = mysqli_query($con, $query); 
$row = mysqli_fetch_assoc($result); 

// dump results as table 

當我寫劇本,以創建一個新的XMLHTTP請求對象,以我的「paginate.php」的文件,我怎麼能攜帶該查詢到文件,因爲它可能會根據用戶輸入動態更改?

我想通過POST請求傳遞整個查詢字符串作爲函數參數,但我想知道是否有一個更有效的方法來做到這一點。

+0

你爲什麼不只是傳遞參數,並在PHP中,使用mysqli的編制statments? – cpugourou

+1

你絕對不希望以任何方式讓你的問題暴露在JavaScript ... – cpugourou

回答

2

我是通過一個POST請求的思維只是路過整個查詢字符串的函數 參數

絕對做到這一點!這真的是真的糟糕的安全做法讓瀏覽器(即用戶)直接針對您的數據庫運行查詢。在早期我犯了這個錯誤,我的網站很快就沒了。

你的PHP文件應該接受參數,驗證它們,然後用它們來運行查詢

您XHR對象發送:page_number=5

2.你的PHP驗證輸入和動態建立查詢:

//set page to 1 if none was provided. 
$pg = isset($_POST['page_number'])? (int)$_POST['page_number']: 1; 
$pg = max(1,$pg); // lowest allowed pg number is 1 

一旦你有頁碼,並且你確定它是一個整數(不是一些惡毒的SQL逗號第二發送到您的服務器的用戶),您可以在查詢中使用它:

$size = 5; //# of results per page 
$start = ($pg-1) * 5; 
$query = "SELECT * from myTable WHERE field='something' LIMIT $start,$size"; 

注意,如果該字段值something來自用戶,你不希望直接將其包含在查詢(這適用於任何用戶提供的值)。相反,你應該使用準備好的發言參數化查詢

資源:https://www.owasp.org/index.php/SQL_Injection

+0

謝謝你的鏈接和信息!我完全理解你在答案中的意思,但看起來我需要研究準備好的陳述並回到這個問題! –

+0

@TimothyFisher沒問題。快樂的編碼。 – BeetleJuice