![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 18.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Potrzebuję przesłać między stronami informację o tym, które z checkbox'ów użytkownik zaznaczył. Ponieważ checkbox'y są generowane w pętli (docelowo ich ilość ma się zmieniać dynamicznie), wynik zapisywany jest do tabeli. Zastosowana przeze mnie metoda działa, ale strona generuje się ponad 3 sekundy... To trochę długo jak na tak prostą operację... Jeśli ktoś mógłby wyjaśnić mi na czym polega problem to będę wdzięczny :-) Poniżej zamieszczam programy. Pozdrawiam, Artur Plik "1.php": CODE <?php echo '<div align=center>'; echo '<form action="2.php" method="post">'; echo '<input type="submit" value="OK"><br><br>'; echo '<table border="1">'; for ($i=0; $i<=100; $i++) { echo '<tr><td>p '.$i.'</td><td><input type="checkbox" name="zaznaczone['.$i.']"></td></tr>'; } echo '</table>'; echo '</form></div>'; ?> Plik "2.php": CODE <?php $mtime = microtime(); $mtime = explode(' ', $mtime); $mtime = $mtime[1] + $mtime[0]; $starttime = $mtime; $zaznaczone=$_POST['zaznaczone']; echo '<div align=center>'; for ($i=0; $i<=100; $i++) { if ($zaznaczone[$i] == 'on') echo '<br>zaznaczone ['.$i.'] : = on'; else echo '<br>zaznaczone ['.$i.'] : = off'; } $mtime = microtime(); $mtime = explode(" ", $mtime); $mtime = $mtime[1] + $mtime[0]; $endtime = $mtime; $totaltime = ($endtime - $starttime); echo (' <br> Generowanie strony trwalo ' .$totaltime. ' seconds.'); echo '</div>'; ?> |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 255 Pomógł: 5 Dołączył: 20.03.2007 Skąd: Kraków Ostrzeżenie: (30%) ![]() ![]() |
wolny serwer?
sprobuj wygenerwoac tyle samo wierszy, ale nie z chceckboxem tylko np z obrazkiem jakims albo jakims tekstem, i zobacz czy tyle samo zajmie czasu |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 18.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
No sęk w tym, że nie jest to wina serwera.
Jeśli wygeneruje 100-elementową tablicę i prześlę ją przez $_SESSION to wysyłanie trwa ok. 1 ms. Gdy tablica jest generowana w taki sposób jak podałem trwa to ok. 3 sekund... Próbowałem przesłać dane z formularza przez $_SESSION, ale nie udało mi się tego dokonać - no i koło się zamyka... Dość długo już nad tym siedzę i nie widzę sensownego rozwiązania... Pozdrawiam, Artur |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 255 Pomógł: 5 Dołączył: 20.03.2007 Skąd: Kraków Ostrzeżenie: (30%) ![]() ![]() |
zrob zamiast checkboxow texty (type="text") i zobacz czy tez jest wolno
Ten post edytował domis86 25.03.2008, 13:24:57 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 18.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Po wpisaniu (type="text") strona generuje się w 0,0004 s.
Gdy zmienię na (type="checkbox") i nie zaznaczam żadnego checkbox'a - strona generuje się 0,03 s. Wystarczy że zaznaczę jeden checkbox i czas wzrasta do ponad 3 sekund... O co w tym chodzi ![]() |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 1 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Moim zdaniem problem leży w tym, że masz buga w 2.php.
Daj sobie print_r na zaznaczone. Zobaczysz, że ta tablica trzyma jedynie zaznaczone wartości. Jeśli nic nie zaznaczysz, 2.php generuje jeden błąd E_NOTICE. Jeśli zaznaczysz cokolwiek masz (101 - ilosć zaznaczonych) * E_NOTICE. Jeśli błędy są logowane do error_loga a ten jest sporych rozmiarów (lub musisz konkurować o dostęp do niego z innymi równie wadliwymi skryptami ;-)), czas wykonywania skryptu może się wydłużyć. Hint: isset(), empty(). -------------------- http://cksource.com
"Support Open Source Software" |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 255 Pomógł: 5 Dołączył: 20.03.2007 Skąd: Kraków Ostrzeżenie: (30%) ![]() ![]() |
hmm sprobuj 2.php zamiast for zastosowac foreach
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Przyjaciele php.pl Postów: 2 712 Pomógł: 23 Dołączył: 27.10.2003 Skąd: z kontowni Ostrzeżenie: (0%) ![]() ![]() |
Jeśli robisz to pod Firefoxem, to sprawdź pod operą. Miałem formularz, który pod FF generował się 15sekund. Pod operą trwało to niecałą sekundę.
-------------------- "Coś się kończy, coś się zaczyna." Andrzej Sapkowski
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 18.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Moim zdaniem problem leży w tym, że masz buga w 2.php. Daj sobie print_r na zaznaczone. Zobaczysz, że ta tablica trzyma jedynie zaznaczone wartości. Jeśli nic nie zaznaczysz, 2.php generuje jeden błąd E_NOTICE. Jeśli zaznaczysz cokolwiek masz (101 - ilosć zaznaczonych) * E_NOTICE. Dziękuję bardzo za pomoc - miałeś rację. Nie wiedziałem że przeszukiwanie tabeli w taki sposób jak ja to zrobiłem generuje błędy. Po zamianie pętli for na: CODE for ($i=0; $i<=100; $i++) { if (isset($zaznaczone[$i])) echo 'zaznaczone ['.$i.'] : = on'; else echo 'zaznaczone ['.$i.'] : = off'; } strona generuje się w 0,0003 sekundy - i o to chodziło ! :-) Cytat Jeśli błędy są logowane do error_loga a ten jest sporych rozmiarów (lub musisz konkurować o dostęp do niego z innymi równie wadliwymi skryptami ;-)), czas wykonywania skryptu może się wydłużyć. Ostatnie pytanie: skąd wiedziałeś że skrypt generuje błędy ? Podczas wyświetlania strony w przeglądarce taka informacja nie jest wyświetlana, a uruchamianie tego skryptu z wiersza poleceń: 'php 2.php' nie ma sensu, bo nie będzie miał danych wejściowych - to tak na przyszłość... :-) Jeszcze raz dziękuję wszystkim za pomoc, Pozdrawiam, Artur |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 255 Pomógł: 5 Dołączył: 20.03.2007 Skąd: Kraków Ostrzeżenie: (30%) ![]() ![]() |
Artur w fazie pisania aplikacji zawsze ustawiaj se:
na poczatku i bedziesz widzial wszystkie bledy |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 18.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Artur w fazie pisania aplikacji zawsze ustawiaj se: error_reporting(E_ALL | E_STRICT); Dzięki za radę. Error_reporting miałem domyślnie włączone, ale jak się okazuje nie miałem włączonego display_errors. Po wpisaniu ini_set('display_errors','1'); komunikaty o błędach są wyświetlane. Pozdrawiam, Artur Ten post edytował artur_rut 26.03.2008, 12:27:10 |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 382 Pomógł: 22 Dołączył: 21.05.2007 Skąd: Elbląg Ostrzeżenie: (0%) ![]() ![]() |
ini_set('display_errors','true'); ?
![]() |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 18:04 |