2010-08-22 77 views
1

感謝所有在過去幾天幫助過我的人..不幸的是,我工作以至於無法回覆你。我已經將一些代碼添加到了我認爲可行的代碼中,但出於某種原因,下面的代碼不會在我的SQL數據庫中更新。我會提供代碼和它的輸出,如果有人可以請複製代碼,看看爲什麼它不工作......這真的是我的頭!哈哈!通過Img Src變量更新MySQL值包括jQuery

(與MySQL db +表的連接工作正常)。

// admin.php 
<a href="#" id="chngeHref" /><img src="<?php echo "image.php?url=" . $row[2]; ?>?tid=<?php echo $row[0]; ?>&opn=<?php echo $row[1]; ?>" id="chnge" /></a> 
// image.php?url=image.jpg?tid=3&opn=1 

我被建議這樣做,以使我更容易通過過程中的變量(tid和opn)。

// update.php 

$tid = $_GET['tid']; 
$opn = $_GET['opn']; 

if ($opn == "0") { $opn = "1"; } elseif ($opn == "1") { $opn = "0"; } 

mysql_query("UPDATE catalogue SET opn = $opn WHERE tid = $tid ; "); 

mysql_close(); 

// it's just a simple script to change a variable from 1 to 0 or 0 to 1 where tid = a specific number... 

我有我的jQuery的東西都藏在一個可愛的小文件,因爲有很多的吧...

// navigate.js 


$.extend({ 
getUrlVars: function() { 
    var vars = {}; 
    var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) { vars[key] = value; }); 
return vars; 
} 
}); 


$("#chngeHref").click(function() { 
var tid = $.getUrlVars()['tid']; 
var opn = $.getUrlVars()['opn']; 

$.ajax({ 
    type: "POST", 
    url: "update.php", 
    data: "tid="+ tid +"& opn="+ opn, 
    success: function(){ 
    $('#chnge').fadeTo('slow',0.4); 
    } 
    }); 
});  

的.extend代碼,我在網上發現了發現參數以及地址行中所有人的價值。我認爲這是我的問題可能出現的地方,因爲頂級代碼實際上從來沒有將它發送到地址欄,而是通過jQuery發送到update.php文件。

我只能說,謝謝你soooo提前任何人誰可以在此協助。菲利普。

菲利普。

+1

僅供參考,您在update.php中的代碼極易受[SQL注入](http://www.unixwiz.net/techtips/sql-injection.html)影響。 – 2010-08-22 14:49:08

+1

你必須開始學習如何調試你的代碼。這是發現錯誤的唯一途徑。詢問SO不是一種選擇 – 2010-08-22 14:58:34

回答

0

這裏有幾個問題存在於SQL注入漏洞Nathan提到,即你正在發佈,所以你需要使用$_POST而不是$_GET來檢索你的變量。你也需要在數據塊中的額外的空間,這一點:

data: "tid="+ tid +"& opn="+ opn, 

應該是:

data: "tid="+ tid +"&opn="+ opn, 

或使用位清潔對象符號(所以它也被正確編碼):

data { tid: tid, opn: opn }, 

對於SQL注入的問題,而不是這樣的:

mysql_query("UPDATE catalogue SET opn = $opn WHERE tid = $tid ; "); 

最起碼躲過值,如:

$tid = mysql_real_escape_string($_POST['tid']); 
$opn = mysql_real_escape_string($_POST['opn']); 

或者go the parameterized query route,這就是我喜歡。

+0

謝謝你。我試着把所有的jQuery都放在了一邊,而_POST並沒有工作,所以我將它改爲_GET並且它工作,所以我在這裏更新了我的代碼,但是如果你認爲它需要GET的話,我會接受你的話,其次,你是否在jQuery中建議我使用數據:「tid =」+ tid +「&opn =」+ opn或data {tid:tid,opn:opn}, - update:代碼與您的建議,並沒有奏效。數據庫中的opn變量沒有改變。 – 2010-08-22 14:59:20

+0

@Phillip - 我建議使用對象方法,'{tid ...}'這樣任何需要編碼的值(比如說包含一個'&',都會被編碼)。對於另一個:您的GET或POST應該與您使用的方法相匹配,因爲這是您正在執行的「操作」,所以我更喜歡POST。但是這一點:在jQuery中'type:「POST」'確定你在做什麼,這就是變量在PHP端可用的方式。 – 2010-08-22 15:03:35

+1

@Phillip - 您應該使用像Firebug或Chrome的開發人員工具這樣的工具來查看實際發送到服務器的內容,這會將其縮小到客戶端/服務器或兩者都很快,首先您需要確保正確的變量獲得了POST ,這是第一步,並使用像Firebug的東西來看看提交的是一個很好的方式來做到這一點:http://getfirebug.com/ – 2010-08-22 15:06:26