我正在开发一个HTML网站。我正在使用MySQL数据库和PHP。
到目前为止,这个概念相当简单:
用户可以通过点击添加按钮在网站上添加一些文字 - 用户会被定向到带有对话框的页面
当他点击提交时,该文本位于数据库中。
PHP代码知道:虽然数据库有条目 - >将文本回显到HTML网站上(我添加了一个while循环)
现在我的下一步是让用户删除文本。我在HTML网站上添加了垃圾桶glyphicon。当用户单击它时,我希望删除表中的当前行。很遗憾没有任何事
以下是代码:
<?php
$query = " SELECT * FROM Thesis";
$sql = mysqli_query($conn, $query);
$count = mysqli_num_rows($sql);
while ($row = mysqli_fetch_array($sql)){
?>
<div class="box green-box">
<p><div class="center-box-content">
<!--echo the title -->
<?php echo $row["title"]; ?>
<br>
<!--echo the description -->
<?php echo $row["description"]; ?>
</p>
<div class="lower-right-box-content">
<a href="adminview.php">
<span class="glyphicon glyphicon-trash glyphicon-trash" role="button">
<?php
$delquery = " DELETE * FROM Thesis";
mysqli_query($conn, $delquery);
?>
</span>
</a>
</div>
</div>
</div>
<?php };
?>
我做错了什么?我知道主要的错误必须在某处 在$ delquery中。但我迷路了。 我也知道每行都有一个ID会更好。但是我想避免它,因为因为我们处于while循环中,所以必须有一种方法来删除while循环所在的当前行,对吧?那将是我的首选解决方案。
最后,我对编程很新,而不是最优雅的程序员,请善待:)
答案 0 :(得分:0)
警告:小心SQL注入!!
现在,回到问题所在。 首先,每次插入行时都会运行删除SQL代码,因此您永远不会有行。第一步是删除
<?php
$delquery = " DELETE * FROM Thesis";
mysqli_query($conn, $delquery);
?>
接下来,如果用户点击垃圾桶图标,您希望删除某一行。为此,您可以通过<a>
或$.ajax
将行ID传递到PHP页面,然后从该PHP页面中删除它。但是,要小心SQL注入
所以你需要在你的主页上:
<a href="deleteRow.php?id=<? echo $row['id'] ?>">[delete icon]</a>
在deleteRow.php
:
$id=$_GET['id'];
//anti-injection code
mysqli_query($conn,"DELETE FROM Thesis WHERE id='$id'");
答案 1 :(得分:0)
<a href="adminview.php">
<span class="glyphicon glyphicon-trash glyphicon-trash" role="button">
<?php
$delquery = " DELETE * FROM Thesis";
mysqli_query($conn, $delquery);
?>
</span>
</a>
在上面的代码中,您删除了所有行。这是错的。你应该做的是:
<a href="adminview.php?id=<?php echo $row["id"];?>">
<span class="glyphicon glyphicon-trash glyphicon-trash" role="button"></span>
</a>
adminview.php中的
if(isset($_REQUEST['id'])) {
$delquery = " DELETE FROM Thesis WHERE id= '".$_REQUEST['id']."' ";
mysqli_query($conn, $delquery);
}
答案 2 :(得分:0)
您将需要一个简单的ID用于您的论文表,如下所示:
CREATE TABLE `Thesis` (
`thesis_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`description` varchar(255) NOT NULL,
PRIMARY KEY (`thesis_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
我会将PHP与显示代码分开,将PHP代码放在文件的顶部。为了安全性和更好的代码,我将使用绑定变量与PDO(而不是mysqli)。但是坚持使用原始代码,我会像这样重写它:
<?php
// Establish the connection
$sql = mysqli_query($conn, $query);
// Delete a specific element
if (isset($_GET['delete_id']) && $_GET['delete_id'] > 0) {
$query = "DELETE FROM Thesis WHERE thesis_id = " . $_GET['delete_id'];
mysqli_query($conn, $query);
}
// Gather all the rows
$query = "SELECT * FROM Thesis";
$count = mysqli_num_rows($sql);
$rows = [];
while ($row = mysqli_fetch_array($sql)){
$rows[] = $row;
}
?>
<?php foreach ($rows as $row): ?>
<div class="box green-box">
<p><div class="center-box-content">
<!--echo the title -->
<?= $row["title"] ?>
<br>
<!--echo the description -->
<?= $row["description"] ?>
</p>
<div class="lower-right-box-content">
<a href="adminview.php?delete=<?= $row['thesis_id'] ?>">
<span class="glyphicon glyphicon-trash glyphicon-trash" role="button"></span>
</a>
</div>
</div>
</div>
<?php endforeach; ?>
上面的foreach
调用是一种常见的PHP快捷方式,<?=
标记会回显一些内容而无需调用echo
。建议不要使用GET调用删除元素,但为了简单起见,我将其保留到位。