2013-08-20 225 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