2013-08-20 272 views
-1

您好香港專業教育學院取得了ABC字符搜索功能

但現在的問題是一個循環,將#不要選擇全部用特殊字符/數字的標題。

<?PHP 
$page_nav = array(); 
$r = 35; 
$rr = chr($r); 
for($i = 97; $i <= 122; ++$i) 
{ 
    $l = chr($i); 
    $page_nav[] = ($l == mysql_real_escape_string($_GET['order'])) ? "<li class='aktiv'>".$l."</li>" : "<li><a href='index.php?s=all-movies&order=".$l."&site=1'>".$l."</a></li>"; 
} 
echo implode(' ', $page_nav); 
echo ($rr == mysql_real_escape_string($_GET['order'])) ? "<li class='aktiv'>".$rr."</li>" : "<li><a href='index.php?s=all-movies&order=".$rr."&site=1'>".$rr."</a></li>"; 
?> 

我的查詢:

$sqlCmdSearch="SELECT id,name,title,countryyear,type,hoster,cover,picturequality,language,rating,date FROM topmovies.movies WHERE status='online' AND type='movie' AND title LIKE '".mysql_real_escape_string($_GET['order'])."%' GROUP BY title ORDER BY title"; 
+0

它,因爲瀏覽器後「#對待一切'作爲URL散列參數,請嘗試'urlencode'。 – bystwn22

回答

1

就像我在我的評論中說的,index.php?s=all-movies&order=#&site=1等於index.php?s=all-movies&order=

嘗試urlencode如果$order#只是從查詢中刪除title LIKE表達
要獲得所有title有特殊字符使用REGEXP表達

this answer

<?php 
    $order = (isset($_GET["order"])) ? strtolower(mysql_real_escape_string(trim($_GET["order"]))) : "#"; 
    $order = (!$order) ? chr(35) : $order; 

    $page_nav = array(); 
    $chars = array_merge(range("a", "z"), array(chr(35))); 

    foreach($chars as $chr) { 
    $page_nav[] = ($chr === $order) ? "<li class='aktiv'>".$chr."</li>" : "<li><a href='index.php?s=all-movies&order=".urlencode($chr)."&site=1'>".$chr."</a></li>"; 
    } 
    echo implode("\n", $page_nav); 

    $sqlCmdSearch = " 
    SELECT `id`, `name`, `title`, `countryyear`, `type`, `hoster`, `cover`, `picturequality`, `language`, `rating`, `date` 
    FROM `topmovies`.`movies` 
    WHERE 
     `status` = 'online' 
     AND 
     `type` = 'movie' 
     AND 
     %s 
    GROUP BY `title` 
    ORDER BY `title` 
    "; 

    if ($order === chr(35)) { 
    // This query will return all rows where title contains any non-alphanumeric characters. 
    $sqlCmdSearch = sprintf($sqlCmdSearch, "NOT `title` REGEXP '[A-Za-z]'"); 
    } 
    else { 
    $sqlCmdSearch = sprintf($sqlCmdSearch, "`title` LIKE '%{$order}%'"); 
    } 

    // now do your db query here 
?> 
+0

很好,非常感謝你,這就是我所需要的。但問題是,如果($ order === chr(35)){sqlCmdSearch = sprintf($ sqlCmdSearch,null); }選擇所有可用的標題,而不僅僅是帶有特殊字符/數字的標題。 – blaman

+0

@ArturLitau看到我更新的答案。 – bystwn22

+0

您確定您的表格包含帶有特殊字符/數字的標題嗎?你能給我看一個樣品嗎? – bystwn22

0

隨着你通過它無法訪問特殊字符的字符的循環方式。這是因爲特殊字符在utf-8表中有更高的數字。前255個與ASCII表完全相同,並且不知道任何特殊字符(例如noö/ä/ ...)
解決方法是您創建一個數組,然後使用所有您想要的字符循環進入它,然後創建一個顯示該數組的foreach。

+0

我做的循環都可以。問題是搜索功能(查詢)。我希望如果URL是... order =#那麼查詢用數字/特殊字符搜索所有標題 – blaman

+0

好的,對不起。我想我錯過了你的問題......。那麼,你想在LIKE表達式中用'#'搜索你的數據庫?我仔細查看了MySQL的文檔,並且找不到在'LIKE'表達式中使用'#'字符的選項。你在哪裏找到這個? – Shimu