2011-07-25 51 views
1
我有我的腳本分頁即進行分頁基於搜索詞的結果

,但我想出了一個小問題。問題的分頁不返回所有條目當搜索項非拉丁串

當搜索詞就像是筆記本的英文字符串它的偉大工程。

當單詞不是英語,(希臘),即使它輸出找到的匹配正確的數字,它顯示我只能用10個結果的第一頁。當我點擊第2頁或下一頁時,它會再次顯示正確的匹配數量,但不會顯示任何匹配。如果我從第2頁到第1頁單擊,則會再次顯示第一頁的結果。 因此,通常只有第一個(登陸)頁面才起作用。

我已經編輯以得到一個非拉丁字符串項測試之前的代碼,並做了同樣的「錯誤」的事情。 這是本教程的網址http://papermashup.com/easy-php-pagination/

謝謝您的時間和回覆。

+0

'mysql_escape_string'已被棄用。使用'mysql_real_escape_string' – cwallenpoole

+0

嘗試它沒有運氣 – EnexoOnoma

+0

它不會解決你的問題,它只是更安全。 – cwallenpoole

回答

0

首先,你可以捕獲一個SQL注入攻擊與沒有轉義的輸入。然後,我認爲您的搜索字詞可能會中斷SQL查詢。嘗試使用mysql_real_escape_string

$all = mysql_real_escape_string(implode(" +",$words)); 

的頁面可能只是數字,然後它的安全做到:

$page = (int) $_GET['page']; 

沒有逃脫字符串。

然後也是最重要的:查詢計數和查詢數據必須具有相同的聯接和WHERE參數。如果您在一個表格中搜索匹配,則可以獲得100行。然後你試圖加入另一個表格,在那裏只找到10行。數據只有10行,頁面只有100行。

$query = "SELECT COUNT(some_id_column) as num FROM products JOIN shops 
ON products.shopid = shops.id WHERE MATCH (name) AGAINST ('+" . $all . "' IN BOOLEAN MODE)"; 

而你並不需要包括AND products.shopid = shops.id你的WHERE子句,如果你已經擁有了它在HAVING子句。

然後,你的第一個查詢的結果是不指望PAGES,它中的行數。如果您想在頁面上顯示10行,那麼您的總頁數將爲ceiling($total_pages/10)

+0

如果您在mySQL控制檯/ phpMyAdmin/etc中執行此查詢,會發生什麼情況? – WASD42

+0

再次查看您的代碼後,我真的很難過......我會編輯我的答案。 – WASD42

+0

嘿,我發現我的錯誤。這是愚蠢的,而不是編程。返回的結果更多地來自實際結果,因爲在第二個查詢中,我限制了結果'products.shopid = shops.id'謝謝你給我提供線索。 – EnexoOnoma

相關問題