用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属性值与数据库中存储的医院名称完全一致,否则会出现匹配不到任何记录的情况。另外,您也需要确保在数据库中存在匹配的记录才能正确显示结果。
首先,从你提供的代码来看,有一些问题需要修复。请按照以下步骤进行修改:
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();
})
$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);
}
$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'] . "'";
}
}
$query_rsdb = "SELECT * FROM dengji WHERE 检查日期='$today' $condition $condition2";
注意:为了避免SQL注入攻击,请务必使用预处理语句和参数化查询。
按照以上修改后,你的代码应该可以正常工作。如果仍然存在问题,请检查你的PHP和JavaScript代码是否有语法错误,或者检查你的数据库连接和查询语句是否正确。
关于一些优化建议
以下是一些建议,可以帮助你优化现有的代码:
$(document).ready()
确保DOM加载完毕再执行JavaScript代码:$(document).ready(function() {
$('select').on('change', function() {
// ...
});
});
mysqli
或者PDO
。你当前的代码使用了mysql_query
和mysql_fetch_array
,这些函数已经被废弃。建议使用mysqli
或PDO
进行数据库操作。例如,使用mysqli
:
$sql = "SELECT name FROM hospital";
$result = $db_conn->query($sql);
while ($row = $result->fetch_assoc()) {
// ...
}
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();
为了提高代码可读性和可维护性,可以将PHP、HTML和JavaScript代码分开存放。例如,你可以将JavaScript代码放在一个单独的.js
文件中,并在HTML文件中引用它。
对于HTML代码,建议将属性值用双引号引起来,例如<option value="0">
。
使用更具语义化的标签和属性,例如使用<label>
标签为选择框添加标签文本。
如果可能的话,将页面从http更换为https,以提高安全性。
以上建议可以帮助你优化和提高代码的质量。同时,请确保在进行任何更改之前备份现有代码。
如有疑问可以继续提问,若这些回答对你有用,望采纳
保证数据库连接正确的情况下。建议使用alert 输出参数是否可以获取到参数的值,最后输出sql拼接是否正确 。