【问题标题】:PHP MYSQL checkbox searchPHP MYSQL 复选框搜索
【发布时间】:2017-05-15 18:31:55
【问题描述】:

我正在做一个复选框搜索。我是 PHP 新手。如果有人可以帮助我,我将不胜感激。基本上,用户检查所需的选项,点击提交并显示与复选框选项匹配的结果。复选框的值 M 代表男性,F 代表女性,与 MYSQL 表中的数据匹配。

因此,如果用户选中复选框“男性”(请参见下面的代码),则返回 MYSQL 表中具有“男性”值且值为“M”的所有数据。并且任何未选中的复选框都应该被忽略,因为用户只对选项 'Male' 是 'M' (true) 感兴趣。

总而言之,我只需要搜索考虑已检查的复选框并回显已通过 PHP 选择的用户(更像是过滤)。任何帮助表示赞赏。谢谢

表格如下所示:

id      name     address    gender    race
-------------------------------------------

1. 1    Lee      NY          M        French
2. 2    James    LA          M        Colombian
3. 3    Kashi    JAPAN       F        Japanese

我有一个带有这样复选框的表单:

<form action="shortlist.php" method="post">
 <label for="sel1">Gender:</label>
 Male:<input name="keyword[]" type="checkbox" value="M"  />
 Female:<input name="keyword[]" type="checkbox" value="F" />
 <button name = "myBtn" type="submit" class="btn btn-  default">Search</button>
</form>

SQL:

$sql="SELECT name, address,gender,race FROM talent1 WHERE gender = $gender'";

我想回应这样的话:

echo "<table width='100%'>\n";
//if (mysqli_num_rows($result) > 0){
//$row=mysqli_fetch_assoc($result);
//$muchneededid = $row["talent_id"];
     while ($row=mysqli_fetch_assoc($result))   
        echo'<tr>'."\n";
        echo '<tr>';
        echo '<th>Name</th>';
        echo '<th>Address</th>';
        echo '<th>Gender</th>';
        echo '</tr>';
        echo "<td>{$row["name"]}</td>\n" . "<td>{$row["address"]}</td>\n" . "<td>{$row["gender"]}</td>\n";  
        echo '</tr>'."\n";
        echo "</table>\n";
        }
        else
        {
       echo "0 results";
       }
       mysqli_close($conn);
       }

【问题讨论】:

  • 您的 html 中有 no 复选框。你的意思是select-options
  • 但基本上它会像if checkbox 'm' then add to sql "OR GENDER='M' "
  • 对不起,我粘贴了错误的代码。
  • 现在你循环遍历 $_POST['keyword'] - 如果 value=M 添加 "OR GENDER=M" 到 sql
  • 现在显示你的sql,我们可以给出正确的答案

标签: php jquery mysql checkbox


【解决方案1】:

根据我们得到的信息,它会是这样的:

<?php
//$_POST['keyword'] = array("M", "F");
$sql_addon = ''; // EDIT: this was one line below first, which of course created an 'undefined' error.
if(isset($_POST['keyword'])) {

    foreach($_POST['keyword'] as $k => $val) {
         $sql_addon.= " OR gender='$val'";
    }
}
$sql="SELECT name, address,gender,race FROM talent1 WHERE 1=1 ";
if($sql_addon) {
    $sql .= " AND (1=2 ".$sql_addon.")";
}
echo $sql;
// SELECT name, address,gender,race FROM talent1 WHERE 1=1 AND (1=2 OR gender=M OR gender=F)
?>

那些 1=1 和 1=2 可能看起来很傻,但它(恕我直言)是生成该 sql 的最简单方法。 1=2 是为了创建一个虚假值,这样如果没有单击任何选项,则不会显示任何记录。

【讨论】:

  • 太好了,我正在写一篇关于你添加的 1=2 部分的评论。另外我认为您必须将$val 括在单引号中,因为它是字符...
  • 感谢您的回复。我在解决这个未定义变量时有点迷失:第 18 行的 sql_addon SELECT name, address,gender,race FROM Talent1 WHERE 1=1
  • @struppy 你可以将$sql_addon = '';移到if(isset($_POST['keyword'])) {之外(之前),然后将这一行:if($sql_addon) {改为if(!empty($sql_addon)) {
  • @EhsanT 谢谢你解决了这个问题。您能告诉我如何回显获取的结果吗?
  • @struppy 首先如果这个答案解决了你的问题,请accept 它并给它一个赞成票。但是关于您的要求,这实际上取决于您如何编写当前代码。如果您可以编辑您的问题并添加有关您现在如何运行当前查询的相关 php 代码(您使用的是 mysqli 还是 PDO)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-09
  • 2015-05-03
相关资源
最近更新 更多