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


Want to build a search engine which modifies the URL based on clicks

所以搜索引擎应该这样工作:用户点击给定的属性,这些属性被添加到URL中,例如:+3000Mhz。如果另一个类似的属性(例如:2133Mhz)被点击+3000Mhz应该被删除,其他属性应该被添加。

属性是像这样的可点击链接:1600Mhz 2133Mhz 3000Mhz

URL看起来像这样:?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> ";
}
}

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

我希望你清楚我想要完成的是什么。我想我需要一个代码来再次遍历规范,并在第二次回显之前删除当前应用的规范,但是我很难做到这一点。

任何帮助都是感激的,谢谢!

对你来说似乎很明显,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> ";
}