2014-01-14 57 views
0

我有我刪除評論表單的一個問題。我想創建不知何故用戶刪除他們自己的評論,但到目前爲止,我只能設法刪除所有評論。它是否屬於自己並不重要。如何讓用戶刪除自己的評論?

這裏是我的形式:

<form action="<?php echo $editFormAction; ?>" method="POST" name="CommentForm"> 
<table> 
<tr><td colspan="2"></td></tr><tr><td><input type="hidden" name="name" value="<?php  
    echo $_SESSION['MM_Username']; ?>" /></td></tr> 

<tr><td colspan="2">Заглавие:</td></tr><tr><td><input type="text" name="title" 
style="width:300px; height:20px;" /></td></tr> 
<tr><td colspan="2">Коментар</td></tr> 
<tr><td colspan="2"><textarea name="comment" style="width:450px; height:150px;"> 
    </textarea></td></tr> 
    <tr><td colspan="2"><input type="submit" name="submit" value="Коментирай"      
    style="padding:5px; color:#069"/></td></tr> 

</table> 
    <input type="hidden" name="MM_insert" value="CommentForm" /> 


    </form><br /><br /> 
<?php 

    $getquery=mysql_query("SELECT * FROM comments ORDER BY id DESC"); 

    while($rows=mysql_fetch_assoc($getquery)) 
    { 
$id=$rows['id']; 
$title=$rows['title']; 
$comment=$rows['comments']; 
$MM_Username=$rows['name']; 
$dellink="<a href=\"delete.php?id=" . $id . "\">ИЗТРИЙ</a>"; 

echo '<b><p style="background-color:#6CC; border-radius:10px; te" 
    ;border:1px solid;"> &nbsp Потребител:</b> ' . $MM_Username . ' <br /><b>&nbsp 
    Тема:</b> ' . $title . '</b><br /><b>&nbsp Коментар:</b><br />&nbsp ' . $comment . 
     '<br />' . $dellink .'</p><br />' ; 

    } 

    ?> 

,這是我delete.php:

<?php 
    include 'Connections/localhost.php'; 
    mysql_query("DELETE FROM comments WHERE id = $_GET[id]")or die(msql_error()) ; 
    header('location: komentari.php'); 
?> 
+4

嗯,首先,你沒有做對用戶是否有任何檢查*允許*刪除評論。所以任何用戶都可以刪除任何評論。你的'delete.php'應該有一些授權檢查,以確保發出請求的用戶可以刪除評論。此外,這是***非常重要的***,您的代碼是*開放*到SQL注入攻擊。用戶不僅可以刪除評論,還可以完全控制你的服務器。請閱讀以下內容:http://www.php.net/manual/en/security.database.sql-injection.php – David

+5

**危險**:您正在使用[an **過時的**數據庫API](http: //stackoverflow.com/q/12859942/19068)並且應該使用[現代替換](http://php.net/manual/en/mysqlinfo.api.choosing.php)。你也容易受到[SQL注入攻擊](http://bobby-tables.com/)**的影響,即一個現代化的API可以更容易[保護](http:// stackoverflow。com/questions/60174/best-way-to-prevent-sql-injection-in-php)自己從。 – Quentin

+0

請勿將編輯鏈接用於編輯數據庫的操作。你會得到機器人(和預先代理)跟隨他們,並瘋狂刪除的東西。使用POST表單。 – Quentin

回答

0

最簡單的解決辦法是增加AND owner = ?到DELETE查詢結束。從存儲當前用戶的標識(可能是會話)的位置填充值。您需要將發表評論的用戶的ID存儲在表格的所有者列中。

你可能想添加一些代碼來測試,如果刪除成功,並有可能使一些查詢,找出原因,如果不是這樣,你可以提供良好的錯誤報告。

可避免通過比較你與一個當前用戶擺脫數據庫的所有者值不當產生的刪除鏈接。

+0

這個解決方案的問題是,論壇將只顯示當前登錄的用戶擁有的評論....所以我不確定這是OP想要什麼。 –

+0

@DylanB - 錯誤,DELETE查詢,而不是SELECT查詢。 – Quentin

1

我假設一個用戶登錄,並有相關存儲在會話用戶的一些信息。如果不存在的話,你應該添加的用戶ID,這樣你可以在你的delete.php做:

<?php 
session_start(); 

// Here you should kick out any visitors that are not logged in 


// proceed with the delete 
include 'Connections/localhost.php'; 

$id = (int) $_GET[id]; 
$uid = (int) $_SESSION['user_id']; // or something similar 

mysql_query("DELETE FROM comments WHERE id = $id AND owner_id = $uid")or die(msql_error()) ; 
                ^^^^^^^^ or something similar 
// etc. 

而且你真的應該切換到PDO或mysqli的和準備的語句,你現在有一個SQL注入的問題, mysql_*函數已被棄用。

0

你將要在這裏解決兩個問題。首先,你的'delete.php'應該只處理評論的所有者與登錄用戶相同的地方。對於這一點,你會需要添加

​​3210

注意,這depents你的數據結構。

你將需要把一些邏輯的第二點是圍繞

$dellink="<a href=\"delete.php?id=" . $id . "\">ИЗТРИЙ</a>"; 

此時的定義,你將要添加:

IF ([owner] == $_SESSION['CurrentUser']) 
    $dellink="<a href=\"delete.php?id=" . $id . "\">ИЗТРИЙ</a>"; 
ELSE 
    $dellink="" 

或者PHP的等價物。對不起,我有一段時間沒有用PHP編程。但目前的其他答案似乎並不能解決這兩個問題。

+1

你知道'$ _GET'來自用戶,可以是用戶想要的任何東西,對吧? – jeroen

+0

錯誤...不,我將其更改爲$ _SESSION,但重點仍然存在。如果用戶無法刪除,則不應顯示DELETE鏈接,因此您應該在顯示鏈接之前檢查用戶是否可以刪除。 –

+0

的確,用戶界面還需要一些拋光...... – jeroen