2017-08-11 280 views
-1

我想用AJAX製作一個最喜歡的按鈕。我已經寫了PHP查詢,但我不知道如何爲它製作AJAX並將它連接到我的按鈕。ajax最愛按鈕

我想是最喜歡/取消收藏

$test = $_SESSION['ww']; 
if (isset($_POST['submit']))  
{ 
    $x = $_SESSION['x']; 
    $SelectQry2 = "select * from favorites where User_Id = ".$test." and User_Post = ".$x.""; 
    $slc = mysqli_query($link , $SelectQry2); 

    if (mysqli_num_rows($slc)> 0) 
    { 
    $DeleteQry = "DELETE from favorites where User_Post = ".$x.""; 
    $del = mysqli_query($link , $DeleteQry); 
    } 
    else 
    { 
    $url = $_SERVER['REQUEST_URI']; 
    $InsertQry = "insert into favorites"; 
    $InsertQry .="(`User_Id` ,`User_post`, `url`) VALUES"; 
    $InsertQry .=" ('$test' ,'$x', '$url')"; 
    $fav = mysqli_query($link, $InsertQry); 
    } 
} 

if(isset($_GET['id'])) 
{ 
    $id = intval($_GET['id']); 
    $SelectSql = " SELECT * , `upload_diy_ordinary`.`date` as datep FROM `users_final` LEFT OUTER JOIN `upload_diy_ordinary` ON `upload_diy_ordinary`.`User_ID`=`users_final`.`id` "; 
    $SelectSql .= " where `upload_diy_ordinary`.`ID` = $id"; 
    $result = mysqli_query($link, $SelectSql); 

    while($row = mysqli_fetch_assoc($result)) 
    { 
    $_SESSION['x'] = $row['id']; 
    <form method="post"> 
     <input type="submit" name="submit" id="favorite" value="favorite" /> 
    </form> 
    <?php } 
} ?> 
$(document).on('click', '#favorit', function(e) { 
    var data = $("#form").serialize(); 
    $.ajax({ 
    data: data, 
    type: "post", 
    url: "details.php", 
    success: function(data) { 
     alert("Data Save: " + data); 
    } 
    }); 
}); 

我會很感激,如果你能幫助我

+3

您的SQL查詢容易受到注入攻擊。惡意用戶輸入可能會輕易破壞,竊取甚至破壞您的數據。請學習使用參數化查詢和準備好的語句,以更好地保護自己。這並不難,也是一個很好的習慣。 http://bobby-tables.com/對風險有一個很好的(和有趣的)解釋,還有一些關於如何安全編寫查詢的PHP/mysqli代碼示例。 – ADyson

+0

我真的不知道ajax很好,我只知道我寫的是可以幫助我運行ajax的ajax的基本形式。 –

+0

我真的不知道ajax很好,我只知道我寫的是可以幫助我運行ajax的ajax的基本形式。 –

回答

1

一些明顯的問題,我可以看到:

1)'#favorit'將不匹配任何按鈕,因爲您錯過了字符串末尾的e

2)一旦這個工作,它會回發你的表格,因爲這是一個「提交」按鈕自動執行的操作。所以你會得到一個回發,也可能是一個競爭的Ajax請求 - 不好。將e.preventDefault();寫爲您的點擊功能的第一行,以停止發生常規回發並允許您的ajax工作。

3)你正在寫出多個按鈕的ID爲「最愛」。 HTML中不允許使用多個ID。您的「點擊」功能只會匹配第一個按鈕,因爲所有其他按鈕都被認爲是無效的。

4)$("#form").serialize();也將無法正常工作,因爲您沒有任何帶有ID「form」的元素。

我建議做以下幾點:

1)撰寫您的形式這樣的代碼,一類屬性,以便您可以識別的形式,並結合事件處理他們所有的多個實例(不同的ID,你可以重複2)將您的事件處理程序綁定到表單的提交事件,而不是提交按鈕的單擊事件。2)將事件處理程序綁定到表單的提交事件,而不是提交按鈕的單擊事件。然後,您可以輕鬆地對錶單進行序列化。

$(document).on('submit', '.favourite-form', function(e) { 
    e.preventDefault(); //prevent a normal postback and allow ajax to run instead 
    var data = $(this).serialize(); //"this" represents the form element in this context 
    $.ajax({ 
    data: data, 
    type: "post", 
    url: "details.php", 
    success: function(data) { 
     alert("Data Save: " + data); 
    }, 
    error: function(jqXHR, textStatus, errorThrown) //gracefully handle any errors in the UI 
    { 
     alert("An ajax error occurred: " + textStatus + " : " + errorThrown); 
    } 
    }); 
}); 

也請注意上面重新您的嚴重的漏洞SQL注入攻擊,這是另外一個問題,你應該考慮儘快修復我的意見。