如何从html表更新特定的sql行

时间:2019-02-17 19:50:07

标签: php mysql

因此,我有一个HTML表,该表可获取SQL数据并在HTML表中显示数据。我在HTML表中还有一个按钮,女巫要求更新。在这里,我希望用户按下按钮的行将“已付费”列更新为“已付费”。 HTML表的屏幕截图:https://emildeveloping.com/screenshots/outredden-pardonableness-amharic.png

问题是我无法正常工作,因为它只更新特定行,而现在更新所有行。

我曾尝试搜索相同的问题,但没有找到任何解决方案。

这是PHP代码:

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "emildeveloping2";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$sql = "UPDATE purchases SET paid='Paid'";

if ($conn->query($sql) === TRUE) {
    echo "Record updated successfully";
} else {
    echo "Error updating record: " . $conn->error;
}

$conn->close();
?>

这是HTML表格的PHP代码段

            $result = $conn->query($sql);

            if ($result->num_rows > 0) {
                echo "<table id='purchases' class='purchases'><tr class='header'><th>Invoice ID</th><th>Customer ID</th><th>Product</th><th>Name</th><th>Email</th><th>Adress</th><th>Security Number</th><th>City</th><th>Zip Code</th><th>Country</th><th>Cost</th><th>Payment Plan</th><th>Status</th><th>Options</th></tr>";
                // Visa datan
                while($row = $result->fetch_assoc()) {
                    echo "<tr><td>" . $row["id"]. "</td><td>" . $row["customerid"]. "</td><td>" . $row["product"]. "</td><td>" . $row["name"]. "</td><td>" . $row["email"]. "</td><td>" . $row["adress"]. "</td><td>" . $row["securitynumber"]. "</td><td>" . $row["city"]. "</td><td>" . $row["zipcode"]. "</td><td>" . $row["country"]. "</td><td>" . $row["cost"]. "</td><td>" . $row["paymentplan"]. "</td><td>" . $row["paid"]. "</td><td><a class='fas fa-check-square' href='update.php'></a></td></tr>";
                }
                echo "</table>";
            } else {
                echo "There is no active calls.";
            }

我只想更新特定的行,其中id = id。

1 个答案:

答案 0 :(得分:1)

您需要更新两件事:

  1. 在链接中将要更新的行的id作为GET参数添加,以便传递给PHP脚本:
<a class='fas fa-check-square' href='update.php?row_id='.$row["id"].'>

现在,如果您检查链接,则每个链接都应该是唯一的:update.php?row_id = 1,update.php?row_id = 2,等等。

  1. 在PHP脚本中处理此添加的url参数,以便用于选择所需的 数据库表中的行:
$sql = "UPDATE purchases SET paid='Paid' WHERE id=".$_GET['row_id'];

如果您可以使用http://php.net/manual/en/mysqli.prepare.php的prepare方法而不是查询,那么您的代码不容易出现sql injecton。 像这样:

$mysqli->prepare("UPDATE purchases SET paid='Paid' WHERE id=?")) {
$stmt->bind_param("i", $_GET['row_id']);
$stmt->execute();

另一件事是使用POST请求而不是GET链接来防止CSRF漏洞。