使用PHP和AJAX

时间:2018-12-10 21:40:40

标签: javascript php html

我每次使用use按钮时都试图在数据库中使值+1。     我在HTML中的功能:

function onClick(arg){
             alert("thx fo click");
              $.ajax({
                  type: 'POST',
                  url: 'data.php',
                  data: {
                     'arg': arg,
                  },
                  success: function(response) {
                  }
              });
         }

arg表示button的值,它是数据库中一行的ID 和PHP:

<?php
$link = mysql_connect($servername, $username, $password);

$id = $_POST['arg'];

$sql = "UPDATE Buttons(SUMA) SET SUMA = SUMA + 1 WHERE ID = '$id'";
$conn->query($sql);

mysql_close($link);
?>

那什么也没做。我该如何解决?

2 个答案:

答案 0 :(得分:-1)

什么是1 + NULL,它仍然是NULL。

如果您未将列默认设置为'0',则无法将其递增。

最好在一个简单的数据库小提琴中显示

开始为空:

CREATE TABLE t(
  id INT(10),
   v INT(10) 
);

INSERT INTO t (id)VALUES(1);

SELECT * FROM t;

UPDATE t SET v = v+1 WHERE id=1;

SELECT * FROM t;

在“两个选项”中,您将获得null的{​​{1}}值,如下面的小提琴所示:

https://www.db-fiddle.com/f/m1vgKpov1oiRJEfZEgmk1j/0

简单来说,不能将1(或任何数字)添加到NULL值。可以,但是仍然为空。 v

从0开始:

null + 1 = null

在这种情况下,第一个Select返回CREATE TABLE t( id INT(10), v INT(10) default 0 ); INSERT INTO t (id)VALUES(1); SELECT * FROM t; UPDATE t SET v = v+1 WHERE id=1; SELECT * FROM t; 的{​​{1}},第二个Select返回0的{​​{1}}。如修改过的小提琴中所示。

https://www.db-fiddle.com/f/m1vgKpov1oiRJEfZEgmk1j/1

也(SQLInjection)

正如我在评论中所说的:

  

如果arg =“'OR 1-”

或者换句话说,不要将用户变量(或任何客户端数据)注入您的SQL中,否则它看起来像这样:

v

这将递增数据库中不为空的每一行。基本上1关闭另一个引号,然后OR 1始终为true(对于每一行)。不幸的是,我无法在小提琴中显示v注释部分(它注释掉了第二个选择),但这是最终结果。

https://www.db-fiddle.com/f/m1vgKpov1oiRJEfZEgmk1j/3

这就是为什么我们使用准备好的语句。这个示例有些琐碎,但是我在这里看到了登录代码,我可以通过放入 UPDATE `Buttons(SUMA)` SET SUMA = SUMA + 1 WHERE ID = '' OR 1 --'" 来绕过简单的操作,并使用偏移量可以遍历每个用户。他们正在寻找要根据用户名和密码返回的第一行。

其他一些事情:

  • 表名'确实是该名称,因为只有在与反义词一起转义时它才起作用。就像我在上面的SQLInjection示例中所做的一样。
  • --已定义,打开标签在它们上方。我通常会将其简化为简化的示例代码。但这值得问。显然,如果这些未定义,则无法连接到数据库。

干杯!

答案 1 :(得分:-1)

您在这里有一些语法错误。 不过,最重要的是,先检查mysqli_(或PDO),然后开始使用它代替mysql_ 为什么要使用mysqli_-MySQL vs MySQLi when using PHP 比较mysqli_和PDO-https://websitebeaver.com/php-pdo-vs-mysqli

将其排除在外......

您在定义数据库连接时未选择任何模式,但是没有在查询中引用您的模式,这意味着mysql将不知道要更新什么。在连接或每个查询中引用您的架构。还要检查您的表名,真的是Buttons(SUMA)吗?

您将数据库连接定义为$ link,但是正在使用$ conn尝试查询。可能是复制和粘贴的“错别字”。小心这一点...

正如Phoenix艺术提到的那样,您必须确保您的栏不能设置为NULL,并且从0开始。在进行此操作时,请确保将您的数据类型设置为int以作为增量计数。

如果没有成功,则进行了这些更改之后,我将尝试在数据库管理器中的代码外部运行查询,以确保该部分对数据有预期的影响,然后再查看代码中的错误

我猜这是正确的传递给脚本的方法,但是要确认,您总是可以在后端回显它,并且可以确保在传递之前在JS中使用alert()。

花些时间阅读一下,更新脚本以使用mysqli_或PDO,如果仍然遇到问题,我很乐意回到这里为您提供进一步的帮助。