Twoje PC  
Zarejestruj się na Twoje PC
TwojePC.pl | PC | Komputery, nowe technologie, recenzje, testy
B O A R D
   » Board
 » Zadaj pytanie
 » Archiwum
 » Szukaj
 » Stylizacja

 
M E N U
  0
 » Nowości
0
 » Archiwum
0
 » Recenzje / Testy
0
 » Board
0
 » Rejestracja
0
0
 
Szukaj @ TwojePC
 

w Newsach i na Boardzie
 
OBECNI NA TPC
 
 » Sherif 19:14
 » Wedelek 19:14
 » Kraszan 19:11
 » Katoda Lt 19:10
 » past 19:06
 » bajbusek 19:04
 » ripek 19:03
 » Master/Pe 19:03
 » maddog 18:53
 » Kilgor 18:48
 » rooter666 18:47
 » Dexter 18:46
 » Visar 18:44
 » MARtiuS 18:43
 » fiskomp 18:38
 » wrrr 18:38
 » Promilus 18:37
 » McWandal 18:35
 » rainy 18:31
 » kombajn4 18:30

 Dzisiaj przeczytano
 36900 postów,
 wczoraj 25433

 Szybkie ładowanie
 jest:
włączone.

 
ccc
TwojePC.pl © 2001 - 2025
A R C H I W A L N A   W I A D O M O Ś Ć
    

[php] problem z wyrażeniem regularnym , DeK 21/02/12 21:02
Mam coś takiego dla pola input lub textarea:

