【问题标题】:Passing json to php and updating mysql将 json 传递给 php 并更新 mysql
【发布时间】:2012-12-03 08:18:46
【问题描述】:

我正在尝试通过 json 将图像坐标传递给应该更新数据库的 php 文件。 我在 jquery 中有这个:

var coords=[];  
var coord = $(this).position();  
var item = { coordTop:  coord.top, coordLeft: coord.left  };  
coords.push(item);  
var order = { coords: coords };  
$.ajax({   
    type: "POST",
    data : +$.toJSON(order), 
    url: "updatecoords.php",   
    success: function(response){
        $("#respond").html('<div class="success">X and Y Coordinates 
            Saved</div>').hide().fadeIn(1000);  
        setTimeout(function(){ 
            $('#respond').fadeOut(1000); 
        }, 2000);  
    }
});

这是 updatecoords.php 的样子:

<?php

$db = Loader::db(); 

$data = json_decode($_POST['data']); 
foreach($data->coords as $item) {  

    $coord_X = preg_replace('/[^\d\s]/', '', $item->coordTop);  
    $coord_Y = preg_replace('/[^\d\s]/', '', $item->coordLeft);  

    $x_coord = mysql_real_escape_string($coord_X); 
    $y_coord = mysql_real_escape_string($coord_Y);

    $db->Execute("UPDATE coords SET x_pos = '$x_coord', y_pos = '$y_coord'");
}  

?>  

从 javascript 中显示成功消息,但是数据库中没有任何更新? 有什么想法吗?

【问题讨论】:

  • 你有记录吗?现在您的查询看起来应该更新表中的所有记录。另外,Loader 来自哪里?
  • 如果我手动设置行,那么它们的调用方式如下:$db= Loader::db(); $posimg = $img-&gt;getFileID(); $get_coords = $db-&gt;Execute("SELECT * FROM coords WHERE id = '$posimg'"); while ($row = $get_coords-&gt;FetchRow()) { $x = $row['x_pos']; $y = $row['y_pos']; } 但我无法使用通过 JSON 发送的坐标来更新行。

标签: php mysql json


【解决方案1】:

$.toJSON 之前有一个 +。这意味着它返回的 json 字符串将被转换为整数 - 可能是 0 或 NaN。

【讨论】:

  • 它需要是一个整数,因为我这样称呼它:$x = $row['x_pos']; $y = $row['y_pos'] `
  • 不,JSON 应该是一个字符串。它看起来像 {"coords":{...}}。在它破坏整个字符串并使其成为 NaN 之前添加 +。如果您需要整数,请在构建 item/coords 对象之前解析每个坐标,或者让 php 将它们转换为整数。
【解决方案2】:

Alex 是对的,但您也可以从 preg_replace 模式中去掉引号。 PHP 自然地使用 /.../ 斜杠来“引用”正则表达式。

【讨论】:

  • 感谢您的帮助!不幸的是,这并没有成功:(
  • 您的 UPDATE 语句中没有 WHERE 子句。您是否打算更新表格的所有行?
【解决方案3】:

试试这个

  UPDATE coords SET x_pos = '".$x_coord."', y_pos = '".$y_coord."'

看看这里如何使用toJSON

编辑:

试试这个

 $.ajax({   
type: "POST",
data : { coordTop:  coord.top, coordLeft: coord.left ,coords: coords }, 

在第二个代码中这样做

   $data = json_decode($_POST['data']); 
   $coordTop = mysql_real_escape_string($_POST['coordTop']);
   $coordLeft = mysql_real_escape_string($_POST['coordLeft']);
   $coords = mysql_real_escape_string($_POST['coords']);
  foreach(.........
  .....
  .....

然后使用这些变量 $coordTop , $coordLeft , $coords

【讨论】:

  • 感谢您的建议,但恐怕对此并不满意。
【解决方案4】:

感谢您的帮助,但这似乎可以解决问题....

在javascript中:

$.post('updatecoords.php', 'data='+$.toJSON(order), function(response){ alert (response + mydata);

在 Updatecoords.php 中:

$data = json_decode(stripcslashes($_POST['data']));  

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签