从表php mysql中删除行

时间:2011-07-07 20:16:42

标签: php mysql

我正在寻找从当前登录用户的表中删除值的最佳,最安全的方法。

我的页面上有一个查询,它可以抓取用户的所有兴趣并将其显示为

<?php 
print $interest1 . "<a href='del-interest.php'>Delete</a><br />";
print $interest2 . "<a href='del-interest.php'>Delete</a><br />";
print $interest3 . "<a href='del-interest.php'>Delete</a><br />";
?>

我想添加一个删除功能(我以前从未做过),这样当用户点击删除时,相应的行将从表中删除,我唯一关心的是,如果我使用POST / GET方法传递数据有些用户可能会恶意改变被发布的数据并删除所有类型的东西,对不起,如果这个太清楚了,我问的是什么是最好,最安全的方法呢?


很抱歉,如果我没有理由我尽力学习PHP,但是,以下是否有效?

<?php 
print $interest1 . "<form method='post' action='delete-interest.php'><input type='hidden' value='".$interest1."' name='int1' id='int1'/></form><br />";
print $interest2 . "<form method='post' action='delete-interest.php'><input type='hidden' value='".$interest2."' name='int2' id='int2'/></form><br />";
print $interest3 . "<form method='post' action='delete-interest.php'><input type='hidden' value='".$interest3."' name='int3' id='int3'/></form><br />";
?>

然后在delete-interst.php上我有......

if(isset($_POST['int1'])) { 
    $interest = $_POST['int1']; 
    mysql_query = DELETE $interest FROM user_interests WHERE user_id = users sesson id;
}
elseif(isset($_POST['int2'])) {
    $interest = $_POST['int2']; 
    mysql_query = DELETE $interest FROM user_interests WHERE user_id = users sesson id;
} 
elseif(isset($_POST['int3'])) {
    $interest = $_POST['int3']; 
    mysql_query = DELETE $interest FROM user_interests WHERE user_id = users sesson id;
}

3 个答案:

答案 0 :(得分:0)

您需要使用javascript和ajax来获取该类型的点击和转发功能。

例如使用jQuery:

$('.del-link').click(function(){
     var id = $(this).data('rowid');
     $.post('del-interest.php', {id: id}, function(data){
          //do something on return
     });
     return false;
});

你的html需要看起来像这样:

interest1 <a class="del-link" href="#" data-rowid="interest1ID">DELETE</a>
interest2 <a class="del-link" href="#" data-rowid="interest2ID">DELETE</a>
...

请记住在php端进行某种验证,并返回一些data,以便javascript可以向用户输出任何错误。

答案 1 :(得分:0)

最好的办法是在删除之前验证删除。在删除本身,检查用户是否有权执行他正在做的事情。如果不这样做,请使用DELETE FROM SQL查询来完成工作。

答案 2 :(得分:0)

首先,请不要使用<a>标记,因为这会发送一个非常糟糕的GET请求。

  来自w3.org的

片段

     

......已经建立了一个约定,即GET和HEAD方法不应该具有采取除检索之外的动作的重要性。

因此,如果您遵循POST约定使用RESTful,则应使用通常使用DELETE方法的表单(但大多数浏览器不支持此类,因此您需要必须模拟这个。)

正如@OMG小马所说,您需要获得唯一标识符(主键)的信息,以便您知道要删除哪一行。

正如@henasraf所述,您应该验证发送请求的用户实际上已登录并有权删除他的数据。您提到兴趣与用户相关联,因此您只需验证用户是否已登录,并且只是尝试删除数据。