IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AJAX Discussion :

[AJAX] "&" mal encodé peut-être ?


Sujet :

AJAX

  1. #1
    Invité
    Invité(e)
    Par défaut [AJAX] "&" mal encodé peut-être ?
    Bien le bonjour à tous !

    Voilà le topo :
    Un souci réside entre ajax et un & qui ne s'entendent pas.

    Contexte :
    Pour un panel d'admin, je gère les contenus d'un site.
    Tout se fait en ajax.

    Cheminement :
    Lien pour modifier le contenu
    -> [ajax] Choix du menu à modifier dans un select
    -> [ajax après sélection du menu] Choix du type de contenu à gérer (Fiche de présentation et tarifs) avec chacun un bouton radio
    -> [ajax après clic sur un des boutons radios] J'affiche un ckeditor qui auparavant fais un ajax dans la db pour récupérer le contenu existant afin de l'afficher dans son iframe.

    Le point de trouble se situe dans la dernière action : récupérer le contenu.
    Avant tout, sachez que les doutes premiers ne sont plus (le fichier existe bien...), et donc voici le code du ckeditor avec récupération du contenu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function createEditor(c_men_id,c_ct_id)
    {
    	if ( editor )
    		return;
     
    	$.ajax({ 
    		url: 'ajax_13269b7bb7aa9cc07dc8b4e114699db42c92bcb7/global_ajax.php?file=content/get_content.php-QM-c_men_id='+c_men_id+'-AMP-c_ct_id='+c_ct_id,
    		success: function(data){
    			// Create a new editor inside the <div id="editor">
    			editor = CKEDITOR.appendTo('editor');
    			editor.setData(data);
          	}});
    }
    Et voici le code de global_ajax.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    <?php
    try {
    	#First configs
    	require_once(dirname(__FILE__).'/../../config.php');
    	#Menu position
    	require_once(dirname(__FILE__).'/../../men_position.php');
    	#Autoload
    	require_once(dirname(__FILE__).'/../../autoload.php');
     
    	#Database object
    	$db = DB_Manager::getInstance();
     
    	#Html templates
    	require_once(dirname(__FILE__).'/templates.php');
    	$tpl = new Template($db);
     
    	$html = '';
    	if(!isset($file)) {
    		#File from ajax but not passed from control_tower
    		if(isset($_GET['file']))
    			$file = str_replace('-QM-','?',str_replace('-AMP-','&',$_GET['file']));
    	}
    	require_once(dirname(__FILE__).'/'.$file);
    }
    catch(DB_Exception $e) {
    	$html = $e->get_message();
    }
     
    echo $html;
    ?>
    Tout de suite, je vous vois d'un oeil hagard : -QM-, -AMP- c'est étrange !
    Vu que le nom du fichier est passé en paramètre si je rajoute ? ou &, une mésentente se produira pour passer les paramètres pour get_content.php.

    En sommes, global_ajax.php s'occupe de transcrire le -QM- en ? et le -AMP- en & (oui, preg_match vaut mieux qu'un str_replace mais ne nous égarons pas) mais le & n'est pas compris.

    Je suppose fortement le & d'être compris comme &amp; se qui fausse la donne.
    Dans cette idée, j'ai mis du html_entity_decode(), du urlencode(), du utf8_decode(), du "&"#038; mais rien de tout ça n'a pas fait effet.

    Sachant que j'ai déjà tenter de faire appel à la page sans paramètre, celle-ci s'affiche bien donc le passage de paramètres et, je pense fortement, le fautif de l'histoire.

    J'aurais besoin d'un coup de main ou d'une illumination de votre part, quelqu'un est-il partant pour tester autre chose ?

    Merci d'avance à vous.

    Au plaisir.

    Steve.

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    J'imagine que le = dans les paramètres doit être perturbateur...
    Ceci dit, je pense que ça fonctionnerait convenablement en faisant juste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    url: 'ajax_13269b7bb7aa9cc07dc8b4e114699db42c92bcb7/global_ajax.php?file='+encodeURIComponent('content/get_content.php?c_men_id='+c_men_id+'&c_ct_id='+c_ct_id)
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Invité
    Invité(e)
    Par défaut
    Héhéhé ! Merci bien, j'en apprends une pour le coup

    Bonne prog et au plaisir.

    Steve.

    Edit : Le fichier était resté introuvable car le require_once se faisait sur l'ensemble du fichier avec les paramètres.

    Pour la résolution, voici le petit bout de code en plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    <?php
    try {
    	#First configs
    	require_once(dirname(__FILE__).'/../../config.php');
     
    	#Menu position
    	require_once(dirname(__FILE__).'/../../men_position.php');
     
    	#Autoload
    	require_once(dirname(__FILE__).'/../../autoload.php');
     
    	#Database object
    	$db = DB_Manager::getInstance();
     
    	#Html templates
    	require_once(dirname(__FILE__).'/templates.php');
    	$tpl = new Template($db);
     
    	$html = '';
    	if(!isset($file)) {
    		#File from ajax but not passed from control_tower
    		if(isset($_GET['file'])) {
    			$file = urldecode($_GET['file']);
    			if(sizeof(explode('?',$file)) > 1) {
    				list($file,$str_params) = explode('?',$file);
    				$params = array();
    				foreach(explode('&',$str_params) as $str_param) {
    					list($key,$value) = explode('=',$str_param);
    					$params[$key] = $value;
    				}
    			}
    		}
    	}
    	require_once(dirname(__FILE__).'/'.$file);
    }
    catch(DB_Exception $e) {
    	$html = $e->get_message();
    }
     
    echo $html;
    ?>
    Dernière modification par Invité ; 21/03/2010 à 19h35. Motif: Ajout de la résolution

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 29/03/2016, 11h14
  2. [MySQL] Problème MYSQL php ou peut-être ajax. je ne sais pas.
    Par reventlov dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 16/06/2015, 18h29
  3. IHM dans Play! [AJAX peut être ?]
    Par sarazinj dans le forum Play!
    Réponses: 3
    Dernier message: 09/03/2012, 11h19
  4. Problème parent, notion peut-être mal comprise
    Par Oxygn44 dans le forum Langage
    Réponses: 4
    Dernier message: 13/11/2008, 10h11
  5. Réponses: 1
    Dernier message: 30/04/2007, 15h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo