2010-08-22 46 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