Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Funkcja sama się wykonuje?!, W efekcie uruchamia się dwukrotnie
tomilipin
post
Post #1





Grupa: Zarejestrowani
Postów: 70
Pomógł: 0
Dołączył: 28.01.2004
Skąd: że znowu ლ(ಠ益ಠლ

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


Witam,
mam bardzo dziwny problem: parę lat temu napisałem sobie prosty pager, który wtedy działał bez zarzutu zawsze i wszędzie. Teraz działa tylko wtedy, gdy znajduje się sam w pliku. Taki samolubny się zrobił...
Konkretnie wygląda to tak:

pliczek 'stronicowanie.php'
  1. <?php
  2. // ilosc - ilosc wynikow
  3. // a - zaczynac od zera czy od jedynki
  4. // c - ile na strone
  5.  
  6. function pag($ilosc, $a, $c) {
  7.  if (isset($_GET['start']))
  8.  $start = $_GET['start'];
  9.  else
  10.  $start=1;
  11.  
  12.  while($ilosc>0) {
  13.  if (!isset($b)) $b=0;
  14.  $b=$b+1;
  15.  
  16.  if ((($b-1)*$c)+1==$start) 
  17.  echo "[$b] ";  
  18.  else 
  19.  print '<a href="?start='.$a.'">'.$b.'</a> ';
  20.  
  21.  $ilosc -= $c;
  22.  $a += $c;
  23.  }
  24.  print '<br />';
  25. }
  26.  
  27. print '<p align="center">';
  28. pag(56, 1, 6);
  29. print '</p>';
  30. ?>
Gdy uruchamiam ten kod, wszystko jest w porządku (jeśli skomentuję linijkę 28 to nic się nie wyświetli). Lecz gdy wkleję samą funkcję do innego pliku (lub includuję plik z samą funkcją), pojawiają się błędy:
Cytat
Warning: Missing argument 1 for pag() in index.php on line 6
Warning: Missing argument 2 for pag() in index.php on line 6
Warning: Missing argument 3 for pag() in index.php on line 6
A gdy uruchomię funkcję gdzieś dalej w pliku, podając argumenty: pag(36,1,10); to funkcja wykonuje się dwa razy... Raz w miejscu, gdzie jest zdeklarowana - i tu wyświetla ostrzeżenia, drugi raz w miejscu, gdzie rzeczywiście ją uruchamiam - tu wyświetla numer stron.
Nie mam pojęcia jak to możliwe, nie widzę żadnej reguły szczególnie jeśli funkcja działa normalnie w osobnym pliku...

Starając się pozbyć ostrzeżeń wstawiłem wartości do funkcji; linijka 6 wygląda wtedy tak: function pag($ilosc=0, $a=1, $c=10) { i również w tym przypadku funkcja sama się wykonuje (sprawdziłem to dodając print 'asd'; na końcu).

Co zrobić, aby funkcja wykonywała się tylko tam, gdzie ja tego chcę?

Ten post edytował tomilipin 25.02.2007, 21:31:34
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
DeyV
post
Post #2





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




Jeśli kodujesz w PHP5, zrób tak:

1. Usuń domyślne wartości parametrów - musisz widzieć, kiedy jest wywoływana
2.W ciele tej funkcji wstaw
throw new Exception( 'błąd pag' );

Skrypt oczywiście od razu się wywali, ale pokaże Ci też, w którym dokładnie miejscu funkcja ta została po raz pierwszy wywołana (dzięki trace które się wykonuje dla każdego tworzonego wyjątka)
Go to the top of the page
+Quote Post
tomilipin
post
Post #3





Grupa: Zarejestrowani
Postów: 70
Pomógł: 0
Dołączył: 28.01.2004
Skąd: że znowu ლ(ಠ益ಠლ

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


Wszystko piszę pod PHP 4 i pewnie dlatego kod, który podałeś się sypie... parser zwraca error unexpected T_NEW

Niemniej jednak tak już namieszałem, że postanowiłem podpiąć pager pod wyniki od nowa i... o dziwo! Działa dobrze (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) W funkcji nic nie zmieniałem więc widocznie błąd tkwił w sposobie sprzężenia wyników z pagerem.

Jak zawsze to człowiek stanowi najsłabsze ogniwo. Zdaje się, że temat jest niepotrzebnie założony, można go więc usunąć... Przepraszam za kłopot.
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: 23.08.2025 - 19:32