2010-07-11 90 views
0

Im排序列表并使用ajax更新数据库。我需要帮助解析字符串,这是我需要解析查询字符串:parse_str问题

images_list[]=32&images_list[]=95&images_list[]=97&images_list[]=96&images_list[]=102&images_list[]=103&images_list[]=99&images_list[]=101&images_list[]=98&john=hi 

我已经把约翰=喜来测试是否该字符串实际上是被通过AJAX发送到processor.php文件。我能够从url中获取变量john = hi,所以查询字符串被完美地发送出去。这是到目前为止我的代码,但我似乎无法访问我所需要的数据,看起来仿佛无所不有:

<?php 
//Connect to DB 
require_once('connect.php'); 

parse_str($_GET['images_list']); 
for ($i = 0; $i < count($images_list); $i++) { 
    $id = $images_list[$i]; 
    mysql_query("UPDATE images SET ranking = '$i' WHERE id = '$id'"); 
    echo $images_list[$i]; 
} 
?> 
+0

您可以使用foreach($ array作为$ key => $ value)而不是for循环。 – Christian 2010-07-11 21:48:42

回答

1

$_GET['images_list']是一个整数数组。没有什么可以解析的,PHP已经可以使用了。因此,跳过parse_str部分并轻松使用$_GET['images_list']而不是$images_list

整个代码:

<?php 
//Connect to DB 
require_once('connect.php'); 

foreach ($_GET['images_list'] as $i => $id) { 
    mysql_query("UPDATE images SET ranking = ".mysql_real_escape_string($i)." WHERE id = ".mysql_real_escape_string($id)); 
    echo $id; 
} 
?> 
0

你为什么要使用parse_str()$_GET['images_list']应该包含一个不是字符串的数组。

你的代码应该是:

<?php 
//Connect to DB 
require_once('connect.php'); 

for ($_GET['images_list'] as $i=>$id) { 
    mysql_query("UPDATE images SET ranking = '".mysql_real_escape_string($i)."' WHERE id = '".mysql_real_escape_string($id)."'"); 
    echo $id; 
} 
?> 

同时还要注意SQL注入!我用mysql_escape_string()来解决这个问题。

+0

mysql_escape_string已弃用(http://php.net/manual/en/function.mysql-escape-string.php) – Anax 2010-07-11 21:55:07

+0

对不起,意思是mysql_real_escape_string - 固定的。为什么我得到-1?至少,我在有人效仿之前就提出过建议...... – Christian 2010-07-11 22:00:59