You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取URL参数并解决数据库提案更新不匹配问题?

解决思路与代码修正

首先,你的核心问题出在validacao.php没有正确获取URL中的nproposta参数,反而直接查询了propostas表的第一条记录,所以不管你点击哪个提案的验证按钮,最终都会用第一条数据的编号去更新。另外还有一个严重问题:你的UPDATE语句没有加WHERE条件,会把所有提案的状态都改成Validado,这绝对不是你想要的结果。

下面是具体的修正步骤:

1. 正确获取URL中的nproposta参数

在validacao.php中,你需要通过$_GET超全局变量来获取URL里的nproposta值,同时做基本的校验确保参数存在且是数字:

// 先检查URL中是否存在nproposta参数,并且是有效的数字
if (!isset($_GET['nproposta']) || !is_numeric($_GET['nproposta'])) {
    die("无效的提案编号");
}
// 转成整数类型,避免注入风险
$nproposta = intval($_GET['nproposta']);

2. 修改数据操作语句,添加WHERE条件

接下来,你需要给INSERT和UPDATE语句加上nproposta的匹配条件,确保只操作目标提案:

// 插入验证记录时,使用获取到的nproposta
$insertValidacao = "INSERT INTO validacao (nproposta, nome_validacao, nif_validacao, email_validacao, preco_validacao) 
                    VALUES ($nproposta, '$nome_validacao', '$nif_validacao', '$email_validacao', '$preco_validacao')";

// 更新提案状态时,必须加WHERE条件,只更新指定nproposta的记录
$updateEstado = "UPDATE propostas SET validacao='Validado' WHERE nproposta = $nproposta";

// 执行语句(注意:这里先确保$nome_validacao等变量已经正确获取自表单提交)
$resultado = mysqli_query($ligaBD, $insertValidacao);
$resultado = mysqli_query($ligaBD, $updateEstado);

3. 重要安全提示(即使是测试环境)

你的当前代码存在严重的SQL注入风险,直接把用户输入的变量拼接到SQL语句里非常危险。哪怕是测试环境,也建议使用预处理语句来避免这个问题,示例如下:

// 预处理INSERT语句
$insertStmt = mysqli_prepare($ligaBD, "INSERT INTO validacao (nproposta, nome_validacao, nif_validacao, email_validacao, preco_validacao) 
                                       VALUES (?, ?, ?, ?, ?)");
mysqli_stmt_bind_param($insertStmt, "issss", $nproposta, $nome_validacao, $nif_validacao, $email_validacao, $preco_validacao);
mysqli_stmt_execute($insertStmt);

// 预处理UPDATE语句
$updateStmt = mysqli_prepare($ligaBD, "UPDATE propostas SET validacao='Validado' WHERE nproposta = ?");
mysqli_stmt_bind_param($updateStmt, "i", $nproposta);
mysqli_stmt_execute($updateStmt);

这样修改后,当你点击编号91的提案验证按钮时,validacao.php会正确获取到nproposta=91,然后只更新编号为91的提案记录,不会再影响其他提案了。

内容的提问来源于stack exchange,提问作者Pedro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:28:14