Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] wykrywanie błędów
Forum PHP.pl > Forum > Przedszkole
lamcpp
witam, stworzyłem skrypt dynamicznego menu, w którym wszystkie pozycje wczytywane są z bazy danych, dodatkowo menu jest 6 poziomowe - dla każdej kategorii i dla każdego poziomu występują dodatkowe zagłębienia. No i właśnie, menu działa prawidłowo, wszystkie pozycje właściwie się wczytują, jest tylko jedno ale...skrypt działa bardzo wolno, po odpaleniu go na localhoście dostaję po parunastu sekundach czekania taki komunikat:
  1. Skrypt na tej stronie może być zajęty bądź przestał odpowiadać. Można kontynuować ten skrypt bądz przerwać (...)

Po wybraniu kontynuuj, jeszcze raz pokazuje mi się powyższy komunikat, znów wybieram: "kontynuuj" i skrypt się normalnie uruchamia.
Podejrzewam, że taki stan rzeczy spowodowany jest jakimś błędem, którego nie wykrył interpreter PHP, wydaje mi się że jest to błąd związany z niedomknięciem którejś z
  1. <li> albo <ul>
bo w ten własnie sposób zostało zbudowane menu. Jednak kod jest tak rozległy(około 700 linijek) że cięzko mi wyłapać ten błąd. I tu pytanie, czy php dysponuje jakimiś metodami, sposobami, które ułatwią mi znalezienie tego błędu? ewentualnie jak proponujecie sobie z tym poradzić? kiedyś ucząc się C++ kompilatory miały wbudowany tryb debugowania, przez co było dużo łatwiej, ale w php w swoim PsPADzie (w którym tworze kod PHP) nie widzę nic takiego:|
b4x
Ale to nie wina PHP, zdaje mi się że jest to wina JavaScript - masz jakiś skrypt w JS'ie, pętla czy coś?
darko
Potrzebujesz debuggera php z wbudowanym profilerem, np. XDebug
lamcpp
tak sam skrypt menu to jest javascript, w php zbudowałem jak ma wyglądać to menu, pozycje itp i wczytywanie pozycji z bazy
b4x
Mógłbyś pokazać ten skrypt JS'a albo podać jakiegoś linka?
lamcpp
  1. <script type="text/javascript">
  2. var menuids=["sidebarmenu1"]
  3.  
  4. function initsidebarmenu(){
  5. for (var i=0; i<menuids.length; i++){
  6. var ultags=document.getElementById(menuids[i]).getElementsByTagName("ul")
  7. for (var t=0; t<ultags.length; t++){
  8. ultags[t].parentNode.getElementsByTagName("a")[0].className+=" subfolderstyle"
  9. if (ultags[t].parentNode.parentNode.id==menuids[i]) //if this is a first level submenu
  10. ultags[t].style.left=ultags[t].parentNode.offsetWidth+"px" //dynamically position first level submenus to be width of main menu item
  11. else //else if this is a sub level submenu (ul)
  12. ultags[t].style.left=ultags[t-1].getElementsByTagName("a")[0].offsetWidth+"px" //position menu to the right of menu item that activated it
  13. ultags[t].parentNode.onmouseover=function(){
  14. this.getElementsByTagName("ul")[0].style.display="block"
  15. }
  16. ultags[t].parentNode.onmouseout=function(){
  17. this.getElementsByTagName("ul")[0].style.display="none"
  18. }
  19. }
  20. for (var t=ultags.length-1; t>-1; t--){ //loop through all sub menus again, and use "display:none" to hide menus (to prevent possible page scrollbars
  21. ultags[t].style.visibility="visible"
  22. ultags[t].style.display="none"
  23. }
  24. }
  25. }
  26.  
  27. if (window.addEventListener)
  28. window.addEventListener("load", initsidebarmenu, false)
  29. else if (window.attachEvent)
  30. window.attachEvent("onload", initsidebarmenu)
  31.  
  32. </script>
  33.  
darko
Ke?

Cytat
var menuids=["sidebarmenu1"]


Co to jest?
lamcpp
główny znacznik ul
od niego rozpoczyna się menu:
  1. <div class="sidebarmenu">
  2. <ul id="sidebarmenu1">
  3. ....
  4. </ul>
  5. </div>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.