controle de caractère dans un textarea et enregistrement

Eléphanteau du PHP | 37 Messages

03 mars 2008, 18:02

bonjours les gens.

a quelques détails près, j'ai réussi à faire ce que je voulais faire (depuis janvier....), mais là, je bloque sur un problème assez gros.
j'ai trouvé (sur internet hein, pas par moi même :? ) un système avec du java script qui permet de contrôler le nombre de caractère sur un(e) textarea.
seulement avec ce contrôle, on utilise une <form method POST> qui rappelle la même feuille, et j'ai besoin de cette <form> pour appeler une fonction qui enregistre sur un fichier text.
j'ai essayé d'inclure cette fonction dans la form utilisée, mais ça ne marche pas mieux.


         case "referencement": 

             print("<form name=\"text\" method=\"POST\" action=\"".$_SERVER['PHP_SELF']."\" >");// c'est avec cette form que j'aimerais appeler une fonction, mais elle est utiliser
             print("<span class=\"BlancLarge\">referencement:</span><br>");
             print("description :<TEXTAREA name=\"description\" rows=\"4\" cols=\"80\" reference("description", 200);");// cette partie là, c'est le code que j'ai pris sur un autre site  :( 

             //a partir de là, c'est la fonction que je voulais appeler...
              if(!file_exists("ref.txt")){ // Si le fichier existe 
                 touch("ref.txt");}
              $open=fopen("ref.txt", "w");// le fichier est bien créé et ouvert
              fwrite($open, "description : ($_POST['description'])");// c'est peut etre ici que ça peche, apparement $POST n'a pas de contenu

             print("<input type=submit name=\"boulet\" value=\"envoyer\"/><br></form>");
             echo("<br />");
             print("<a href=\"AdminOrganisation.php\">Accueil</a><br>");


    break;
bon, j'ai retirer des bouts de code qui ne sont pas utiles, mais il manque peut etre des parenthèses ou des truc comme ça.
prenez votre temps pour repondre, je ne peut plus m'en occuper avant mercredi. merci.

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

03 mars 2008, 20:25

Pas bien sur d'avoir compris ce que tu voulais faire... Toutefois, ceci pourra peut être t'aider : en javascript, tu peux récupérer l'événement onKeyUp sur un champ de type text ou textarea, correspondant au moment ou l'utilisateur relache une touche du clavier. Tu peux ainsi faire appel à une fonction javascript ( <textarea ... onKeyUp="maFonction();"> ) qui pourra par exemple vérifier la longueur du texte saisie à chaque fois que l'internaute appuie sur une touche.

Tu peux également utiliser l'événement onSubmit du formulaire qui est déclenché lorsque l'utilisateur soumet ses données à partir un bouton de type submit ( <form ... onSubmit="maFonction();"> ).

Enfin, avec JS tu peux également modifier la valeur de l'attribut action du formulaire, et le changer à la volée par une autre source : document.nom_du_formulaire.action = 'nouvellePage.php';

HTH
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 37 Messages

05 mars 2008, 10:37

la fonction javascript fonctionne, par contre, je vais essayer le "onsubmit", ça m'a l'air d'etre ce que je cherche. merci ryle.
...mon message a été deplacé, je ne l'avais pas mis dans ph4 ? >_> fatigue fatigue......

edit: nan, ça ne marche pas.
je ré explique le problème (jai trouvé une meilleure tournure). je voudrais qu'en cliquant sur le bouton submit, ce qu'il y a dans le textarea soit enregistré sur un fichier text. j'ai utiliser les fonction que je manipule depuis 1,5mois maintenant, mais cette fois elles ne marchent pas. sans doute a cause du javascript.
normalement, je fais un appel "d'action" qui permet d'enregistrer un fichier text en utilisant la method POST, mais là, cette method est deja utilisée pour appeler le code principal. j'ai donc essayé de mettre "l'action" dans le code principale. ça créer bien un fichier text nommé référencement, mais les informations du textarea ne sont pas inscrite... toujours pas claire. si?

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

05 mars 2008, 14:52

En fait il faut distinguer l'enregistrement dans le fichier qui est en php et nécessite donc de passer par le serveur, de la vérification du contenu de ton champ qui se fait en javascript côté client. (A noter qu'il vaut toujours mieux refaire une seconde verif en php, le javascript n'étant là que pour un confort utilisateur et pas pour garantir quoi que ce soit :))

Dès lors l'action de ton formulaire reste destinée à php et envoi les données à la page courante pour l'enregistrement du fichier. En revanche, tu peux déplacer l'appel à ta fonction javascript en l'utilisant à chaque caractère saisie dans le champ (onKeyPress, onKeyDown, onKeyUp), au moment ou l'utilisateur fait perdre le focus au champ (onBlur), au moment où l'utilisateur va essayer de soumettre le formulaire au serveur en appuyant sur un bouton submit (onSubmit) ...

