过滤MySQL表搜索

时间:2013-12-08 06:33:16

标签: php mysql

我正在尝试设置一个PHP MySQL搜索脚本,它允许我打印我的会员资格MySQL数据库表的内容,然后使用不同的标准过滤结果。

我的MySQL表中使用了以下字段:

committee_id 秩 姓 名字 性别 地址 电子邮件 电话号码 active_status

我想要2种方法来过滤数据: 1)使用具有所有可用等级的下拉列表,我可以按成员的等级过滤结果。 2)使用具有所有可用active_status的下拉列表,您可以仅按活动状态过滤结果。

我已经成功设置了我的搜索表单,并打印了所有MySQL表内容,只有按位置部分搜索过滤我的结果,而不是active_status,过滤器部分是一个挑战。这是我的html表和搜索脚本:

   <?php include("./includes/connnect.php");?>
   <!DOCTYPE HTML>
   <html>
   <body>
   <table>
        <thead>
          <tr>
            <td>ID</td>
            <td>position</td>
            <td>Last Name</td>
            <td>First Name</td>
            <td>Sex</td>
            <td>Address</td>
            <td><strong>Email</td>
            <td><strong>Phone Number</td>
            <td>Status</td>
          </tr>
        </thead>
        <tbody>
            <?php               
            if ($_REQUEST["position"]<>'') {
                $search_position = " AND position='".mysql_real_escape_string($_REQUEST["position"])."'";   
            }
            if ($_REQUEST["status"]<>'') {
                $search_status = " AND status='".mysql_real_escape_string($_REQUEST["status"])."'"; 
            }
             else {
                $sql = "SELECT * FROM ".$SETTINGS["data_table"]." WHERE committee_id>0".$search_position.$search_status;
            }

            $sql_result = mysql_query ($sql, $connection ) or die ('request "Could not execute SQL query" '.$sql);
            if (mysql_num_rows($sql_result)>0) {
                while ($row = mysql_fetch_assoc($sql_result)) {
            ?>
              <tr>
                <td><?php echo $row["committee_id"]; ?></td>
                <td><?php echo $row["rank"]; ?></td>
                <td><?php echo $row["last_name"]; ?></td>
                <td><?php echo $row["first_name"]; ?></td>
                <td><?php echo $row["sex"]; ?></td>
                <td><?php echo $row["address"]; ?></td>
                <td><?php echo $row["email"]; ?></td>
                <td><?php echo $row["phone_number"]; ?></td>
                <td><?php echo $row["active_status"]; ?></td>
              </tr>
            <?php
                }
            } else {
            ?>
            <tr><td colspan="5">No results found.</td>
            <?php   
            }
            ?>
        </tbody>
    </table>
</body>
</html>

我希望有任何建议来实现这一目标。

感谢。

2 个答案:

答案 0 :(得分:1)

这是因为当有$_REQUEST["status"]时,在将其放在else语句中时未设置变量SQL

if ($_REQUEST["status"]<>'') {
            $search_status = " AND status='" . 
                           mysql_real_escape_string($_REQUEST["status"])."'"; 
        }
         else { /// this is your problem

            $sql = "SELECT * FROM ".$SETTINGS["data_table"]." 
                     WHERE committee_id>0".$search_position . $search_status;
        }

将$ sql从else中取出并取出其他内容。

答案 1 :(得分:0)

谢谢Jorge你的解决方案有效。但是我用这些elseif语句得到了相同的结果:

if ($_REQUEST["position"]<>'') {
                $search_position = " AND position='".mysql_real_escape_string($_REQUEST["position"])."'";   
            }
            if ($_REQUEST["status"]<>'') {
                $search_status = " AND status='".mysql_real_escape_string($_REQUEST["status"])."'"; 
            }
            if ($_REQUEST["position"]<>'' and $_REQUEST["status"]<>'') {
                $sql = "SELECT * FROM ".$SETTINGS["data_table"]." 
                    WHERE position = '".mysql_real_escape_string($_REQUEST["position"])."' 
                    AND status = '".mysql_real_escape_string($_REQUEST["status"])."'";
            }else if ($_REQUEST["position"]<>'') {
                $sql = "SELECT * FROM ".$SETTINGS["data_table"]." WHERE position = '".mysql_real_escape_string($_REQUEST["position"])."'".$search_city;
            }else if ($_REQUEST["status"]<>'') {
                $sql = "SELECT * FROM ".$SETTINGS["data_table"]." WHERE status = '".mysql_real_escape_string($_REQUEST["status"])."'".$search_position; 
            }else {
                $sql = "SELECT * FROM ".$SETTINGS["data_table"]." WHERE committee_id>0".$search_position.$search_status;
            }

我必须按照建议将它们转换为mysqli或pdo。