2011-03-07 77 views
3

所以我試圖通過抓取被單擊的鏈接並在數據庫中找到該鏈接來使用ajax更新我的sql數據庫中的值。我不知道爲什麼它不工作:\使用jQuery Ajax和PHP更新SQL數據庫

$('.visit').click(function() { 
var thisLink = $(this).attr('href'); 
$.post("visit.php", { link: thisLink}); 
}); 

<?php 
$link = $_POST['link']; 
mysql_query("UPDATE items SET visited = 1 WHERE link = $link"); 
include("print.php"); 
?> 
+0

另請參閱'bind-param'方法。你目前有一種情況,有人可以發佈到以下網址並導致問題。 yoursite.com/visit.php?link='data;DROP TABLE [items]' – rcravens

+0

@rcravens right我明白了。我將如何修改這段代碼? – redenvy

+0

見下面...... – rcravens

回答

1
<?php 
    $link = $_POST['link']; 
    mysql_query("UPDATE items SET visited = 1 WHERE link = '$link'"); 
    include("print.php"); // what print.php does ? 
?> 

約$鏈接看跌行情

比較與數據庫中的字段值$鏈接 - 它必須是exaclly匹配

+0

這是我唯一可以看到的問題 –

+0

嗯,似乎沒有工作。我正在檢查數據庫,並沒有得到更新。我的表稱爲項目,行稱爲鏈接。我的sql語法正確嗎?此外,print.php只是打印出關於print.php的HTML – redenvy

+0

- 你的jQuery文章似乎並不關心返回 - 所以它浪費CPU來生成它 – bensiu

2

爲防止SQL注入使用類似於以下內容(從內存中鍵入...雙重檢查)。周圍的SET和WHERE PARAMS

<?php 
    $db = new PDO('connection string', 'username', 'password'); 

    $query = "UPDATE items SET visited=1 WHERE link=:link"; 

    $stmt = $db->prepare($query); 
    $stmt->execute(array(':link' => $link)); 
?> 

鮑勃

+0

加入PDO的支持是php5(PHP 5> = 5.1.0,PECL pdo> = 0.1.0)或PECL – kjy112

+0

@ kjy112好點。感謝使用mysql_real_escape_string的例子。 – rcravens

2
$('.visit').click(function() { 
     var thisLink = $(this).attr('href'); 
     $.post("visit.php", { link: thisLink}); 
    }); 

    <?php 
     $link = $_POST['link']; 
     mysql_query("UPDATE items SET visited = '1' WHERE link = '".mysql_real_escape_string($link)."'"); 
     include("print.php"); 
    ?> 

使用單引號。此外,mysql_escape_real_string輸入到SQL注入的數據庫中