【问题标题】:Searching through a database using checkboxes使用复选框搜索数据库
【发布时间】:2016-07-01 02:29:49
【问题描述】:

大家好,我想了解使用复选框搜索数据库的最佳方法是什么。我是新手,正在查看教程等,但似乎找不到任何有帮助的东西。我可以制作一个搜索引擎来搜索我的数据库并返回我需要的内容,但我不知道如何使用复选框来完成它。例如:

我的数据库包含以下内容:

    MovieName: ...
    Gen1: ... 
    Gen2:... 
    Gen3:... 
    Gen4:... 
etc

现在就像我上面所说的,我让它与一个搜索框一起工作,用户可以在其中编写一个简单的阶段,例如动作,它会调出具有动作类型的电影,但我不知道该怎么做带复选框。

HTML:

    <form action = "movie.php" method = "post">
        <input type="checkbox" name = "search" value="action" checked> Kale<br>
        <input type="checkbox" name= "search" value="comdey" checked> orange<br>
        <input type="submit" value="Submit">
    </form> 

    <?php echo("$output");?>

我的数据库名称为 TestHere,表名为 test。完成这件事的任何帮助或任何建议都会很棒,如果您想查看我的搜索功能,我可以发布,但我认为这对复选框的搜索功能没有帮助

【问题讨论】:

  • 您可能需要将复选框的名称更改为 name="search[]" 并将它们视为 PHP 中的复选框数组。
  • @apokryfos 我在想,但我不确定 2 是如何做到的,我可以使用我的其他搜索功能并更改它以使其与复选框一起使用吗?
  • 请注意您对 SQL 注入持开放态度 - 您应该过滤传递给查询的 $variables。
  • 另外,您不应该已经使用mysql_ 函数。是时候继续使用 mysqli 或 PDO。
  • 啊,是的,我知道这一切,但就像我在上面所说的那样,它只适合我,它是一个我想暂时使用旧功能然后使用新功能等的项目,以及比较它们

标签: php mysql checkbox mysqli


【解决方案1】:

正如@apokryfos 所说,您需要执行以下操作:

<input type="checkbox" name="genres[]" value="genre1" />
<input type="checkbox" name="genres[]" value="genre2" />
<input type="checkbox" name="genres[]" value="genre3" />

Then in your PHP

<?php
$str = array();
$fields = array('gen1','gen2','gen3');
foreach ($_POST['genres'] as $genre){
    foreach ($fields as $gen){
        $str[] = "$gen LIKE '%".mysql_real_escape_string($genre).'%"';
    }
}
$str = implode(' OR ',$str);

$query = mysql_query("SELECT * FROM test WHERE movieName LIKE '%$searchq%' $str") or die("Could not search.");
?>

值得一提的是,虽然这应该有效,但 LIKE 并不是最好的搜索,因为它必须查看每个字符串。实际上,如果整个字符串是提供的流派,您应该使用 ='' 这也允许更好的索引。

【讨论】:

  • 我现在要试试这个,感谢您的输入,1 个问题,我的电影都在 div 等中,我希望它们看起来那样,你可以看到我在上面是如何输出的,在这里工作好吗?
  • 这一位出现在您的 DIV 输出区域之前。
  • 所以我会取出while循环等?
  • 不,以上位将替换您现有的 $query 并且输入框继续出现在表单上 - 这将需要对您现有的代码进行一些修改,但我相信这是正确的方向。
  • 非常感谢,现在就试试这个,看看我能做什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-05
  • 2017-10-22
相关资源
最近更新 更多