Php 使用html按钮在mysql表中设置值
我得到了一个带有5个td-s的动态数据表。第一个是ID,第二个是日期,第三个是作者姓名,第四个是一些属性,最后一个是两个按钮。我希望他们更改applications表中$status的值。为此,我制作了2个php文件,其中为每个按钮添加了mysql更新函数。但我不知道为什么当我按下按钮时,它会在php中执行所有操作,除了它不会更改$status的值。请让我知道我哪里错了,我如何才能使它工作。提前谢谢 按钮的html代码(最后一个td):Php 使用html按钮在mysql表中设置值,php,mysql,html,Php,Mysql,Html,我得到了一个带有5个td-s的动态数据表。第一个是ID,第二个是日期,第三个是作者姓名,第四个是一些属性,最后一个是两个按钮。我希望他们更改applications表中$status的值。为此,我制作了2个php文件,其中为每个按钮添加了mysql更新函数。但我不知道为什么当我按下按钮时,它会在php中执行所有操作,除了它不会更改$status的值。请让我知道我哪里错了,我如何才能使它工作。提前谢谢 按钮的html代码(最后一个td): 按钮的PHP代码-status1.PHP(status
按钮的PHP代码-status1.PHP(status2.PHP是相同的,但它将$status值改为2而不是1)
您正在使用$\u GET['id']
作为标识符,但据我在代码中看到的,除了提交按钮本身,您实际上没有发送任何GET信息。因此,您的查询当前实际上正在更新行,其中id='
。这就是为什么你没有得到错误,但你也没有得到你想要的结果
将表单的操作参数更改为status1.php?id=$id
,或者在表单中添加类似
的内容 您正在使用$\u GET['id']
作为标识符,但据我在代码中看到的,除了提交按钮本身,您实际上没有发送任何GET信息。因此,您的查询当前实际上正在更新行,其中id='
。这就是为什么你没有得到错误,但你也没有得到你想要的结果
将表单的操作参数更改为status1.php?id=$id
,或者在表单中添加类似
的内容 使用此标签代替您的表单标签
表格一
<from method="get" action="status1.php">
<input type="hidden" name="id" value="1"/>
<input type="submit" name="approve" value=" + "/>
</form>
表格二
<from method="get" action="status2.php">
<input type="hidden" name="id" value="2"/>
<input type="submit" name="refuse" value=" - "/>
</form>
使用此标签代替您的表单标签
表格一
<from method="get" action="status1.php">
<input type="hidden" name="id" value="1"/>
<input type="submit" name="approve" value=" + "/>
</form>
表格二
<from method="get" action="status2.php">
<input type="hidden" name="id" value="2"/>
<input type="submit" name="refuse" value=" - "/>
</form>
好吧,你有什么错误吗?注释掉标题(“location:applications.php”);这样你就可以看到它是否抛出任何错误。还可以尝试添加echo$qry之类的内容,以便直观地验证查询是否正确
此外,您还应该了解SQL注入以及如何防范它。像这样直接将用户输入粘贴到查询中可能会打开肮脏之门。此外,您没有检查用户输入中是否有可能打断查询的撇号。我个人使用PDO,这使它更容易和更安全
另一个建议是,不必维护两个单独的提交PHP文件,只需按如下方式放置两个提交按钮:
<input type="submit" name="status" value=" + ">
<input type="submit" name="status" value=" - ">
$pdo = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_DATABASE, DB_USER, DB_PASSWORD);
$sql = $pdo->prepare("UPDATE applications SET status=? WHERE id=?");
$sql->execute(array($status, $_GET["id"]));
如果您安装了PDO,您将按照以下方式执行DB更新:
<input type="submit" name="status" value=" + ">
<input type="submit" name="status" value=" - ">
$pdo = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_DATABASE, DB_USER, DB_PASSWORD);
$sql = $pdo->prepare("UPDATE applications SET status=? WHERE id=?");
$sql->execute(array($status, $_GET["id"]));
…这比你现在做的要安全一点
免责声明:我只是一个PHP程序员爱好者,所以可能有比我之前提到的更好的方法:)好吧,你有什么错误吗?注释掉标题(“location:applications.php”);这样你就可以看到它是否抛出任何错误。还可以尝试添加echo$qry之类的内容,以便直观地验证查询是否正确
此外,您还应该了解SQL注入以及如何防范它。像这样直接将用户输入粘贴到查询中可能会打开肮脏之门。此外,您没有检查用户输入中是否有可能打断查询的撇号。我个人使用PDO,这使它更容易和更安全
另一个建议是,不必维护两个单独的提交PHP文件,只需按如下方式放置两个提交按钮:
<input type="submit" name="status" value=" + ">
<input type="submit" name="status" value=" - ">
$pdo = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_DATABASE, DB_USER, DB_PASSWORD);
$sql = $pdo->prepare("UPDATE applications SET status=? WHERE id=?");
$sql->execute(array($status, $_GET["id"]));
如果您安装了PDO,您将按照以下方式执行DB更新:
<input type="submit" name="status" value=" + ">
<input type="submit" name="status" value=" - ">
$pdo = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_DATABASE, DB_USER, DB_PASSWORD);
$sql = $pdo->prepare("UPDATE applications SET status=? WHERE id=?");
$sql->execute(array($status, $_GET["id"]));
…这比你现在做的要安全一点
免责声明:我只是一个PHP程序员爱好者,所以可能有比我提到的更好的方法:)您将$id定义为$id=$\u GET['id']代码>-是否将id
作为变量传递到表单中?似乎不是。此外,您的表单还可以接受SQL注入-您应该使用PDO
或mysqli.*
来代替代码>-是否将id
作为变量传递到表单中?似乎不是。另外,你的表单可以接受SQL注入-你应该考虑使用PDO
或mysqli.*
来代替。除了,你知道,除了,你知道,PS,对于每个提到他没有ID的人,他在他的帖子中说他有几个TDs和这些数据,他只是出于某种原因没有在示例中说明这一点;唯一将被传递的东西将是在该表单中定义的输入,并且由于那里没有定义id
,它将不会被传递。啊,我没有领会到这一点。我想在回答问题之前我需要更多的敏锐度;)PS,对于每个提到他没有ID的人,他在他的帖子中说他有几个TDs和这些数据,只是出于某种原因,他没有在示例中说明这一点。在他的示例中,他以自己的形式包装每个提交按钮;唯一将被传递的东西将是在该表单中定义的输入,并且由于那里没有定义id
,它将不会被传递。啊,我没有领会到这一点。我想在回答问题之前我需要更多的敏锐度;)我不知道在生成概览表的脚本中ID存储在哪里。我只是在我的建议中把它命名为$id。只要用该行的实际id替换$id,表单就会发送它。例如:echo'代码>这将把id发送到您的$\u GET['id']。但在这种情况下,您也可以将其设置为常规链接:
,并根据需要将其设置为带有css的按钮。我不知道在生成概览表的脚本中ID存储在哪里。我只是在我的建议中把它命名为$id。只要用该行的实际id替换$id,表单就会发送它。比如说