Preview d'un formulaire (PHP+javascript)

Bonjour,

Je ne sais pas si je suis dans le bon forum, parce que j'utilise PHP et javascript et je ne sais pas ou est vraiment le problème... je m'explique, j'aimerais faire un préview d'un formulaire, j'utilise le javascript pour récupéré mais après je dois transformé à l'aide de fonction php car il y avait du bbcode et je veux donc voir ce que ca donne, l'ennui c'est que comme la javascript c'est coté client, mes fonctions php ne peuvent rien modifier dessus et ca affiche donc tel quel ce qui était dans le formulaire.... voila mon code

$date = '<script language="javascript">document.write(window.opener.document.post.form_date.value);</script>';
$news = '<script language="javascript">document.write(window.opener.document.post.form_news.value);</script>';

echo '<span class="texte"><strong>'.$date.' :</strong> '.Filtre_afficher($news).'</span>';


la fonction Filtre_afficher de PHP n'a aucun impact alors qu'elle fonctionne pourtant très bien si je mets du texte directement dans la variable $news, j'ai fait l'essai pour vérifier ma fonction ! Donc ce n'est pas ma fonction qui déconne...

Si quelqu'un peut m'aider...
Merci
A+

8 réponses

  1. Modérateur
    Salut,

    Je suis pas certain d'avoir bien compris ton truc.
    Admettons que j'ai compris :-)

    Lorsque la page sera appelée, le php agira comme ça:
    $date = '<script language="javascript">document.write(window.opener.document.post.form_date.value);</script>';
    $news = '<script language="javascript">document.write(window.opener.document.post.form_news.value);</script>';


    $news et $date prendront ça comme des chaines telles qu'elles : document.write...etc, et pour cause: l'affectation de $news et $date se passe côté serveur, donc ce Javascript n'a pas encore été interpété par un navigateur, ce n'est rien d'autre qu'une chaîne de caractère.

    La suite logique des choses :
    echo '<span class="texte"><strong>'.$date.' :</strong> '.Filtre_afficher($news).'</span>';


    $date retournera :
    $date = '<script language="javascript">document.write(window.opener.document.post.form_date.value);</script>';
    // Et non pas le Javascript interprété

    ..et c'est le même genre de truc pour $news. Ensuite, ce que va filtrer Filtre_afficher($news) n'est rien d'autre que du Javascript non interprété, car si tu as bien suivi, c'est l'équivalent de :
    Filtre_afficher('<script language="javascript">document.write(window.opener.document.post.form_news.value);</script>'

    Et evidemment ya pas de BBcode là dedans, donc rien ne sera filtré.

    Au final, voici ce que va te retourner cette portion de code Php:
    <span class="texte"><strong><script language="javascript">document.write(window.opener.document.post.form_date.value);</script>
    :</strong> <script language="javascript">document.write(window.opener.document.post.form_news.value);</script>
    </span>


    Si tu regardes la source de ta page sur ton navigateur, tu verras sûrement ça...si j'ai bien compris ton truc. Si c'est le cas j'espère que tu vois aussi...

    Sm95ZXVzZXMgZup0ZXMgOi0p
    0
    1. Modérateur
      Donc le truc : soit tu fais ton filtre en Javascript.

      Soit tu envoies ton formulaire vers un autre page (ou la même) et tu récupères les données de ton formulaire avec le tableau $_GET (ou $_POST, selon la methode que tu as utilisée).
      Là tu filtres ces variables en php puis tu mets tout ça en forme dans une variable
      $preview puis "echo $preview".

      Sm95ZXVzZXMgZup0ZXMgOi0p
      0
      1. oui tu as bien compris kilian ! lol
        Je sais c'est un peu compliqué, et je savais pas trop comment expliquer mais apparement je m'en suis pas mal sortis vu que t'as compris...

        Ben pour faire le filtre en javascript, j'y arriverais pas, je connais pas assez...
        ma fonction en PHP, c'est des truc du style :
        function Filtre_afficher($chaine)
        {
        $chaine = @stripslashes(@nl2br($chaine));
        $chaine = preg_replace("#\[img\]((ht|f)tp://)([^\r\n\t<\"]*?)\[/img\]#sie", "'<img src=\\1' . str_replace(' ', '%20', '\\3') . '>'", $chaine);
        $chaine = preg_replace("#\[url\]((ht|f)tp://)([^\r\n\t<\"]*?)\[/url\]#sie", "'<a href=\"\\1' . str_replace(' ', '%20', '\\3') . '\" target=_blank>\\1\\3</a>'", $chaine);
        $chaine = preg_replace("/\[url=(.+?)\](.+?)\[\/url\]/", "<a href=\"$1\" target=\"_blank\">$2</a>", $chaine);
        $motif = array('#\[mail\]([^[]*)\[/mail\]#i', '#\[mail=([^[]*)\]([^[]*)\[/mail\]#i');
        $rplc = array('<a href="mailto:$1">$1</a>', '<a href="mailto:$1">$2</a>');
        $chaine = preg_replace($motif, $rplc, $chaine);
        $chaine = preg_replace("/\[b\](.+?)\[\/b\]/", "<b>$1</b>", $chaine);
        ......
        }

        Pour le GET, je ne pense pas que ce soit approprié parce que je crois que ca a une taille limite nan ?
        Par le POST, oui peut-être, mais l'ennui c'est que dans mon formulaire, j'ai déja un onsubmit lorsque je l'envoie pour vérifier les champs !
        Ca donne à peu près ca en simplifier... :
        <form action=index.php?page=news method=post enctype=multipart/form-data name=post onsubmit="return FormVerif(this)">
        <textarea name="form_news" cols="77" rows="8"></textarea>
        <input class=class1 type=button name=Submit2 value=Prévisualisation onClick="window.open('inc/preview.php','_blank','toolbar=0, location=0, directories=0, status=0, scrollbars=0, resizable=1, copyhistory=0, menuBar=0, width=500, height=300');return(false)">
        <input class=class1 type=submit name=Submit value=Envoyer>

        Ma fonction javascript pour vérifier les champs c'est celle la :
        function FormVerif(formulaire) {
        if (formulaire.form_date.value.length == 0) { alert("Merci d\'entrer une date !"); return false; }
        else if (formulaire.form_txt.value.length == 0) { alert("Merci d\'entrer une news !"); return false; }
        formulaire.Submit.value='Patientez...';
        formulaire.Submit.disabled='disabled';
        return true; }

        Enfin, si quelqu'un a une idée, peut-être quelque chose du genre dans cette fonction indiquer de quel bouton on vient, et donc si c'est le bouton de prévisualisation, on emmene tout dans la page preview.php

        Enfin je ne sais pas...
        Si quelqu'un a une idée...

        Merci
        A+
        0
        1. Modérateur
          Là c'est toi qui voit. J'y connais presque rien en Javascript.
          Par contre je ne savais pas que la methode Get était limitée pour la quantité des données...Tu en es sûr?

          Sm95ZXVzZXMgZup0ZXMgOi0p
          0
          1. Slt,

            Oui il me semble que GET est limité, on ne pourrai y passer un texte par exemple...
            Ben je dois dire que je ne m'y conais pas vraiment non plus en javascript...
            Si quelqu'un s'y connait et pourrait m'aider... Merci d'avance

            @+
            0
            1. Salut,

              Je ne connais pas grand chose au javascript, par contre ce que je sais c'est que GET et POST sont tous les deux limités au niveau des données (ce qui est logique puisque ce ne sont que des entêtes http). Je crois que GET est limité à 255 caractères et POST un peu plus

              Personnellement, je n'ai pas trop suivi ton truc, mais je pense qu'avant de valider le formulaire, le bouton pourrait remplir un champ caché du formulaire qui permettrait de déterminer si on fait une visualisation ou non...le script d'analyse du formulaire pourrait alors rediriger le tout ? mais je n'ai peut être rien compris

              GrdScarabe

              Learn with the best, teach the others
              0
              1. euh oui mais il faut deux boutons, un pour prévisualiser, et l'autre pour envoyer le formulaire... mais seulement je n'y arrive pas...
                0
                1. Modérateur
                  Ou est le problème plus exactement? Récupére le formulaire sur une autre page qui fera la prévisualisation et demande à l'auteur de confirmer. Ca fait deux boutons d'envoi mais sur deux pages différentes... (c'est comme ça que marche l'envoi d'un message sur ce forum d'ailleurs :-)

                  Ca marche aussi si tu envoies les données sur la même page.

                  Sm95ZXVzZXMgZup0ZXMgOi0p
                  0