Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> textarea help
bula87
post
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 9.05.2005

Ostrzeżenie: (0%)
-----


czy da się jakoś ograniczyć ilość znaków możliwych do wpisania w <texarea> (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) lub czy znacie jakies inne funkcje aby było to możliwe.
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Funkcja js ograniczjąca przykladowo do 10 znaków:
Kod
function MaxL(obj)
{
    if (obj.value.length>10)
    {
  alert('Za duży text. Max. 10 znaków');
  obj.value=obj.value.substr(0,10);
    }
}


Wykorzystanie w textarea:
  1. <textarea onchange="MaxL(this);"></textarea>
Go to the top of the page
+Quote Post
bula87
post
Post #3





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 9.05.2005

Ostrzeżenie: (0%)
-----


wielkie dzięki właśnie o coś takiego mi chodziło. A dałoby się jeszcze dodac w skrypcie zeby po wyswietleniu komunikatu pole textarea było czyszczone?
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




A wczym problem. Zamiast obcinac do żądanej dlugości po prostu wpiisz nic.
Kod
function MaxL(obj)
{
if (obj.value.length>10)
{
alert('Za duży text. Max. 10 znaków');
obj.value='';
}
}
Go to the top of the page
+Quote Post
Jarod
post
Post #5





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


Cytat(nospor @ 2005-05-10 06:18:01)
Funkcja js ograniczjąca przykladowo do 10 znaków:
Kod
function MaxL(obj)
{
    if (obj.value.length>10)
    {
  alert('Za duży text. Max. 10 znaków');
  obj.value=obj.value.substr(0,10);
    }
}


Wykorzystanie w textarea:
  1. <textarea onchange="MaxL(this);"></textarea>

Postanowiłem sprawdzić jak się ta funkcja sprawuje. I jest pewein problem. Jeśli przekroczę 10 znaków to dostane komunkat, że przekroczyłem. Ale jeśli dodam w php sprawdzanie długości to wyglada to tak:

1. podaję 11 znaków
2. JS wywala komunikat ze przekroczylem dozwoloną ilość i skraca do 10
3. klikm zapisz
4. php wywala komunikat ze przekroczylem 10 znaków

Jak zrobić żęby php widział już poprawioną wersję??

EDIT: Powyższy problem występuje jeśli w polu textarea używam entera przy wpisywaniu, żeby nie korzytsać z paska przewijania. Jeśli nie używam entera, tylko pisze wszystko jednym ciągiem to problemu nie ma

Ten post edytował J4r0d 14.05.2005, 15:37:09
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Nie bardzi widzę problem. Też uzywam entera w textarea, wywala alerte, skraca. Potewm musze jescze raz submit zrobić i jest ok. Nie wiem w czym problem
Go to the top of the page
+Quote Post
Jarod
post
Post #7





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


Cytat(nospor @ 2005-05-16 06:47:39)
Nie bardzi widzę problem. Też uzywam entera w textarea, wywala alerte, skraca. Potewm musze jescze raz submit zrobić i jest ok. Nie wiem w czym problem

Dziękuje z odpowiedź.

Kawałek kodu z formularzem:
wcześniej w sekcji <head> wkeloja funkjca JS
  1. ...
  2. ...
  3. <form action="zlecenie_k_zapisz.php?<?=SID?>" method="post">
  4.  
  5. <table width="60%" align="left" border="0" cellpadding="4" cellspacing="2">
  6. <tr>
  7. <td class="tdbkground"><strong>Treść zlecenia (max 255 znaków)</strong></td>
  8. </tr>
  9. <tr>
  10. <td class="tdbkground"><textarea onchange="MaxL(this);" name="tresc" cols="60" rows="4" wrap="virtual"></textarea></td>
  11. </tr>
  12. </table>
  13. </td>
  14. ...
  15. ...
  16. ...


I kawałek kodu skryptu, któy sprawdza długość łańcucha na wypadek wyłączenia JS w przeglądarce
  1. ...
  2. ...
  3. //Sprawdz czy nie przekroczono 255 znaków
  4. if ( strlen($_POST[tresc]) > 255 )
  5. {
  6.  ?>
  7.  <table width=\"80%\" align=\"center\" border=\"0\" cellspacing=\"1\" cellpadding=\"10\">
  8. <tr>
  9. <td><img src=\"images/spacer.gif\" alt=\"\" width=\"0\" height=\"120\"></td>
  10. </tr>
  11. <tr>
  12. <td><h2 class=\"error\">Treść zlecenia nie może przekraczać 255 znaków !</h2></td>
  13. </tr>
  14. <tr>
  15. <td align=\"center\"><input type=\"Submit\" Name=\"Button\" Value=\"Wróć\" onClick=\"location.href='zlecenie_k_formularz.php?<?=SID?>'\"></h2></td>
  16. </tr>
  17.  </table>
  18.  <?php
  19.  exit();
  20. }
  21. ...
  22. ...


