因此,我有一个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。
答案 0 :(得分:1)
您需要更新两件事:
<a class='fas fa-check-square' href='update.php?row_id='.$row["id"].'>
现在,如果您检查链接,则每个链接都应该是唯一的:update.php?row_id = 1,update.php?row_id = 2,等等。
$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漏洞。