2010-07-11 3 views
0

Je trier une liste et utiliser ajax pour mettre à jour une base de données. Je besoin d'aide pour l'analyse de la chaîne, c'est la chaîne de requête que je dois analyser:problèmes 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 

J'ai mis john = salut à tester pour voir si la chaîne est effectivement envoyé via ajax au fichier processor.php . Je suis capable d'obtenir la variable john = hi de l'URL, donc la chaîne de requête est envoyée parfaitement bien. Ceci est mon code jusqu'à présent, mais je ne peux pas sembler accéder aux données dont j'ai besoin, il apparaît comme si rien est là:

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

Vous pouvez utiliser foreach ($ array comme $ key => $ value) au lieu d'une boucle for. – Christian

Répondre

1

$_GET['images_list'] est un tableau d'entiers. Il n'y a rien à analyser là-bas, PHP déjà fait pour l'utiliser. Donc, passez la partie parse_str et utilisez facilement $_GET['images_list'] au lieu de $images_list.

Code entier:

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

Pourquoi utilisez-vous parse_str()? $_GET['images_list'] doit contenir un tableau pas une chaîne.

Votre code doit être:

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

montre également pour injection SQL! J'ai utilisé mysql_escape_string() pour résoudre ce problème.

+0

mysql_escape_string est obsolète (http://php.net/manual/fr/function.mysql-escape-string.php) – Anax

+0

Désolé, cela signifiait mysql_real_escape_string - corrigé. Pourquoi ai-je obtenu un -1? Au moins, je l'ai conseillé avant que quelqu'un ne suive ... – Christian