2013-11-28 66 views
0

我希望請求從sql刪除記錄而不更改網頁。不幸的是,當我點擊這個按鈕時它實際上並沒有刪除記錄。 post_action.php導致刪除失敗的問題是什麼?正確使用.ajax jquery方法?

post_action.php

<?php 
if($_GET['action'] == "deletePost") 
     deletePost($_GET['title']) 
function deletePost($title){ 
    $sql = "DELETE FROM blog WHERE Title = '$title';"; 
    mysqli_query($mysqli, $sql); 
} 
?> 

Ajax請求:

$('#deletePost').click(function(){ 
    $.ajax({ 
     url:"post_action.php", 
     data: {action: "deletePost", postTitle: $(this).siblings("h3.blog").text()}, 
     success: function(result){ 
      $('ul.left').html(result); 
     } 
    }); 
}); 

的index.php

<?php 
      include 'scripts/db_connect.php'; 
      include 'scripts/functions.php'; 
      sec_session_start(); 
      $sql = "SELECT * FROM blog"; 
      $result = mysqli_query($mysqli, $sql); 
      while($row = mysqli_fetch_array($result)) 
      { 
       echo'<div class="blog"><h3 class="blog">' . $row['Title'] . 
       "</h3><h3>" . $row['Date'] . "</h3><h3>" . $row['Tag'] . 
       "</h3><hr>"; 
       echo'<p class="blog">' . $row['Body'] . '</p><form name="postForm" 
       method="post" action="process_post.php"> 
       <input type="radio" name="postAction" 
       value="editPost" class="postButton" type="button">Edit</input> 
       <input type="radio" name="postAction" value="deletePost" 
       class="postButton" type="button">Delete</input> 
       <input type="radio" name="postAction" value="commentPost" 
       class="postButton" type="button">Comment</input> 
       </form></div>'; 
      } 

      ?> 
+0

我不會在前端發送整個SQL查詢。我只需發送相關表格或WHERE值。否則,您很可能會打開數據庫進行濫用。 –

+0

爲什麼你使用職位標題來刪除使用ID而不是標題 –

+0

因爲它是一個虛擬的例子來幫助我學習傢伙。這是在我的本地主機不是一個網站與交通:) – CodeManiak

回答

0

這取決於你,你會從服務器端返回的內容爲您刪除的確認,例如,如果你寫你的deletePost功能是這樣的(假設$mysqli是提供給您的當前範圍)

function deletePost($title){ 
    // include 'scripts/db_connect.php'; 
    $sql = "DELETE FROM blog WHERE title = '$title'"; 
    mysqli_query($mysqli, $sql); 
    if(mysqli_affected_rows($mysqli)) return true; 
    return false; 
} 

而且使用它像

if(deletePost ($_GET['postTitle'])) { 
    echo 'succeed'; 
} 
else { 
    echo 'failed'; 
} 

所以,在你ajax success你可以使用類似這樣的東西

success:function($data){ 
    if($data == 'succeed') alert('Record Deleted'); 
    else alert('Record Not Deleted'); 
} 
+1

這正是我所期待的。現在你有什麼想法可能會導致它失敗嗎?我現在對我的成功有一個提醒,它沒有提醒,更不用說我想刪除的記錄仍然可見! :( – CodeManiak

+0

您是否在控制檯中看到任何錯誤消息?您是否有有效的連接,並且在函數範圍內有'$ mysqli'? –

+0

我嘗試在post_action.php的頂部回顯一堆div,但沒有一個我不確定這是否意味着它到達了php文件,並且未能返回ajax請求,或者沒有完全到達php文件。我仔細檢查了兩個文件都在同一個文件夾中,所以我知道我的目錄是正確... – CodeManiak

0

一個成功的功能,如果請求成功被調用。該函數傳遞三個參數:從服務器返回的數據,根據dataType參數進行格式化;描述狀態的字符串;和jqXHR

success: function(result){ 
    //perform function after succesfull deletion 
    //for example : notifying user of record successfully deleted 
    alert('DELETED SUCESSFULLY'); 
} 

REFERENCE

http://api.jquery.com/jQuery.ajax/

+0

我的意思更像是如果你想爲mySQL記錄設計一個刪除腳本,成功函數會是什麼樣子。如...確認輸出,刪除工作或什麼 – CodeManiak

+0

因此,我把這個警報在我的成功:它永遠不會發生這意味着我的ajax請求失敗。任何想法爲什麼? – CodeManiak

1

問題; 要發送的數據:

`data: {action: "deletePost", postTitle: $(this).siblings("h3.blog").text()}`, 

,但使用的是

$_GET['title'] instead use $_GET['postTitle'] 

其次:成功的功能,如果請求成功被調用。因此,在這你可以在這裏做很多事情,如:

1. show a confirmation box sayin deleted successfully. 
2. show a div giving confirmation. 
3. remove the deleted row(should be done in all options) 
+0

對不起,業餘愛好。這是我的第一個阿賈克斯嘗試哈哈。我正在使用API​​來編寫代碼,我想我已經讀過了。ajax jquery方法數據設置用數據成員填充$ _GET數組,這正是我以爲我正在做的! – CodeManiak

+0

@CodeManiak是的,但你正在這樣做。它會給你$ _GET這是默認方法的數據。直到您指定要發佈的方法,您將獲得$ _GET中的數據。問題是你使用標題索引,而不是postTitle –

+0

嗯,我修正了這個問題,仍然沒有骰子。還有什麼其他見解要分享?非常感謝! – CodeManiak

相關問題