Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 删除MySQLi记录而不在URL中显示id_Php_Mysqli - Fatal编程技术网

Php 删除MySQLi记录而不在URL中显示id

Php 删除MySQLi记录而不在URL中显示id,php,mysqli,Php,Mysqli,我试图通过ID从数据库中删除记录。代码正常工作,但问题是URL中出现了ID,据我所知,这是不安全的 网址:“ 我使用了prepared语句删除记录,但问题来自按钮。我已经在使用的方法是否还有其他安全的方法 代码如下: while($row = $result->fetch_assoc()) { echo '<tr>'; echo '<td>' . $row['row1'] . '</td>';

我试图通过ID从数据库中删除记录。代码正常工作,但问题是URL中出现了ID,据我所知,这是不安全的

网址:“

我使用了prepared语句删除记录,但问题来自按钮。我已经在使用的方法是否还有其他安全的方法

代码如下:

    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
,它告诉脚本文件所在的位置,并处理和发布请求并获取响应,使您保持在同一页面上