【问题标题】:Updating SQL database using jQuery Ajax and PHP使用 jQuery Ajax 和 PHP 更新 SQL 数据库
【发布时间】:2011-07-10 01:06:04
【问题描述】:

所以我尝试使用 ajax 来更新我的 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");
?>

【问题讨论】:

  • 还可以看看 'bind-param' 方法。您目前有一种情况,有人可能会发布到以下 url 并导致问题。 yoursite.com/visit.php?link='data;DROP TABLE [items]'
  • @rcravens 对,我明白。我将如何使用它来修改此代码?

标签: php jquery sql ajax


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

在 $link 周围加上引号

将 $link 与数据库字段中的值进行比较 - 它需要完全匹配

【讨论】:

  • 这是我唯一能看到的问题
  • 嗯,是的,这似乎不起作用。我正在检查数据库,它没有得到更新。我的表称为项目,行称为链接。我的 sql 语法对吗? print.php 也只是打印出 html
  • 关于 print.php - 你的 jQuery 帖子似乎不关心返回 - 所以它会浪费 CPU 来生成它
  • 嗯,我想做的是重新发布 html,如果链接已经被访问过,我将附加一个 css 类来证明这一点。所以 print.php 做到了。
【解决方案2】:

为了防止 SQL 注入,请使用以下内容(从内存中键入...仔细检查)。

<?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));
?>

鲍勃

【讨论】:

  • 添加 PDO 支持是 php5 (PHP 5 >= 5.1.0, PECL pdo >= 0.1.0) 或 PECL
  • @kjy112 好点。感谢使用 mysql_real_escape_string 的示例。
【解决方案3】:
    $('.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");
    ?>

在 SET 和 WHERE 参数周围使用单引号。此外,mysql_escape_real_string 输入数据库以进行 SQL 注入

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 2012-05-12
    • 2019-03-24
    • 1970-01-01
    • 2016-08-31
    相关资源
    最近更新 更多