2011-07-07 120 views
1

我正在尋找最好,最安全的方法來從當前登錄用戶的表中刪除值。刪除表中的行mysql 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 />"; 
?> 

,然後刪除,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; 
} 

回答

0

首先不要使用<a>標籤,因爲這會發送一個極其糟糕的GET請求。

段從w3.org

...該公約已經確定,GET和HEAD方式不應該採取行動以外檢索意義。

因此,你應該使用一種形式,通常使用POST方法,如果你是以下RESTful約定你會使用DELETE(但大多數瀏覽器不支持此功能,所以你必須來模擬這一點)。

由於@OMG小馬錶示您需要具有唯一標識符(主鍵)的信息,以便您知道要刪除的行。

正如@henasraf聲明您應該驗證發送請求的用戶實際上已登錄並且有權刪除他的數據。您提到興趣與用戶相關聯,因此您只需驗證用戶是否已登錄並且只是試圖刪除那些數據。

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

這很好,但這不是問題 - 他問如何刪除所需的東西,並防止惡意使用 – casraf

+0

@henasraf,無論你的意思是什麼? – Neal

+0

閱讀問題 - 他問如何防止人們更改GET/POST數據以刪除不需要的東西 – casraf

0

你最好的辦法是在做之前驗證刪除。在刪除本身中,檢查用戶是否有權執行他正在做的事情。如果不是這樣,請使用DELETE FROM SQL查詢來完成這項工作。