[英]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.