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

Bibliothèques & Frameworks Discussion :

Ajax.request & apostrophes dans un formulaire et Inplace.editor & HTML [Fait]


Sujet :

Bibliothèques & Frameworks

  1. #1
    Tsu
    Tsu est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 24
    Points : 11
    Points
    11
    Par défaut Ajax.request & apostrophes dans un formulaire et Inplace.editor & HTML
    Bonsoir,

    Derrière ce titre à rallonge se cache deux questions soulevées par des problèmes :

    [RÉSOLU] Problème A - Ajax.Request et les apostrophes.

    J'ai fait un script (à partir de sources à droite à gauches) qui permet de valider un formulaire sans recharger la page, grâce à Ajax.Request.
    Le script alimente donc bien ma base de donnée SAUF quand je mets des caractères spéciaux (comme ') dans les imput text ou les textarea de mon formulaire.
    Si je place un antislash avant le ', ça passe, mais avouez que c'est très contraignant lors de l'alimentation d'une base de donnée !

    Voici le code :
    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
     
    <script type="" language="javascript">
    function SendForm(){
    ('BTsubmit').value='en cours ...';
     
    new Ajax.Request('test3.php',{
    method: 'post',
    asynchronous: true,
    contentType: 'application/x-www-form-urlencoded',
    encoding: 'UTF-8',
    parameters: { 
    	titre : $F("titre"),
    	message: $F("message")
    			},
    onSuccess: function(){MailOK();},
    onFailure: function(){}
    });
     
    function MailOK(){
    $('BTsubmit').style.visibility = 'hidden';
    $('BTsubmit').style.display = 'none';
    $('textOK').style.visibility = 'visible';
    $('textOK').style.display = 'block';
    }
    }
    </script>
    TextOK étant une DIV.

    Le Problème A est résolu, le soucis venait de ma requete mySQL de test3.php qui était mal formatée !

    Le problème B subsiste toujours cependant.

    Problème B - Ajax.InPlaceEditor et le HTML.

    Second problème, j'utilise la fonction Ajax.InPlaceEditor pour éditer à la volée du contenu dans une page d'administration quelconque d'un site quelconque. Je récupère donc la valeur actuellement contenue dans l'enregistrement de ma base donnée.

    J'utilise par exemple le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    new Ajax.InPlaceEditor('fc_gauche_edit', 'test2.php?idreff=adresse', {rows:15,cols:15,cancelText:"Annuler",okText:"Valider",savingText:"Enregistrement en cours ...",clickToEditText:"Cliquez ici pour éditer le contenu"});
    Je récupère bien le retour chariot, mais PAS les balises HTML enregistrées dans la BDD. Du coup, je perd lors de l'édition tout formatage de texte en HTML(strong, br et compagnie). Avouez que c'est encore un soucis pour un script d'administration


    Pour ces deux soucis, pourriez-vous m'éclairer ? Je pense que ce n'est pas grand chose, mais mes recherches sont restées infructueuses jusqu'à présent.

    Je vous remercie du temps que vous accordez à mon soucis,
    Sébastien.

  2. #2
    Tsu
    Tsu est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 24
    Points : 11
    Points
    11
    Par défaut
    maj, le problème A est résolu, mais pas le B. Et il m'ennuie vraiment, il me manque plus ça pour avancer dans mon site

  3. #3
    Tsu
    Tsu est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 24
    Points : 11
    Points
    11
    Par défaut
    Je me permet de relancer mon sujet

  4. #4
    Membre expérimenté
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Points : 1 333
    Points
    1 333
    Par défaut
    Les balises HTML ne sont pas renvoyées ou pas visibles dans la textarea ?
    Dans ton script php test2.php, tu remplaces les '<' par &lt; et les '>' par &gt; ?

  5. #5
    Tsu
    Tsu est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 24
    Points : 11
    Points
    11
    Par défaut
    Bonsoir gwyohm,

    Les balises ne sont pas visibles et pas renvoyées : quand je clique sur la partie à éditer, le formulaire ne retourne pas les balises HTM ; si je valide sans rien toucher, le formatage HTML disparait.

    Le contenu de ma page test2.php est (en gros):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    mysql_select_db($database_jj, $jj);
    $sql = 'update jj_presentation set texte = "'.$_POST["value"].'" where type = "'.$_GET["idreff"].'"';
    $result = mysql_query($sql) or die(mysql_error());
    echo nl2br($_POST["value"]);
    Il me semblait cependant que c'était quelque chose à régler côté JS non ? sur le code même de prototype ? Ou via un paramètre qui réglerait le problème ?

  6. #6
    Membre expérimenté
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Points : 1 333
    Points
    1 333
    Par défaut
    Bonsoir,

    Effectivement je fais une erreur, le contenu édité est pris directement de la balise éditée.

    Après avoir regardé rapidement la doc
    http://wiki.github.com/madrobby/scri...-inplaceeditor
    Il y a la solution à ton problème : recherche
    Using HTML within the In Place Editor...
    @+

  7. #7
    Tsu
    Tsu est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 24
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    J'avais déjà testé cette solution, mais sans succès. J'ai ressayé, toujours rien.
    Après avoir chargé ma librairie rototype, je charge un fichier js qui contient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Object.extend(Ajax.InPlaceEditor.prototype, {
        onLoadedExternalText: function(transport) {
            Element.removeClassName(this.form, this.options.loadingClassName);
            this.editField.disabled = false;
            this.editField.value = transport.responseText;
            Field.scrollFreeActivate(this.editField);
        }
    });
     
    Object.extend(Ajax.InPlaceEditor.prototype, {
        getText: function() {
            return this.element.childNodes[0] ? this.element.childNodes[0].nodeValue : '';
        }
    });
    Comme stipulé, mais le soucis est toujours là.

    Etant débutant en JS, j'ai peut être raté quelque chose ?

  8. #8
    Membre expérimenté
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Points : 1 333
    Points
    1 333
    Par défaut
    J'ai fait quelques tests avec le composant scriptaculous, avec ou sans html, je n'observe pas tes problèmes. Tu peux donner un peu de code ?

  9. #9
    Tsu
    Tsu est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 24
    Points : 11
    Points
    11
    Par défaut
    Très bien, voici un peu plus de code :

    J'ai donc dans mon code HTML ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <div id="fc_gauche"><p id="fc_gauche_edit"><?php echo nl2br($row_jeFanclubAdresse['texte']); ?></p></div>
     
      <script type="text/javascript">
    	new Ajax.InPlaceEditor('fc_gauche_edit', 'traitement_admin.php?adminaction=edit_fc&idreff=adresse', {rows:15,cols:15,cancelText:"Annuler",okText:"Valider",savingText:"Enregistrement en cours ...",clickToEditText:"Cliquez ici pour éditer le contenu"});
    </script>
    $row_jeFanclubAdresse['texte'] récupère du texte contenu dans la base de donnée, dans un champs de type LONGTEXT.

    Ensuite, la partie traitement_admin.php?adminaction=edit_fc&idreff=adresse contient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	if($_GET["adminaction"] == "edit_fc") {
    		mysql_select_db($database_jj, $jj);
    		$sql = 'update jj_description set texte = "'.$_POST["value"].'" where type = "'.$_GET["idreff"].'"';
    		$result = mysql_query($sql) or die(mysql_error());
    		echo nl2br($_POST["value"]);
    	}
    Le soucis est donc que quand je clique sur mon div p à éditer, je ne récupère pas dans le TEXTAREA les balises HTML que j'enregistre dans ma base de donnée; même si je les ajoute par une edition, si je décide de rééditer une seconde fois, les balises disparaissent.

    Merci du temps que tu m'accordes.
    Séb.

  10. #10
    Membre expérimenté
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Points : 1 333
    Points
    1 333
    Par défaut
    Je ne vois rien de spécial dans ce que tu fais;
    As tu essayé avec la dernière version de prototype et scriptaculous ? Le code HTML de départ est je suppose propre (les balises sont bien fermées, id uniques... ). Essaye quelque chose de statique dans un premier temps ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <div id="fc_gauche"><p id="fc_gauche_edit">Du texte en dur</p></div>
    puis avec un tout petit peu de HTML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <div id="fc_gauche"><p id="fc_gauche_edit">Du texte en <strong>gras</strong></p></div>
    sinon envoies toujours du code généré (de <div id="fc_gauche"> à </div>

  11. #11
    Tsu
    Tsu est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 24
    Points : 11
    Points
    11
    Par défaut
    J'ai fait exactement ce que tu m'as dis, et même avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <div id="fc_gauche"><p id="fc_gauche_edit">Du texte en <strong>gras</strong></p></div>
    Quand je clique sur la zone, les balises <strong> ne s'affichent plus :s

    Au passage, un peu de hors sujet, je n'arrive pas à concatener deux morceaux dans ma fonction : je souhaite concatener mon texte en dur et une variable pasée en paramètre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function supprimeralbum(id){ 
    new Ajax.Request('traitement_admin.php?adminaction=supprimer_album' + id,{
    onSuccess: function(){chargerPage('tournees.php','contenudynamique');},
    onFailure: function(){}
    });
    }
    id est appelée comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<span class="supprimer"><a href="#supprimerAlbum" onclick="supprimeralbum(\''.$row_R['id'].'\')">Supprimer</a></span>
    Désolé du hors sujet

Discussions similaires

  1. [AC-2010] Problème apostrophe dans un formulaire
    Par redojackson dans le forum VBA Access
    Réponses: 6
    Dernier message: 26/05/2013, 14h23
  2. a propos de l'apostrophe dans un formulaire
    Par bobafric dans le forum IHM
    Réponses: 8
    Dernier message: 10/10/2009, 18h59
  3. Apostrophe dans un formulaire
    Par Oxygan dans le forum Langage
    Réponses: 5
    Dernier message: 07/09/2009, 19h16
  4. Réponses: 9
    Dernier message: 07/07/2008, 15h53
  5. [MySQL] Traitement apostrophe dans zone formulaire de type Text
    Par dfournier dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 08/11/2006, 16h14

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