🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
问题描述
以下是我的代码,从上一个页面中点击超链接获取了数据库中的链接信息,转到本页面,从而得到了URL参数 n a m e ,然后我需要在本页面执行查询功能,查询方式是 2 选一,如下代码所示,同时,还要能够事先筛选出含有 name,然后我需要在本页面执行查询功能,查询方式是2选一,如下代码所示,同时,还要能够事先筛选出含有 name,然后我需要在本页面执行查询功能,查询方式是2选一,如下代码所示,同时,还要能够事先筛选出含有name参数数据的m_name字段对应的数据;可是,在执行查询的时候,$name参数始终是处于空值状态,请各位帮我修改一下代码!谢谢!
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
require_once './connections/games.php';
// 从 URL 中获取 name 参数
$name = isset($_GET['name']) ? $_GET['name'] : '';
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link href="./css/styles.css" rel="stylesheet" type="text/css">
<title>成绩查询 | Search</title>
</head>
<body>
<div><a style="font-weight: bolder;font-size: 20px;">成绩查询 | Search</a><a style="color:yellow">【本结果仅供参考,所有成绩以现场播报和张贴公示为准!】</a></div>
<div class="sl">
<form id="sh-form" method="post" action="sh.php">
<label style="font-size: 16px;font-weight:bold;font-color:#FFF;">查询方式:</label>
<select style="height:26px" name="searchType" id="searchType">
<option value="bib">编号</option>
<option value="name">姓名</option>
</select>
<input style="height:20px; border-radius: 3px; border: 1px solid #2b7acd;" type="text" id="searchInput" name="searchInput" placeholder="请输入" required>
<button type="searchButton" id="searchButton">查询</button>
</form>
</div>
<br>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
$(document).ready(function() {
$('#searchButton').click(function(event) {
event.preventDefault(); // 阻止表单的默认提交行为
// 获取用户输入
var searchType = $('#searchType').val();
var searchInput = $('#searchInput').val();
// 验证查询类型
if (!searchType || !searchInput) {
alert('请填写正确的查询方式及对应的信息!');
return;
}
// 发送Ajax请求到服务器
$.ajax({
url: 'sh.php',
type: 'POST',
data: {
searchType: searchType,
searchInput: searchInput
},
success: function(response) {
// 在成功回调中处理服务器返回的数据
$('#main-content').html(response);
},
error: function(xhr, status, error) {
// 处理错误情况
alert('查询失败: ' + error);
}
});
});
});
</script>
<?php
// 处理表单提交
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// 获取用户输入
$searchType = $_POST['searchType'];
$searchInput = $_POST['searchInput'];
// 初始化SQL语句,不带WHERE子句
$sql = "SELECT * FROM m_result";
// 根据查询类型构建SQL语句
$params = []; // 用于存储绑定参数的数组
if ($searchType === 'bib') { // 编号查询
$sql .= " WHERE bib = :searchInput";
$params[':searchInput'] = $searchInput;
} elseif ($searchType === 'name') { // 姓名查询
$sql .= " WHERE `name` = :searchInput";
$params[':searchInput'] = $searchInput;
}
$name = isset($_GET['name']) ? $_GET['name'] : '';
echo "组别".$name;// 这里无法获取到$name参数,所以查询不到数据
// 如果$name变量存在且不为空,则添加额外的筛选条件
if (!empty($name)) {
$sql .= " AND `m_name` = :name";
$params[':name'] = $name;
}
// 如果没有任何查询条件,则不执行查询
if (empty($params)) {
echo "查询无效,请提供有效的查询条件!";
exit;
}
// 准备SQL语句
$stmt = $pdo->prepare($sql);
// 绑定参数并执行查询
foreach ($params as $param => $value) {
$stmt->bindParam($param, $value);
}
try {
$stmt->execute();
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 显示查询结果
if (!empty($results)) {
?>
<div>
<table>
<tr align="center" style="background:#FFF;font-weight: bold;">
<th>排名<br>Rank</th>
<th>编号<br>Bib</th>
<th>姓名<br>Name</th>
</tr >
<?php foreach ($results as $row) { ?>
<tr>
<td><?php echo $row['rank'];?></td>
<td><?php echo $row['bib'];?></td>
<td><?php echo $row['name'];?></td>
</tr>
<?php
}
?>
</table>
<?php
} else {
echo "没有找到匹配的结果!";
}
} catch (\PDOException $e) {
die("查询错误: " . $e->getMessage());
}
}
?>
</body>
</html>
如上问题有来自我自身项目开发,有的收集网站,有的来自读者,如有侵权,立马删除。
解决方案
如下是上述问题的解决方案,仅供参考:
您的代码中存在几个问题,导致无法正确获取和使用URL参数$name
。以下是修改后的代码和解释:
-
您在HTML表单中没有包含用于提交
$name
参数的输入字段。因此,当表单提交时,$name
参数不会被发送到服务器。 -
您在
$_SERVER['REQUEST_METHOD'] === 'POST'
条件判断块之外已经初始化了$name
变量,但在表单提交后再次初始化了相同的变量,这将覆盖之前从GET请求中获取的值。 -
为了解决这些问题,我们需要在HTML表单中添加一个隐藏的输入字段来发送
$name
参数,并确保在表单提交后不要重新初始化$name
变量。
以下是修改后的代码:
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
require_once './connections/games.php';
// 从 URL 中获取 name 参数
$name = isset($_GET['name']) ? $_GET['name'] : '';
// 处理表单提交
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// 获取用户输入
$searchType = $_POST['searchType'];
$searchInput = $_POST['searchInput'];
// 此处不再重新初始化$name变量,因为它已经在文件开头初始化
// $name = isset($_GET['name']) ? $_GET['name'] : '';
// ... 省略其他代码 ...
// 显示查询结果
// ... 省略其他代码 ...
}
// 显示HTML和JavaScript代码
// ... 省略其他代码 ...
?>
<!-- 在HTML表单中添加一个隐藏的输入字段来发送$name参数 -->
<form id="sh-form" method="post" action="sh.php">
<input type="hidden" name="name" value="<?php echo htmlspecialchars($name); ?>">
<!-- 其他表单字段 -->
</form>
这样,当用户从上一个页面点击带有name
参数的链接时,$name
参数将被获取并显示在页面上。当用户提交表单时,$name
参数也会作为隐藏字段被发送,这样您就可以在sh.php
页面中使用它进行查询。
请确保在sh.php
页面的其他部分正确处理和显示$name
参数。
希望能够帮到有需要的你。
PS:如若遇到采纳如下方案还是未解决的同学,希望不要抱怨&&急躁,毕竟影响因素众多,我写出来也是希望能够尽最大努力帮助到同类似问题的小伙伴,即把你未解决或者产生新Bug黏贴在评论区,我们大家一起来努力,一起帮你看看,可以不咯。
若有对当前Bug有与如下提供的方法不一致,有个不情之请,希望你能把你的新思路或新方法分享到评论区,一起学习,目的就是帮助更多所需要的同学,正所谓「赠人玫瑰,手留余香」。
☀️写在最后
ok,以上就是我这期的Bug修复内容啦,如果还想查找更多解决方案,你可以看看我专门收集Bug及提供解决方案的专栏「Bug调优」,都是实战中碰到的Bug,希望对你有所帮助。到此,咱们下期拜拜。
码字不易,如果这篇文章对你有所帮助,帮忙给bugj菌来个一键三连(关注、点赞、收藏) ,您的支持就是我坚持写作分享知识点传播技术的最大动力。
同时也推荐大家关注我的硬核公众号:「猿圈奇妙屋」 ;以第一手学习bug菌的首发干货,不仅能学习更多技术硬货,还可白嫖最新BAT大厂面试真题、4000G Pdf技术书籍、万份简历/PPT模板、技术文章Markdown文档等海量资料,你想要的我都有!
📣关于我
我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云2023年度十佳博主,掘金多年度人气作者Top40,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 20w+;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿。