PHP下拉框选择筛选项目,筛选数据显示

用PHP做了一个患者信息显示的网页,因为需要对患者信息进行筛选显示,比如:已提交和未报告筛选显示,患者不同医院筛选显示。
数据库状况:mysql,里面的dengji表的“标识”字段初始值为2,代表未报告,当提交后则存为0。里面的hospital表的“name”字段存有所有合作医院的名称。
以下是根据百度提供的资料修改,按下面方法,选择列表后页面没变化无响应。

<script language="javascript">
$('select').on('change',function(){
var url = "http://127.0.0.1/listc.php?";
var shaixuan = '&shaixuan='+$("[name='shaixuan']").val();
var shaixuan1 = '&shaixuan1='+$("[name='shaixuan']").val();
url += shaixuan + shaixuan1;
$('form').attr('action',url).submit();
})
</script>

以下是选择框情况的代码:

<td>筛选1:
<select name="shaixuan" id="shaixuan">
<option value=0>--报告状态--</option>
<option value="0" >已提交</option>
<option value="2" >未报告</option>
</select>
</td>
<td>
筛选2:
<select name="shaixuan2" id="shaixuan2">
<option value=0>--医疗机构--</option>
<?php
$sql= "select name from hospital";
$result = mysql_query($sql, $db_conn);
while($row = mysql_fetch_array($result)){
$name = $row['name'];
$template = $row['name'];
echo "<option value='$template' data-name='$name'>$template</option>";
}?>
</td>

以下是数据库的连接代码(因为要做筛选,所以创建了两个筛选变量$condition、$condition2,分别用来筛选不同的报告状态(已提交、未报告)、不同的医院):


$condition = " 'ack'='ack'";//注意,前面有个空格
if(isset($_GET['shaixuan'])){
if($_GET['shaixuan']!='all')
$condition.=" AND shaixuan='".$_GET['shaixuan']."'";}
$condition2 = " 'ack2'='ack2'";//注意,前面有个空格
if(isset($_GET['shaixuan2'])){
if($_GET['shaixuan2']!='all')
$condition2.=" AND shaixuan2='".$_GET['shaixuan2']."'";}

$query_rsdb = "SELECT * FROM dengji where 检查日期='$today' and $condition2";

请问如何修改代码?或用其它更好的方式,谢谢。

引用chatgpt部分指引作答:
根据您提供的代码和描述,您可能需要进行以下几个步骤来实现筛选功能:

1 修改HTML代码
需要将第二个筛选框的名称从“shaixuan2”改为“shaixuan1”,这样才能与JavaScript中的变量名相对应。同时,为了方便使用JavaScript,可以将筛选按钮放到一个表单中,使用GET方法提交数据。

以下是修改后的HTML代码:

<form id="filter-form" action="listc.php" method="GET">
    <td>筛选1:
        <select name="shaixuan" id="shaixuan">
            <option value="0">--报告状态--</option>
            <option value="0">已提交</option>
            <option value="2">未报告</option>
        </select>
    </td>
    <td>筛选2:
        <select name="shaixuan1" id="shaixuan1">
            <option value="0">--医疗机构--</option>
            <?php
            $sql= "SELECT name FROM hospital";
            $result = mysql_query($sql, $db_conn);
            while($row = mysql_fetch_array($result)){
                $name = $row['name'];
                $template = $row['name'];
                echo "<option value='$template' data-name='$name'>$template</option>";
            }?>
        </select>
    </td>
    <td><input type="submit" value="筛选"></td>
</form>

2 修改JavaScript代码
修改JavaScript代码,确保它能够正确获取两个筛选框的值,并将它们作为GET参数传递到“listc.php”页面。以下是修改后的代码:

<script language="javascript">
    $('#filter-form').on('submit',function(event){
        event.preventDefault();
        var url = "http://127.0.0.1/listc.php?";
        var shaixuan = 'shaixuan='+$('#shaixuan').val();
        var shaixuan1 = 'shaixuan1='+$('#shaixuan1').val();
        url += shaixuan + '&' + shaixuan1;
        window.location.href = url;
    });
</script>

在上面的代码中,我们使用jQuery库来处理表单提交事件。首先,我们使用“event.preventDefault()”来防止表单直接提交。然后,我们从两个选择框中获取值,并将它们作为GET参数添加到URL中。最后,我们使用“window.location.href”将页面重定向到新的URL。

3 修改数据库查询代码
最后,我们需要修改“listc.php”页面的代码,以根据筛选条件从数据库中获取符合条件的记录。以下是修改后的代码:

