Project

General

Profile

Anomalie #3248

Les fonctions parametre_url (js et php) n'insèrent pas correctement les tableaux

Added by Michel Bystranowski about 5 years ago. Updated almost 5 years ago.

Status:
Fermé
Priority:
Normal
Assignee:
-
Category:
-
Target version:
Start date:
07/26/2014
Due date:
% Done:

100%

Resolution:
Navigateur:

Description

L'appel

parametre_url('http://domaine/spip.php?t[]=1','t',array(0,2));

retourne
http://domaine/spip.php?t[]=1&t[]=0&t[]=2

au lieu de
http://domaine/spip.php?t[]=0&t[]=2

Ce problème est présent à la fois dans la version javascript et la version php. Je n'ai testé que sur SPIP 3.0.16.

J'ai un patch qui corrige ça dans les deux cas.

Pour le javascript, il y a une regexp mal échappée, et un appel à la fonction substring avec un index négatif, ce qui n'est pas permis, seule la fonction substr le permet… (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substring)

Et dans les deux cas, il faut bien vider les valeurs initiale du tableau dans l'url avant d'ajouter les nouvelles valeurs.

Je joins des fichiers corrigés, et voici un patch :

2 files changed, 9 insertions(+), 3 deletions(-)
 2014/ecrire/inc/utils.php             | 5 +++++
 2014/prive/javascript/ajaxCallback.js | 7 ++++---

    Modified   2014/ecrire/inc/utils.php
diff --git a/2014/ecrire/inc/utils.php b/2014/ecrire/inc/utils.php
index b875aa2..01a7f53 100644
--- a/2014/ecrire/inc/utils.php
+++ b/2014/ecrire/inc/utils.php
@@ -333,6 +333,11 @@ function parametre_url($url, $c, $v=NULL, $sep='&') {
                 $url[$n] = $r[1].'='.$u;
                 unset($ajouts[$r[1]]);
             }
+            // Pour les tableaux on laisse tomber les valeurs de
+            // départ, on remplira à l'étape suivante
+            else {
+                unset($url[$n]);
+            }
         }
     }

    Modified   2014/prive/javascript/ajaxCallback.js
diff --git a/2014/prive/javascript/ajaxCallback.js b/2014/prive/javascript/ajaxCallback.js
index 118fc31..de434c4 100644
--- a/2014/prive/javascript/ajaxCallback.js
+++ b/2014/prive/javascript/ajaxCallback.js
@@ -809,7 +809,7 @@ function parametre_url(url,c,v,sep,force_vide){
     }
         else
             a=url;
-    var regexp = new RegExp('^(' + c.replace('[]','\[\]') + '\[?\]?)(=.*)?$');
+    var regexp = new RegExp('^(' + c.replace('[]','\\[\\]') + '\\[?\\]?)(=.*)?$');
     var ajouts = [];
     var u = (typeof(v)!=='object')?encodeURIComponent(v):v;
     var na = [];
@@ -829,11 +829,12 @@ function parametre_url(url,c,v,sep,force_vide){
             }
             // Ajout. Pour une variable, remplacer au meme endroit,
             // pour un tableau ce sera fait dans la prochaine boucle
-            else if (r[1].substring(-2) != '[]') {
+            else if (r[1].substr(-2) != '[]') {
                 na.push(r[1]+'='+u);
                 ajouts.push(r[1]);
             }
-            else na.push(args[n]);
+            /* Pour les tableaux ont laisse tomber les valeurs de départ, on
+                 remplira à l'étape suivante */
         }
         else
             na.push(args[n]);

utils.php View (76 KB) Michel Bystranowski, 07/26/2014 01:09 PM

ajaxCallback.js (29.4 KB) Michel Bystranowski, 07/26/2014 01:09 PM

Associated revisions

Revision 21592 (diff)
Added by cedric@yterium.com almost 5 years ago

Fix #3248 : correction de parametre_url sur les tableaux (patch de Michel B.)

History

#1 Updated by cedric - almost 5 years ago

  • Target version set to 3.0

#2 Updated by cedric - almost 5 years ago

  • Status changed from Nouveau to Fermé
  • % Done changed from 0 to 100

Appliqué par commit r21592.

#3 Updated by cedric - almost 5 years ago

  • Status changed from Fermé to Nouveau
  • Target version changed from 3.0 to 3.1

#4 Updated by cedric - almost 5 years ago

  • Status changed from Nouveau to Fermé

Also available in: Atom PDF