想要构建一个基于点击来修改URL的搜索引擎

时间:2015-08-13 09:36:19

标签: php url

所以搜索引擎应该如下工作:用户点击给定的属性,并将这些属性添加到URL,例如:+ 3000Mhz。如果单击其他类似属性(例如:2133Mhz),则应删除+ 3000Mhz,并添加其他属性。

属性是可点击的链接,如下所示:1600Mhz 2133Mhz 3000Mhz

网址如下所示:?query=2x4gb+DDR3+2133Mhz

现在,至于我迄今为止构建的代码:

$actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$var = 1;
$resSP=mysql_query("select * from specifications where categoryid='15' order by specificationorder asc ");
while($rowSP=mysql_fetch_array($resSP))
{

//search for the specification
$prefix="+".$rowSP['specificationname'];
//delete the specification found
$next_link = str_replace($prefix, "", $actual_link, $var);


//if the specification is found in the URL
if (strpos($actual_link,$rowSP['specificationname']) !== false) {
//echo the current URL without the specification
    echo "<a href=\"".$next_link." \">".$rowSP['specificationname']."</a> ";
} else {
//or echo current URL without the currently applied specification and add another one   
    echo "<a href=\"".$next_link."+".$rowSP['specificationname']."\" \">".$rowSP['specificationname']."</a> ";
}
}

我遇到的问题是,只有当可点击链接的规范匹配时,第一个echo才能用作删除规范的方法。 第二个回声没有删除任何内容,只添加了另一个规范,但这样URL就会被破坏(example: ?query=2x4gb+DDR3+2133Mhz+3000Mhz),因此不会产生任何结果。

我希望很清楚我正在努力实现的目标。我想我需要一个循环遍历规范的代码,并在第二个回声发生之前删除当前应用的规范,但我很难用它。

感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

对你来说很明显,2133Mhz和3000Mhz具有相同的规格类型,但服务器不知道这一点。

恕我直言,最简洁的方法是为单独的规范类型使用单独的查询字段:?ramsize=2x4gb&cpufreq=3000MHz

当然,您需要在数据库中使用 specificationtype 字段。

$link = "http://$_SERVER[HTTP_HOST]$_SERVER[SCRIPT_NAME]";

$resSP=mysql_query("select * from specifications where categoryid='15' order by specificationorder asc ");
while($rowSP=mysql_fetch_array($resSP)) 
{
    $query = $_GET;

    //if the specification is found in the URL
    if(array_key_exists($rowSP['specificationtype'], $query) && 
        $query[$rowSP['specificationtype']] == $rowSP['specificationname']) {
        unset($query[$rowSP['specificationtype']]);
    } else {
        $query[$rowSP['specificationtype']] = $rowSP['specificationname'];
    }

    $next_link = $link;
    if(count($query)) {
        $next_link .= '?' . http_build_query($query);
    }

    echo "<a href=\"".$next_link." \">".$rowSP['specificationname']."</a> ";
}