$condition = " 1=1 ";//注意,前面有个空格
if(isset($_GET['shaixuan'])){
    if($_GET['shaixuan']!='0')
        $condition.=" AND 标识='".$_GET['shaixuan']."'";
}
$condition2 = " 1=1 ";//注意,前面有个空格
if(isset($_GET['shaixuan1'])){
    if($_GET['shaixuan1']!='0')
        $condition2.=" AND 医院='".$_GET['shaixuan2'] . "'";
}
}
$query_rsdb = "SELECT * FROM dengji WHERE 检查日期='$today' AND $condition2";

这样,如果用户选择了医院筛选条件,$condition2变量会被更新并添加上"AND 医院='所选医院'"的筛选条件,从而在查询时只显示符合条件的记录。

需要注意的是,这里的医院名称是根据用户选择的下拉列表项的value属性进行筛选的,因此需要确保下拉列表中每个选项的value属性值与数据库中存储的医院名称完全一致,否则会出现匹配不到任何记录的情况。另外,您也需要确保在数据库中存在匹配的记录才能正确显示结果。

首先,从你提供的代码来看,有一些问题需要修复。请按照以下步骤进行修改:

  1. 在JavaScript中,将shaixuan1变量的$("[name='shaixuan']").val()改为$("[name='shaixuan2']").val(),这是因为我们需要获取第二个筛选条件的值。
$('select').on('change',function(){
  var url = "http://127.0.0.1/listc.php?";
  var shaixuan = '&shaixuan='+$("[name='shaixuan']").val();
  var shaixuan2 = '&shaixuan2='+$("[name='shaixuan2']").val();
  url += shaixuan + shaixuan2;
  $('form').attr('action',url).submit();
})
  1. 确保PHP连接到数据库的代码正确:
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_dbname";

$db_conn = new mysqli($servername, $username, $password, $dbname);

if ($db_conn->connect_error) {
  die("连接失败: " . $db_conn->connect_error);
}
  1. 修改筛选条件的代码,将$condition$condition2的初始值设置为空字符串,然后根据$_GET变量的值来设置筛选条件:
$condition = "";
if (isset($_GET['shaixuan'])) {
  if ($_GET['shaixuan'] != '0') {
    $condition .= " AND 标识='" . $_GET['shaixuan'] . "'";
  }
}

$condition2 = "";
if (isset($_GET['shaixuan2'])) {
  if ($_GET['shaixuan2'] != '0') {
    $condition2 .= " AND name='" . $_GET['shaixuan2'] . "'";
  }
}
  1. 修改查询语句:
$query_rsdb = "SELECT * FROM dengji WHERE 检查日期='$today' $condition $condition2";

注意:为了避免SQL注入攻击,请务必使用预处理语句和参数化查询。

按照以上修改后,你的代码应该可以正常工作。如果仍然存在问题,请检查你的PHP和JavaScript代码是否有语法错误,或者检查你的数据库连接和查询语句是否正确。

关于一些优化建议

以下是一些建议,可以帮助你优化现有的代码:

  1. 使用jQuery的$(document).ready()确保DOM加载完毕再执行JavaScript代码:
$(document).ready(function() {
  $('select').on('change', function() {
    // ...
  });
});
  1. 使用更现代的PHP MySQL扩展,例如mysqli或者PDO。你当前的代码使用了mysql_querymysql_fetch_array,这些函数已经被废弃。建议使用mysqliPDO进行数据库操作。

例如,使用mysqli

$sql = "SELECT name FROM hospital";
$result = $db_conn->query($sql);

while ($row = $result->fetch_assoc()) {
  // ...
}
  1. 使用预处理语句和参数化查询以防止SQL注入。以下是一个使用mysqli的示例:
if (isset($_GET['shaixuan2'])) {
  if ($_GET['shaixuan2'] != '0') {
    $condition2 .= " AND name=?";
    $param_shaixuan2 = $_GET['shaixuan2'];
  }
}

$query_rsdb = "SELECT * FROM dengji WHERE 检查日期=? $condition $condition2";
$stmt = $db_conn->prepare($query_rsdb);

if (isset($param_shaixuan2)) {
  $stmt->bind_param("ss", $today, $param_shaixuan2);
} else {
  $stmt->bind_param("s", $today);
}

$stmt->execute();
$result = $stmt->get_result();
  1. 为了提高代码可读性和可维护性,可以将PHP、HTML和JavaScript代码分开存放。例如,你可以将JavaScript代码放在一个单独的.js文件中,并在HTML文件中引用它。

  2. 对于HTML代码,建议将属性值用双引号引起来,例如<option value="0">

  3. 使用更具语义化的标签和属性,例如使用<label>标签为选择框添加标签文本。

  4. 如果可能的话,将页面从http更换为https,以提高安全性。

以上建议可以帮助你优化和提高代码的质量。同时,请确保在进行任何更改之前备份现有代码。

如有疑问可以继续提问,若这些回答对你有用,望采纳

保证数据库连接正确的情况下。建议使用alert 输出参数是否可以获取到参数的值,最后输出sql拼接是否正确 。