使用 PHP/HTML 上的文本区域删除数据库表上的数据

Delete data on database table using text area on PHP/HTML

提问人:Arth Quilitis 提问时间:7/19/2023 最后编辑:ADysonArth Quilitis 更新时间:7/19/2023 访问量:59

问:

我在使用文本区域删除数据库表上的数据时遇到了问题, 我有一个文本区域,将数据插入数据库表 我输入喜欢

A
B
C
D

然后它将在数据库表上的不同列上输入。 现在我有一个新代码,我想在输入

A
B
C
D

在文本区域。 但不会删除。 当我在文本区域输入 A、B、C、D 等格式时,它会删除数据库表上的数据。但我希望它喜欢一种格式

A
B
C
D

这是我删除数据的代码。

<?php
$host = "localhost";
$username = "root";
$password = "";
$db_name = "wip";

$mysqli = new mysqli($host, $username, $password, $db_name);

// Check the connection
if ($mysqli->connect_error) {
    die("Connection failed: " . $mysqli->connect_error);
}

// Get the submitted data
$lines = $_POST['lines'] ?? '';

// Split the lines into an array using newline character
$linesArray = explode("\n", $lines);

// Prepare the SQL statement
$sql = "DELETE FROM wiptest WHERE line1 = ? AND line2 = ? AND line3 = ? AND line4 = ?";

// Prepare and bind the statement
$stmt = $mysqli->prepare($sql);

if (!$stmt) {
    die("Prepare failed: " . $mysqli->error);
}

$stmt->bind_param("ssss", $line1, $line2, $line3, $line4);

foreach ($linesArray as $line) {
    $lineParts = explode(',', $line);
    $line1 = trim($lineParts[0] ?? '');
    $line2 = trim($lineParts[1] ?? '');
    $line3 = trim($lineParts[2] ?? '');
    $line4 = trim($lineParts[3] ?? '');

    echo "Input: $line1, $line2, $line3, $line4<br>"; // Add this line for debugging

    // Execute the statement to delete the data
    if (!$stmt->execute()) {
        die("Execute failed: " . $stmt->error);
    }
}

// Check if any rows were affected
if ($stmt->affected_rows > 0) {
    echo "Data deleted successfully!";
} else {
    echo "No matching data found to delete.";
}

// Close the statement and connection
$stmt->close();
$mysqli->close();

header("Location: maincanonout.php");
exit();
?>

php mysql mysqli

评论

2赞 Cid 7/19/2023
只需用于定义 、 和 而不是$linesArray = explode("\n", $lines);$line1$line2$line3$line4$lineParts = explode(',', $line);
0赞 ADyson 7/19/2023
首先,你做了什么调试?首先检查数据是否以您期望的格式到达 PHP。那么在那之后,输出什么?你没有告诉我们。var_dump($_POST);echo "Input: $line1, $line2, $line3, $line4<br>";
3赞 ADyson 7/19/2023
P.S. 为了使你的代码更健壮(除非你使用的是 PHP 8.1 或更高版本,默认情况下已经启用了它),请在你的 (or ) 命令之前添加,这将确保你的 SQL 查询错误被正确地自动报告给 PHP。这样,您就不需要用重复的代码来混淆脚本,以便在每个 mysqli 命令后继续检查错误。而且,您永远不应该故意回显错误数据 - 它很容易意外地向攻击者泄露敏感信息。mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);mysqli_connect()new mysqli()
0赞 Slava Rozhnev 7/19/2023
你能展示一下表格结构吗?

答:

0赞 Stas Trefilov 7/19/2023 #1

您的代码正在删除由 4 个逗号分隔值标识的行,如下所示:

A,B,C,D
E,F,G,H
I,J,K,L

每个标识符都包含 4 个字符串值,占据一行,如果多行(在我的示例中为 3),则可能具有多个标识符。

现在,如果你想垂直放置你的标识符(但为什么呢?),像这样:

A
B
C
D

...然后,您需要修改代码,如下所示(删除不再需要的语句):foreach

$line1 = trim($linesArray[0] ?? '');
$line2 = trim($linesArray[1] ?? '');
$line3 = trim($linesArray[2] ?? '');
$line4 = trim($linesArray[3] ?? '');
$stmt->execute();