PHP5.2 - Get - Paramètre crypté tronqué ?

Petit nouveau ! | 8 Messages

24 avr. 2009, 10:46

Bonjour,

J'ai une page qui affiche des résultats par paquets avec des liens précédent / suivant pour naviguer dedans en mode AJAX. Ces liens ne fonctionnent plus en php 5.2 (du moins je pense que ça vient de là car je ne vois pas d'autres évolutions liées à ce mécanisme).
Dans le détail :
Le clic sur "précédent" ou "suivant" appelle une fonction Javascript que je copie là :

Code : Tout sélectionner

function liste_images(condition,page_courante) { var XHR = new XHRConnection(); XHR.appendData("condition", condition); XHR.appendData("page_courante", page_courante); XHR.sendAndLoad("/photos_numerisees.do.php", "GET", affiche_images); }
Extrait du code PHP appelé :

Code : Tout sélectionner

$condition = $_REQUEST['condition']; $page_courante = $_REQUEST['page_courante']; file_put_contents(RACINE."\\_debug.txt", $condition.' - ',FILE_APPEND); (puis la condition est décryptée et utilisée dans la requête de recherche
Le paramètre condition est crypté (avec des md5 et des base64decode).
Le problème semble se situer dans la récupération de ce paramètre.
Quand je le récupère dans les traces :
- à sa création il vaut quelque chose comme "...1JIUBoASg4nUDpXPQY+Bm1SIgZ0VHA..."
- à sa récupération dans le GET, un saut de ligne remplace le "+" : "1JIUBoASg4nUDpXPQY Bm1SIgZ0VHA"

Est-ce que ça dit quelque chose à quelqu'un ?
Merci...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

24 avr. 2009, 10:51

Je ne pense pas que ce soit lié à la version de php, mais simplement au fait qu'un + dans une url est assimilé à un espace s'il n'est pas encodé...

La fonction JS encodeURIComponent() devrait te permettre d'encoder ta chaine pour pouvoir l'envoyer via l'url en ajax :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 8 Messages

24 avr. 2009, 11:01

OK. Je le décode comment dans mon php après ? (oui je débute)
Edit : OK. URLdecode. ça fonctionne.
Merci pour la réactivité même si la cause de la régression m'intrigue toujours...

Complément : j'ai vérifié en prod (en php4), j'ai aussi des "+" dans ma condition cryptée. Pourtant ça passe bien. Au niveau de JavaScript, la fonction appendData utilise la fonction escape.

Code : Tout sélectionner

this.appendData = function(pfield, pvalue) { datas += (datas.length == 0) ? pfield+ "=" + escape(pvalue) : "&" + pfield + "=" + escape(pvalue); };