En gros, tu choisis l'événement, puis tu l'implémentes pour que lorsqu'il se produit, l'appel à ta fonction soit déclenchée, avec les paramètres qui vont bien, ex :

Code : Tout sélectionner

onSubmit="reference('description', 200);"
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 37 Messages

07 mars 2008, 11:52

la fonction reference() appelle mon java script, qui vérifie le nombre de caractère à chaque frappe de sourie, et donc en temps reel. je ne peux pas le mettre en onsubmit.
sinon j'ai essayer d'appeler la fonction d'enregistrement avec... ça ne marche pas non plus ...

ViPHP
ViPHP | 4039 Messages

07 mars 2008, 12:05

juste au passage: le JS se désactive au plaisir, donc si ta limite est importante, pense mettre en place une vérification du côté php.

Et je crois que voir le code JS ainsi que l'html de ton formulaire nous permettrait de mieux cerner ton problême.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphanteau du PHP | 37 Messages

07 mars 2008, 12:22

sur le code en JS, ne me demandez rien, tout ce que j'ai réussi a faire, c'est le copier.

Code : Tout sélectionner

<script type= text/javascript> // textarea est la référence du TEXTAREA à contrôler, max en est la valeur maximal, count est la référence // du champs texte de contrôle où s'affichera le nombre de caractère en cour function verif_press(textarea,max,count) // vérifie que le nombre maxi n'a pas été atteint pendant que l'utilisateur reste appuyé sur la touche { if (textarea.value.length > max -1){ //s'il dépasse la taille requise, on sort return false; } else { // sinon count.value = textarea.value.length +1 ; // on met à jour le champs de contrôle. return true; } } // textarea est la référence du TEXTAREA à contrôler, max en est la valeur maximal, pour cette fonction count n'est pas inclu // car lorsqu'elle est appellée, le nombre de caractère a déja été inscrit lors de l'évenement "onkeyup" function verif_change(textarea,max) // vérifie que le nombre maxi n'a pas été atteint lorsque l'utilisateur sort du champs { if (textarea.value.length > max ){ // s'il dépasse la taille requise, on prévient et on sort alert('Vous ne pouvez rentrer que '+ max +' caractères maximum pour ce champs'); return false; } else return true; // sinon, on continu } // textarea est la référence du TEXTAREA à contrôler, count est la référence // du champs texte de contrôle où s'affichera le nombre de caractère en cour. Cette fonction est appelée lors de l'évenement "onkeyup" function show_nb_car(textarea,count) { count.value = textarea.value.length; return true; } </script>

les textarea qui utilisent le JS
         case "referencement":

             print("<form name=\"text\" method=\"POST\" action=\"".$_SERVER['PHP_SELF']."\" onsubmit=\"action(AdminOrganisation.php?action=ajoutreferencement)\">
             <span class=\"BlancLarge\">referencement:</span><br>
             description :<TEXTAREA name=\"description\" rows=\"4\" cols=\"80\" ");reference("description", 200);

             print("<input type=submit name=\"boulet\" value=\"envoyer\"/><br></form>");
             break;
la fonction reference
function reference($nom, $nombre){
print ("onKeyup=\"show_nb_car(this,document.text.nb_car_$nom)\" onKeypress=\"return verif_press(this,$nombre,document.text.nb_car_$nom)\" onchange=\"return verif_change(this,$nombre)\">".$_SESSION['annonce'][2]."</TEXTAREA><br>
<span class=\"VertSmall\">Nombre de caractères de ce champs : <input type=\"text\" name=\"nb_car_$nom\" size=\"3\" value=\"".strlen($_SESSION['annonce'][2])."\"> / $nombre max.</span><br><br>
<br>
"); }
et le code pour copier les textarea, a force je ne sais plus ou le mettre :oops:
if(!file_exists("ref.txt")){ // Si le fichier existe
                 touch("ref.txt");}
              $open=fopen("ref.txt", "w");
              fwrite($open, ".($_POST['description'])." />

<script src=\"http://www.google-analytics.com/xxxxxxxxxx.js\" type=\"text/javascript\">
</script>
<script type=\"text/javascript\">
_uacct = \"xxxxxxxxxxx\";
urchinTracker();
</script>");


             echo("<br />");
             print("<a href=\"AdminOrganisation.php\">Accueil</a><br>");


edit: problème reglé, finalement le

Code : Tout sélectionner

action=\"".$_SERVER['PHP_SELF']."\"
n'etait pas utile >_> desolé pour le derangement. et merci