gpt4 book ai didi

php - 根据使用 php 检查的复选框从数据库中删除多行

转载 作者:行者123 更新时间:2023-11-30 00:18:06 25 4
gpt4 key购买 nike

我需要编写一段代码,让用户取消订阅他们订阅的各种警报。我想通过在登录后维护 session 并检查他们的用户 ID 来实现这一点。我编写了以下代码:

<?php
session_start();
$con = mysql_connect("localhost", "root", "hgd");
echo "<html><body>";

if (!$con)
{
die("could not connect" . mysql . error());
}

mysql_select_db("Project", $con);

if (isset($_SESSION['userid']) || isset($_SESSION['username']))
{
echo "Unsubscribe for alerts on:" . "<br/>";
$userid = $_SESSION['userid'];
$query = "select * from BOOK_ALERTS where Userid='$userid'";
$result = mysql_query($query, $con);
echo "<form method='post' action=''>";
while ($row = mysql_fetch_array($result))
{
$isbn = $row[1];
$datapoint = $row[2];
$type = $row[4];
$value = $row[3];
$time = $row[7];
$str = "A book with ISBN:" . $isbn . " whose " . $datapoint . "'s " . $type . " " . $value;
echo "<br/><input type='checkbox' name='checkbox[]' value='" . $str . "'/>$str<br />";
}

echo "<input type='submit' name='submit' value='UNSUBSCRIBE'>";
echo "</form>";
if (isset($_POST['submit']))
{
if (isset($_POST['checkbox']))
{
$delquery = "delete from BOOK_ALERTS where Isbn='$isbn' AND Datapoint='$datapoint' AND Alert_type='$type' AND Datapoint_value='$value'";
$delresult = mysql_query($delquery, $con);
if (!$delresult)
{
echo "Deleting record failed: (" . $con->errno . ") " . $con->error;
}
else
{
echo "Unsubscribed the alert for " . $str;
}
}
}
else
{
echo "<br />";
echo "already logged in";
header("Location:./abc.php");
}

echo "</body></html>";
?>

无论选中哪个复选框,上面的代码都只删除最后一行,因为删除查询会删除最后更新时采用变量值的那一行。我不知道还有其他方法可以编写此代码。有人可以帮忙吗?

最佳答案

考虑使用 id 复选框的值部分,而不是用户可读的字符串(或者如果不可用,则可能是 ISBN)。值不会向用户显示,但在处理输入时,所有选中的复选框(具有相同名称标签)的值将最终出现在数组中,例如:

如果row[0]是您的ID:

echo "<br/><input type='checkbox' name='checkbox[]' value='" . $row[0] . "'/>$str<br />";

此外,现在您不会评估用户检查的内容,而是使用您显示删除的最后一个$value

if (isset($_POST['checkbox']) && is_array($_POST['checkbox']))
foreach ( $_POST['checkbox'] as $checked_id )
{
// $delquery = "select * from BOOK_ALERTS where Isbn='$isbn' AND Datapoint='$datapoint' AND Alert_type='$type' AND Datapoint_value='$value'";
$delquery = "DELETE FROM BOOK_ALERTS WHERE id=".mysql_real_escape_string($checked_id);
$delresult = mysql_query($delquery, $con);
if (!$delresult)
{
echo "Deleting record failed: (" . $con->errno . ") " . $con->error;
}
else
{
echo "Unsubscribed the alert with id " . intval($checked_id); // Also this is not really nice showing a number to your user, you might wanna modify it later, but I really don't wanna throw too much at you at once
}
}

这会循环遍历每个选中的复选框(之前检查它实际上是一个数组)。

您之前也没有使用 DELETE 语句,而是使用 SELECT,该语句仅检索数据但不删除数据。

如您所见,这依赖于每个记录的单个 ID,我只能在您的情况下推荐它。

此外,您需要在将数据插入数据库之前对其进行转义(就像我在这里所做的那样),请在 google 上搜索sql 注入(inject)以获取更多信息。

编辑:此代码会删除每条已检查的记录,如果您需要其他方式,则必须进行切换。

关于php - 根据使用 php 检查的复选框从数据库中删除多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23489187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com