(preg_match('/^(.){10,}$/s', $zmienna)

$zmienna jest pobierana z formularza.

Dokłądnie to m to taką formę:

if(preg_match('/^(.){10,}$/s', $zmienna)){
$sprawdz4 = true;
}else{
echo('&#8226; Popraw / uzupełnij<br/>');
}

Problem polega na tym, że gdy w polu formularza wpiszę więcej niż 309 znaków i dam wyślij to przeglądarka robi focha i otrzymuję

"Połączenie zostało zresetowane
Połączenie z serwerem zostało zresetowane podczas wczytywania strony."

309 znaków nie robi problemów, dopiero powyżej doprowadza do tego, że przeglądarka się buntuje i skrypt w ogóle nie działa.
Co jest nie tak? Spieprzyłem to wyrażenie regularne czy to jakiś bug czy inne kwiatki?

  1. powodów może być kilka w tym przekroczenie limitu na POST , bwana 21/02/12 21:38
    w ustawieniach PHP (np. w php.ini) jest dyrektywa post_max_size, ale domyślnie jest ustawiona na więcej niż kilkaset bajtów. No ale sprawdź, może to to. Serwer też może mieć podobny limit.

    Nie wiem, czy należy to kojarzyć z wyrażeniem regularnym. Czy bez preg_match formularz wysyła się prawidłowo czy błędnie? To też ma limity w php (np. liczba rekursji, ale to wartości dużo większe niż kilkaset)

    Nawiasem, walisz z armaty do muchy. Wyrażenie sprawdza, czy ciąg ma 10 lub więcej znaków, zasadne jest skorzystanie z funkcji strlen. (strlen ($zmienna)>=10).

    "you don't need your smile when I cut
    your throat"

    1. jak skasuję , DeK 21/02/12 22:02
      w preg_math kropkę (.) to nie ma problemów z wysłaniem.
      Testuję formularz na localhost.

      Później robię sobie echo tego co zostaje w ramach post wysłane.

      Użyłem wyrażeń regularnych w ramach edukacji i rozbudowy formularza :) Ale dziwi mnie, że dzieje się to co się dzieje. Planowałem też dodać wykluczenie niektórych znaków specjalnych. Stąd preg_math.

      W tym wypadku jeśli nie dojdę dlaczego dzieje się to co się dzieje to zmienię na strlen ale intryguje mnie dlaczego powyżej 309 znaków wysypuje się skrypt na wyrażeniu regularnym.

      1. pobawiłem się Twoim wyrażeniem tutaj , bwana 21/02/12 22:21
        http://www.solmetra.com/scripts/regex/index.php

        i normalnie działa, nawet gdy podany przeszukiwany ciąg ma ponad 3000 znaków

        Może masz jakąś beta-kompilację PHP?

        Przełącznik /s oznacza, że tekst ma być traktowany jako wieloliniowy. Może pies pogrzebany jest w kodowaniu znaku końca linii? Sprawdź, czy tekst podany bez żadnych "enterów" też spowoduje błąd.

        "you don't need your smile when I cut
        your throat"

        1. Tak zrobiłem, , DeK 21/02/12 22:43
          dla pola input, wpisałem ciurkiem aaaaaaaaaaaaaaaaaaaaaaaa...
          i dzieje się to samo, czyli 309 znaków akceptuje, a przy 310 się wysypuje.

          Obecnie jestem w Wawie i z tej racji musiałem zaopatrzyć się w mobilnego Xampa, męcząc się niemiłosiernie na NC10 :)

          XAMPP-USB-LITE
          1.7.7
          [PHP: 5.3.8]


          Pewność co do ewentualnego problemu i wykluczenia Xampa miałbym po sprawdzeniu tego w domu na swojej instalacji apache php i mysql lub po wrzuceniu na hosting.

          /s zastosowałem dla pola textarea. Dla pól input jest bez /s.

          Zarówno w przypadku jednego jak i drugiego typu pól dzieje się to samo.

  2. bwana dobrze , Deus ex machine 21/02/12 22:40
    radzi.
    1. zrobiles tylko jednego cycka w regexpie (.) co juz jest zle, wiadomo
    2. uzywasz nazwy zmiennej z liczba na koncu, co tez wiadomo prowadzi do zlego
    3. nie wywala sie blad php, ale apache+php ( co bwana zrecznie zauwazyl ) czyli szukaj bledow w konfiguracjach apache i php => milego wieczoru i kolejnego poranka .)

    "Uti non Abuti"

    1. A właśnie tak odnośnie , DeK 21/02/12 23:01
      kwestii nazewnictwa zmiennych. Gdzieś czytałem, że o ile nie wolno używać liczb na początku tak nie ma przeciwwskazań użycia ich na końcu.
      Możesz zbłąkanemu wyjaśnić w czym problem?:)
      Bo w tym momencie mam rozbieżność, jedni piszą, że można inni, że nie.

      Co do cycków :) mam w planach rozbudowę tak więc na jednym cycku się nie skończy.

      ad3. Być może to faktycznie wina mobilnego Xampa. Zawsze preferowałem swoją instalację Apache, php i mysql.
      W zasadzie dobrze by było gdyby za problem odpowiadał Xamp Tak więc istnieje dość duże prawdopodobieństwo że Xamp jest winny w tej formie w jakiej go używam.

      1. tak ogolnie, nie , Deus ex machine 22/02/12 07:48
        uzywaj liczb w nazwach, bo pozniej sie pogubisz. To tylko dla Twojego bezpieczenstwa w kodzie. Uzywaj dlugich nazw jesli potrzebujesz (oczywiscie tu tez umiar), tak zebys wiedzial co to za zmienna. Chyba, ze zmienne to jakies kolejne np. porty to wtedy numerek na koncu wskazany ,)
        mozesz troche poczytac np. o Zendowym kodzie http://framework.zend.com/...rd.coding-style.html. Szkol, jak pisac kod jest cale mnostwo. Dobrze jest sie nauczyc jakiejs popularnej i latwiej Ci bedzie zachowac czytelny kod dla siebie i dla innych.
        A i masz racje, ze mozna uzywac cyfr w nazwach poza pierszym znakiem.

        "Uti non Abuti"

    
All rights reserved ® Copyright and Design 2001-2025, TwojePC.PL