[英]How to add delete button to each row of php results table
我在stackOverflow上發現了幾個線程,這些線程解決了如何向PHP結果表添加“刪除”按鈕的問題,但是似乎沒有一個線程可以解決我的特定用例。
我有一個從MySql數據庫中提取的PHP結果表。 我已經向表的每一行添加了“刪除”鏈接,但是當我單擊給定行上的“刪除”鏈接時,它將刪除表中的所有行。
我懷疑我沒有正確實現“刪除”鏈接,但是我對PHP不夠熟練,無法弄清楚到底是什么問題。
下面是生成表的代碼。 請注意,在endChildren()函數中回顯了“刪除”鏈接。
<?php
echo "<table style='border: solid 1px black;'>";
echo "<tr><th>Id</th><th>Name</th><th>Number</th><th>Part A</th><th>Part B</th><th>Full Name</th><th>Address</th><th>Apt.</th><th>City</th><th>State</th><th>Zip</th><th>Remove</th></tr>";
class TableRows extends RecursiveIteratorIterator {
function __construct($it) {
parent::__construct($it, self::LEAVES_ONLY);
}
function current() {
return "<td>" . parent::current(). "</td>";
}
function beginChildren() {
echo "<tr>";
}
function endChildren() {
echo "<td><a href='delete.php?id=".$row['id']."'>Delete></a></td>";
echo "</tr>" . "\n";
}
}
$servername = "localhost:3306";
$username = "xxxxxxxxxx";
$password = "xxxxxxxx";
$dbname = "xxxxxxxxx";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT id, Name, Number, PartA, PartB, Full_Name, Address, Apt, City, State, Zip FROM Medicard");
$stmt->execute();
// set the resulting array to associative
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) {
echo $v;
}
}
catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
$conn = null;
echo "</table>";
?>
這是delete.php腳本:
<?php
$servername = "localhost:3306";
$username = "xxxxxxxx";
$password = "xxxxxxxx";
$dbname = "xxxxxxxx";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// sql to delete a record
$sql = "DELETE FROM Medicard WHERE id=id";
// use exec() because no results are returned
$conn->exec($sql);
echo "Record deleted successfully";
}
catch(PDOException $e)
{
echo $sql . "<br>" . $e->getMessage();
}
$conn = null;
?>
當我單擊給定行中的刪除鏈接時,它將刪除表中的所有行。 我不確定這是因為我在其中添加了“刪除”鏈接,還是我的delete.php代碼不正確。
我對PHP和MySql比較陌生。 任何指導將不勝感激。 謝謝。
您刪除其中列所有行id
列相匹配id
-這當然是所有行的情況。
$sql = "DELETE FROM Medicard WHERE id=id";
您需要從GET參數中讀取ID並調整您的查詢:
<?php
$servername = "localhost:3306";
$username = "xxxxxxxx";
$password = "xxxxxxxx";
$dbname = "xxxxxxxx";
$id = $_GET["id"];
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// sql to delete a record
$sql = $conn->prepare("DELETE FROM Medicard WHERE id = ?");
$success = $sql->execute(array($id));
echo $success ? "Record deleted successfully" : "Record not deleted";
}
catch(PDOException $e)
{
echo $e->getMessage();
}
$conn = null;
?>
表生成部分(我通過一個簡單的循環替換了您實現的迭代器)
<?php
echo "<table style='border: solid 1px black;'>";
echo "<tr><th>Id</th><th>Name</th><th>Number</th><th>Part A</th><th>Part B</th><th>Full Name</th><th>Address</th><th>Apt.</th><th>City</th><th>State</th><th>Zip</th><th>Remove</th></tr>";
$servername = "localhost:3306";
$username = "xxxxxxxxxx";
$password = "xxxxxxxx";
$dbname = "xxxxxxxxx";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT id, Name, Number, PartA, PartB, Full_Name, Address, Apt, City, State, Zip FROM Medicard");
$stmt->execute();
// set the resulting array to associative
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
foreach ($stmt->fetchAll() as $row) {
echo "<tr>";
foreach ($row as $val) {
echo "<td>" . $val . "</td>";
}
echo "<td><a href='delete.php?id=".$row['id']."'>Delete></a></td>";
echo "</tr>";
}
}
catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
$conn = null;
echo "</table>";
?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.