Php 删除MySQLi记录而不在URL中显示id
我试图通过ID从数据库中删除记录。代码正常工作,但问题是URL中出现了ID,据我所知,这是不安全的 网址:“ 我使用了prepared语句删除记录,但问题来自按钮。我已经在使用的方法是否还有其他安全的方法 代码如下:Php 删除MySQLi记录而不在URL中显示id,php,mysqli,Php,Mysqli,我试图通过ID从数据库中删除记录。代码正常工作,但问题是URL中出现了ID,据我所知,这是不安全的 网址:“ 我使用了prepared语句删除记录,但问题来自按钮。我已经在使用的方法是否还有其他安全的方法 代码如下: while($row = $result->fetch_assoc()) { echo '<tr>'; echo '<td>' . $row['row1'] . '</td>';
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();
}
}
while($row=$result->fetch_assoc()){
回声';
回显“.$row['row1']”;
回显'.$row['row2'].';
回显'.$row['row3'].';
回声';
回声';
}
if(isset($\u GET['id'])和&是数值($\u GET['id'])){
$id=$_GET['id'];
if($stmt=$mysqli->prepare(“从表中删除,其中id=?限制1”)){
$stmt->bind_参数(“i”,$id);
$stmt->execute();
printf(“受影响的行(删除):%d\n”,$mysqli->受影响的行);
$stmt->close();
}
}
基本上,我希望在用户单击整行以删除记录时,使整行都可单击,而不是使用按钮。然而,我最大的挑战是如何在URL中不显示它的ID
非常感谢您的帮助
谢谢使用双向加密对ID进行编码,以便对其进行“发送”编码和解码以供使用 在
$\u会话
中设置Id
,您可以在页面之间传递它
或
您可以使用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>';
}
while($row=$result->fetch_assoc()){
回声';
回显“.$row['row1']”;
回显'.$row['row2'].';
回显'.$row['row3'].';
回声';
回声';
}
在上述代码所在的页面中添加此脚本
<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>
$(函数(){
$(“.delete”)。单击(函数(){
var元素=$(此);
var del_id=element.attr(“id”);
var info='id='+del_id;
如果(确认(“是否确实要删除此?”)){
$.ajax({
类型:“POST”,
url:“delete.php”,
数据:信息,
成功:函数(){
}
});
$(此).parents(“.deleted”).hide(500);
}
返回false;
});
});
在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();
}
}
?>
要执行此操作,可以在最后一个表格单元格中放置表单:
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>';
echo';
echo“您将发布到PHP脚本。GET用于URL查询字符串中的项目。您好@shehary,很抱歉回复太晚,但我去了城里。你提供的例子正是我想要的。唯一需要提及的是:首先,我有一个select查询,我从DB中检索所有信息并将它们显示在一个表中,然后在下面的“delete.php”中,我尝试根据从上面的表中单击的行删除数据。我很困惑“html div”应该包含在哪里。感谢you@CodeX,我更新了答案,请看一看,让我知道如果你还有confusionhi@shehary,我可能看起来很愚蠢,但仍然不起作用。公平是我第一次使用ajax。基本上,上面所有的代码都应该只在一个类“delete.php”中,然而,我尝试并重新创建了另一个类,只是为了测试代码,但仍然没有成功。我错过什么了吗?谢谢你没有,我错过了一些东西,请重新拼这行echo'代码>带有此回音“”代码>Ajax的概念非常简单,它可以在不刷新页面的情况下为您完成肮脏的工作,您可以在脚本中看到url
,它告诉脚本文件所在的位置,并处理和发布请求并获取响应,使您保持在同一页面上