2015-12-28 65 views
0

我有一個打印出mysql表中的行的頁面。我試圖創建一個允許用戶刪除行的ajax表單,但由於某種原因,我似乎只能刪除打印出的最上面一行。 我只包含了這裏可能需要的腳本,並且忽略了數據庫查詢(這可以正常工作).Firebug只顯示了當我單擊結果的最上面一行時發佈的表單,其他任何行都沒有做任何事情。誰能告訴我什麼是錯的?由於只能用Ajax刪除第一行

My_reviews.php

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"> 
    </script> 

<script type="text/javascript"> 
//Delete Review 
$(document).ready(function(){ 
$("#deleteReview").click(function (e) { 
     e.preventDefault(); 


var username=$("#username").val(); 
var film_id=$("#film_id").val(); 
var id=$("#id").val(); 


$.post('ajax_deleteReview.php', {username: username, film_id: film_id, id: id}, 
function(data){ 
$("#message").html(data); 
$("#message").hide(); 
$("#message").fadeIn(500); 
$("#message").fadeOut(2500); 
}); 
return false; 
}); 
}); 
</script> 
</head> 

<div class="container"> 
<div id="message"></div> 
<?php 
    $sql = "SELECT * FROM user_reviews WHERE username='$username' ORDER BY DATE desc"; 
$result = $db_conx->query($sql); 
while($row = $result->fetch_assoc()) { 
$id = $row['id']; 
$film_id = $row['film_id']; 
$review = $row['review']; 
$movie = $tmdb->getMovie ($film_id); 

echo ' 
<div class="row"> 
     <div class="col-md-1"> 

<a href="film_info.php?film_id='. $movie->getID() .'"><img id="image1" src="'. $tmdb->getImageURL('w150') . $movie->getPoster() .'" width="80" /></a> 
<p> 
</p> 
</div> 
    <div class="col-md-4"> 
      <h3> 
      ' . $movie->getTitle() .' 
      </h3>'; 
echo' 
      <p> 
      '.$review. ' 
      </p> 

<form> 
    <input type="hidden" id="username" name="username" value="'. $username.'"> 
<input type="hidden" id="film_id" name="film_id" value="'.$film_id .'"> 
<input type="hidden" id="id" name="id" value="'.$id .'"> 
<button type="submit" id="deleteReview" class="btn btn-danger btn-xs pull-right">delete</button> 
</form> 
     </div> 
     <div class="col-md-7"> 
     </div> 
     </div>'; 

} 
?> 

    <script src="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"> 
     </script> 
    </div> 
    </body> 
    </html> 

ajax_deleteReview.php

<?php 
//include db configuration file 
include_once("ajax_review/config.php"); 
//Configure and Connect to the Databse 
$username=$_POST['username']; 
$film_id=$_POST['film_id']; 
$id=$_POST['id']; 
//Delete Data from Database 
$delete_row = $mysqli->query("DELETE * FROM `user_reviews` WHERE  id='$id' AND username='$username' AND film_id='$film_id' LIMIT 1"); 
if($delete_row){ 
echo '<img src="images/tick_large.png"/>'; 
} 
else{ echo "An error occurred!"; } 
?> 
+1

備註:您可以利用該SQL注入漏洞刪除其他行,或任何行或整個數據庫... – David

+0

更重要的是:您的「行」在用戶界面中哪裏?只有一種形式只有一組值。所以它只會刪除該表單中指定的任何單個值。 – David

+0

您的表單始終具有相同的輸入值 – RomanPerekhrest

回答

1

你在輸入重複的ID,所以jQuery的返回輸入1日發生。
您可以將film_id,id和film_name添加到帶有data屬性的<a>鏈接,然後使用jquery進行閱讀。
JavaScript函數的Ajax請求需要被分配到類:

$(".deleteReview").click(function (e) {... 

<a class="deleteReview".... 

所以這個你消除在HTML代碼重複的ID。

+0

任何機會,你可以給我一個你的意思的例子。我理解這個想法,但不清楚語法。 – JulianJ