【问题标题】:Update MySQL Value Through Img Src Variable Including jQuery通过包括 jQuery 的 Img Src 变量更新 MySQL 值
【发布时间】:2010-08-22 14:43:09
【问题描述】:

感谢所有在过去几天里帮助过我的人。不幸的是,我正在工作,所以无法回复您。我在我认为可行的代码中包含了一些代码,但由于某种原因,下面的代码不会在我的 SQL 数据库中更新。如果有人可以复制代码并查看它为什么不起作用,我将提供代码及其输出......这真的让我很头疼!哈哈!

(与 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 文件。

我只能提前对任何可以提供帮助的人说声谢谢。

菲利普。

【问题讨论】:

  • 仅供参考,您在 update.php 中的代码极易受到SQL Injection 的攻击。
  • 你必须开始学习如何调试你的代码。这是找出错误的唯一方法。询问 SO 不是一种选择

标签: mysql url parameters jquery


【解决方案1】:

除了 Nathan 提到的 SQL 注入漏洞之外,这里还有一些问题,即您正在发布,因此您需要使用 $_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,这是我更喜欢的。

【讨论】:

  • 谢谢。我尝试删除所有 jQuery 并且 _POST 不起作用,所以我将其更改为 _GET 并且它起作用了,所以我在这里更新了我的代码,但如果你认为它需要是 GET,我会相信你的话,其次,您是否建议在 jQuery 中使用 data: "tid="+ tid +"&opn="+ opn, 或 data { tid: tid, opn: opn }, -- update: 我刚刚用您的代码更新了代码建议,但没有奏效。数据库中的 opn 变量没有改变。
  • @Phillip - 我建议使用对象方法,{ tid... } 这样任何需要编码的值(比如它包含&amp;,都会被编码)。另一方面:您的 GET 或 POST 应该与您使用的方法相匹配,我更喜欢 POST 在这里,因为它是您正在执行的“操作”。但是这一点:jquery 中的type: "POST" 决定了你在做什么,这就是变量在 PHP 端可用的方式。
  • @Phillip - 您应该使用像 Firebug 或 Chrome 的开发者工具这样的工具来查看实际发送到服务器的内容,这会很快将其缩小到客户端/服务器或两者,首先您需要确保发布了正确的变量,这是第 1 步,使用 Firebug 之类的东西来查看提交的内容是一个很好的方法:getfirebug.com
  • 在这种情况下,它不起作用 :( -- 感谢您的帮助。我确实根据您的建议整理了代码。
  • @Phillip - GET 变量在地址栏中,POST 变量不在,这就是区别,您可以链接到 GET 请求。通常,尽管情况各不相同,但开发人员大部分倾向于将 POST 用于有影响的事情,例如数据库更新,而 GET 用于查看数据,例如。您想发送给其他人的链接或书签。
猜你喜欢
  • 2011-06-16
  • 2019-02-25
  • 1970-01-01
  • 1970-01-01
  • 2010-10-20
  • 1970-01-01
  • 1970-01-01
  • 2011-09-27
  • 2011-08-24
相关资源
最近更新 更多