OPIS PROBLEMU:
PRZYPADEK I: Jeśli w polu textarea użytkownik wpisuje ciąg znaków bez używania entera, przekroczy 255 znaków to zostanie wyświetlony odpowiedni alert. Klika ok, skrypt JS obcina wpisany tekst do 255 znaków. Użytkownik klika zapisz, a skrypt zapisuje ciąg do bazy. - WSZYSTKO OK


PRZYPADEK II:
Jeśli w polu textarea użytkownik wpisuje ciąg znaków, używając przy tym entera, przekroczy 255 znaków (JS liczy entery) to zostanie wyświetlony odpowiedni alert. Klika ok, skrypt JS obcina wpisany tekst do 255 znaków (obcina od końca). Użytkownik klika zapisz, a skrypt wyświetla komunikat, że przekroczono limit 255 znaków. Tak jakby do skryptu przekazywane było 255 znaków + entery. Skrypt nie widzi, że JS obcieło do 255 znaków. Nie wiem jak sobie z tym poradzić. Może wywale skrypt JS (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)

Używam Firefoxa (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Aby sprawdzić co ci przeslal do skryptu zrób test.
Daj dlugość znaków do 3;
Wpisz powiedzmy ala<enter>ma<enter>kota, wyslij to. pOwinien ci js sie wydrzec, ze za duzo znkaów, obciac do 3 czyli do ala. Teraz wyswietl w php to co otrzymasz. Jak to bedzie ala to git, jak ala ma kota to pogadamy (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Jarod
post
Post #9





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


Cytat(nospor @ 2005-05-16 11:06:36)
Aby sprawdzić co ci przeslal do skryptu zrób test.
Daj dlugość znaków do 3;
Wpisz powiedzmy ala<enter>ma<enter>kota, wyslij to. pOwinien ci js sie wydrzec, ze za duzo znkaów, obciac do 3 czyli do ala. Teraz wyswietl w php to co otrzymasz. Jak to bedzie ala to git, jak ala ma kota to pogadamy  (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Cytat
Aby sprawdzić co ci przeslal do skryptu zrób test.
Daj dlugość znaków do 3;

Zrobiłem tak

Cytat
Wpisz powiedzmy ala<enter>ma<enter>kota, wyslij to. pOwinien ci js sie wydrzec, ze za duzo znkaów, obciac do 3 czyli do ala.

Tak robi. Wywala alert, klikam ok i pozostaje ale w polu formularza. Daje wyślij i

Cytat
Teraz wyswietl w php to co otrzymasz. Jak to bedzie ala to git, jak ala ma kota to pogadamy  (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Skrypt wyświetla ala.

Cytat
Teraz wyswietl w php to co otrzymasz. Jak to bedzie ala to git(...)


Więc gdzie robie błąd?

EDIT: Dodałem w skrypcie
  1. <?php
  2. echo $_POST[tresc].&#092;"#\"; exit();
  3. ?>

i okazuje się że przesyła napis ala i jakiś znak - chyba enter... (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)

Ten post edytował J4r0d 16.05.2005, 15:31:48
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Hmmm, no dziwne. Mi przesyła tylko 3 znaki. Też dałem strlen().
Ja gdy wciskam wyślij i jest zadużo znaków to wywala alert i obcina. POtem muszę jeszcze raz wcisnąć wyślij aby wyslalo już poprawione. W takiej sytuacji tam nie ma gdzie się żaden enter wcisnąć. Dziwne.

Robilem teraz wszystkie chyba mozliwe testy i jest caly czas ok. Naprawdę nie wiem gdzie może tkwić problem.

Może jako tymczasowe rozwiązanie zrób coś takiego:
usuń biale znaki (entery i spacje) z konca treści i dopiero potem sprawdzaj dlugość. Wkoncu bialy znak na koncu za bardzo nikomu si ę nie przyda.
  1. <?php
  2.  
  3. $tresc=rtrim($_POST['tresc']);
  4.  
  5. ?>


i pamietaj, aby indyexy w tablicach podawać w ciapkach (jesli są stringiem). Bez tego też pójdzie, ale to malo eleganckie i chyba nawet warninga wywala.
czyli daj $_POST['tresc'] a nie $_POST[tresc].

Pozdro. Daj znać jak ci się uda coś z tym zrobić.
Go to the top of the page
+Quote Post
Jarod
post
Post #11





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


@nospor: wiem w czym problem. JS traktuje entery (zlicza je) jako 1 znak a php jako 2.
Jeśli w formularzu podam coś takiego
Kod
1
2
3
4
5
to dla JS jest to 9znaków natomiast do skryptu php przesylane jest 13. Nawet jak usunę z końca tego entera to nic to nie zmieni. Poszedłem za poradą crashu i zastosowałem
  1. <?php
  2. strlen(str_replace(array(&#092;"n\", \"r\"), '',$_POST[tresc]))
  3. ?>
do sptrawdzania długości. Niby wszystko ok ale przetestowałem co się stanie jak JS będzie wyłączone a Ty podasz naprzyklad taki tekst:
Cytat
ale
ma
kotka,
kotek
ma hiv
i ala
ma problem

Sam zobacz ile tak naprawde zostanie zapisane do bazy.. Ilość możliwych (widocznych dla użytkownika znaków) zmniejsza się wraz z ilością użytych enterów...

Naprawdę lepiej będzie zastosować tylko sprawdzanie w php z opcją przesyłu przez POST tego co już użytkownik wpisał (gdyb wopisał za dużo znaków) i nię bedzie musiał pisać od nowa.. Bo o to chyba chodzi w tym całym zamieszsaniu


pozdrawiam i dzięki za pomoc
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




jeszcze raz to potestowalem z enterami.
js tak samo jak php traktuje enter (\r\n) jako dwa znaki.

Zrób test:
daj ograniczenie na 5 znaków
wpisz 1<enter>2<enter>
Będziesz więc miał ciąg:1\r\n2\r\n czyli 6 znaków. Wywali ci alert i obetnie do 5 czyli do ciągu:1\r\n2\r.
Tak przesłany ciąg php zinterpretuje jednak jako 1\r\n2\r\n, czyli doda sobie na koniec \n w sumie 6 znaków. Wystawczy więc usunąć biale znaki z konca i bedzie wtedy ok czyli 1\r\n2.

a więc daj tak:
$tresc=rtrim($_POST['tresc']) i wszystko będzie grało (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Ten post edytował nospor 17.05.2005, 11:35:03
Go to the top of the page
+Quote Post
Jarod
post
Post #13





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


Cytat(nospor @ 2005-05-17 10:34:01)
daj ograniczenie na 5 znaków
wpisz 1<enter>2<enter>
Będziesz więc miał ciąg:1\r\n2\r\n czyli 6 znaków. Wywali ci alert i obetnie do 5 czyli do ciągu:1\r\n2\r.

Nie wywala. Dopiero jak dam:
Kod
1
2
3
to kasuje ostani enter i zostaje
Kod
1
2
3


Dam sobie z tym spokój. Mówie Ci, że JS traktuje u mnie enter jako 1 znak (Firefox)

pozdrawiam
Go to the top of the page
+Quote Post
qrzysztof
post
Post #14





Grupa: Zarejestrowani
Postów: 220
Pomógł: 19
Dołączył: 25.04.2009

Ostrzeżenie: (0%)
-----


Sorki, że odgrzebuję tak stary temat, ale trafiłem na identyczny problem.

Mam podwójną walidację textarea. JS informuje użytkownika, że tekst jest dłuższy niż 500 znaków i go przycina a potem jeszcze skrypt PHP też sprawdza i też przycina. Używam do tego mb_strlen(utf-8) oraz mb_substr(utf-8).

Jeśli w tekście nie ma enterów (a entery są dla mnie istotne - musi być możliwość ich używania) to obie walidacje działają tak samo. Jeśli są entery to obcięcie za pomocą PHP da rezultat mniejszy od obcięcia przez JS o właśnie liczbę enterów.

Przykład:

wejście: tekst 600 znaków, 10 enterów

wyjście JS: tekst 500 znaków

wyjście PHP: tekst 490 znaków.

Coś więcej może już wiadomo na ten temat po 5 latach?

Ten post edytował qrzysztof 28.02.2010, 20:28:35
Go to the top of the page
+Quote Post
icetique
post
Post #15





Grupa: Zarejestrowani
Postów: 72
Pomógł: 13
Dołączył: 12.04.2009

Ostrzeżenie: (0%)
-----


Może po prostu \r\n zamieniaj na \n zlicz znaki i zamień \n na \r\n (w php).

Ten post edytował icetique 28.02.2010, 21:06:30
Go to the top of the page
+Quote Post
qrzysztof
post
Post #16





Grupa: Zarejestrowani
Postów: 220
Pomógł: 19
Dołączył: 25.04.2009

Ostrzeżenie: (0%)
-----


Tak też zrobiłem. Zliczyłem entery i obcinam w PHP do 500+liczba enterów. W bazie leci to do TEXT, więc i tak nie ma to większego znaczenia. Gdybym chciał zrobić VARCHAR(500) to już trzeba by trochę bardziej zakombinować.

Tyle, że pojawił się nowy problem. Cudzysłowy powodują to samo. Chyba wszystkie znaki z "ucieczką" będzie trzeba zliczyć.

Dodałem jeszcze stripslashes i powinno już być ok.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.09.2025 - 15:54