【问题标题】:Passing JS-array to PHP, then updating MySQL将 JS-array 传递给 PHP,然后更新 MySQL
【发布时间】:2013-07-17 14:08:04
【问题描述】:

我有问题。到目前为止的故事:

PHP1 从数据库中读取一个仅包含整数的数组 - 它具有以下形式:
[0, 70, 44, ...]

由于它包含的实体数量不同,我希望能够读取整个数组并将其存储到数据库的一个单元格中 - 解决方案不能忽视这一点。

PHP1 包含一些 JS,允许用户在网站上做某事,这会改变数组中的一个实体,从而使其成为,例如;
[0, 75, 44, ...]

到目前为止,一切都很好。

现在我想用这个新数组替换数据库中的那个,这是我未能实现的中心目标。


我目前正在使用的东西 - 不起作用:

PHP1 执行一些 AJAX 魔法,并将这个数组发送到 PHP2,它工作正常:

var arrayX = [0, 75, 44, ...];
var arrayY = JSON.stringify(arrayX);

$.ajax({
    url: 'PHP2.php',
    type: 'post',
    data: {arrayY: arrayY }
});

PHP2 然后连接到数据库,并尝试通过以下方式使用新数组更新该单元格,但这不起作用(!):

$arrayZ = json_decode($_POST['arrayY'], true);

mysql_query("UPDATE userbase SET db_column = $arrayZ WHERE id=0", $con);

mysql_close($con);

我已经尝试在 PHP2 中序列化 $arrayZ,以及我在 Stackoverflow 上找到的一整套其他解决方案,但它们都不起作用(或者我当然没有正确应用它们)现在我找到了自己死心塌地……


我希望你的才能比我自己的更进一步!

【问题讨论】:

  • 您的数据库架构有缺陷 - 拥有多值单元格是一个可怕的想法。
  • “不工作”并不多...请提供更多信息为什么它不工作
  • 请做一个 print_r($_POST);在 PHP2 的顶部并在此处发布您的输出。
  • 看来你不需要 JSON.stringify 因为它已经是 json
  • 史蒂文,这是我得到的: Array ( [arrayZ] => [1,70] )
    警告:无法修改标头信息 - 标头已发送by (输出开始于 .../PHP2.php:3) 在 .../PHP2.php5

    警告:session_start() [function.session-start]:无法发送会话缓存限制器 - 标头已发送(输出开始于... /PHP2.php:3) 在 .../PHP2.php7

标签: php javascript jquery mysql json


【解决方案1】:

我假设 db_column 包含一个字符串值,因此您可能只需要在 SQL 字符串中为 $arrayZ 加上引号。

mysql_query("UPDATE userbase SET db_column = '$arrayZ' WHERE id=0", $con);

但正如 Fake51 指出的那样,您的数据库架构存在缺陷。

此外,您容易受到 SQL 注入攻击。

【讨论】:

  • 那么数据库只包含“数组”,而不是实际的数组。
  • @victor 创建一对多关系来存储这些值。你在这里做的是一个坏主意。
猜你喜欢
  • 2020-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-10
  • 2017-12-12
  • 2017-05-05
  • 1970-01-01
  • 2015-02-20
相关资源
最近更新 更多