Php 使用html按钮在mysql表中设置值

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

我得到了一个带有5个td-s的动态数据表。第一个是ID,第二个是日期,第三个是作者姓名,第四个是一些属性,最后一个是两个按钮。我希望他们更改applications表中$status的值。为此,我制作了2个php文件,其中为每个按钮添加了mysql更新函数。但我不知道为什么当我按下按钮时,它会在php中执行所有操作,除了它不会更改$status的值。请让我知道我哪里错了,我如何才能使它工作。提前谢谢

按钮的html代码(最后一个td):


按钮的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,表单就会发送它。比如说