我正在尝试通过ID删除数据库中的记录。代码可以正常工作,但问题是URL出现在URL中,据我所知,这是不安全的。
网址:“http://localhost/Project/includes/delete.php?id=27”
我使用预准备语句来删除记录,但问题来自按钮。是否有任何其他方法可以使用我已经使用的方法来保证安全?
以下是代码:
while($row = $result->fetch_assoc()) {
echo '<tr>';
echo '<td>' . $row['row1'] . '</td>';
echo '<td>' . $row['row2'] . '</td>';
echo '<td>' . $row['row3'] . '</td>';
echo '<td><a href="delete.php?id=' . $row['id'] . '">Delete</a></td>';
echo '</tr>';
}
if (isset($_GET['id']) && is_numeric($_GET['id'])) {
$id = $_GET['id'];
if ($stmt = $mysqli->prepare("DELETE FROM table WHERE id = ? LIMIT 1")) {
$stmt->bind_param("i", $id);
$stmt->execute();
printf("Affected rows (DELETE): %d\n", $mysqli->affected_rows);
$stmt->close();
}
}
基本上我想让整个行都可以点击,只要用户点击行删除记录,而不是使用按钮。但是,我面临的最大挑战是如何不在URL中显示其ID。
非常感谢任何帮助。
谢谢
答案 0 :(得分:1)
在Id
中设置$_SESSION
,您可以在页面间传递它。
OR
你可以用ajax
来做while($row = $result->fetch_assoc()) {
echo '<tr class=\"deleted\">';
echo '<td>' . $row['row1'] . '</td>';
echo '<td>' . $row['row2'] . '</td>';
echo '<td>' . $row['row3'] . '</td>';
echo '<td><a href="#" id="'. $row['id'] .'" class=\"delete\">Delete</a></td>';
echo '</tr>';
}
在上面代码所在的页面中添加此脚本;
<script type="text/javascript">
$(function() {
$(".delete").click(function(){
var element = $(this);
var del_id = element.attr("id");
var info = 'id=' + del_id;
if(confirm("Are you sure you want to delete this?")){
$.ajax({
type: "POST",
url: "delete.php",
data: info,
success: function(){
}
});
$(this).parents(".deleted").hide(500);
}
return false;
});
});
</script>
在root中创建一个delete.php,它就像
<?php
//Add your database connection first here
if (isset($_POST['id']) && is_numeric($_POST['id'])) {
$id = $_POST['id'];
if ($stmt = $mysqli->prepare("DELETE FROM table WHERE id = ? LIMIT 1")) {
$stmt->bind_param("i", $id);
$stmt->execute();
//Set if condition here to check and show response
if ($stmt) {
echo "<font color='red'>Record Deleted Successful</font>";
} else {
echo "<font color='red'>Error While Trying To Delete Record, Please Try Again</font>";
}
//printf("Affected rows (DELETE): %d\n", $mysqli->affected_rows);
$stmt->close();
}
}
?>
使用Ajax,您的页面将不会刷新,数据将从数据库中删除,删除的行将被用户隐藏
答案 1 :(得分:0)
使用双向加密对ID进行编码,以便对其进行“发送”编码并进行解码以供使用。
答案 2 :(得分:0)
为此,您可以在最后一个表格单元格中放置一个表单:
echo '<td><form action="delete.php" method="post">';
echo '<input type="hidden" name="id" value="' . $row['id'] . '/>';
echo '<input type="submit" value="Delete" />';
echo '</form></td>';
表单使用隐藏的输入作为您的id值。
在PHP中,您将更改为$_POST
数组$_POST['id']