Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: funkcja w funkcji :?
Forum PHP.pl > Forum > Przedszkole
Apo
Witam
Napisałem sobie funkcje panelu który pojawia się obok wpisu do księgi gości po zalogowaniu jako admin. I w tej funkcji mam jeszcze jedną funkcją narazie odpowiedzialną za banowanie oto te funkcje :

  1. <?php
  2. ///////////////////////////////////
  3. //////////dodaj bana
  4. ///////////////////////////////////
  5. function ban($ip) {
  6. if($_GET['action'] == 'ban' && $_GET['id']) {
  7. $ban_db = 'ip.txt';
  8. $hand = fopen($ban_db, 'w');
  9. flock($hand, LOCK_EX);
  10. fwrite($hand, $ip.'n');
  11. flock($hand, LOCK_UN);
  12. fclose($hand);
  13. echo 'Dodano bana';
  14. }
  15. }
  16. ///////////////////////////////////
  17. //////////panel po zalogwaniu
  18. ///////////////////////////////////
  19. function paneladmina() {
  20. global $PHP_SELF, $linki, $i;
  21. if(logowanie() == TRUE) {
  22. echo ' <div id="title"><font class="decor">'.$linki[$i]['ip'].'</font>
  23. <font class="decor">#</font> <a href="'.$PHP_SELF.'&action=ban&id='.$i.'">Zbanuj</a>
  24. <font class="decor">#</font> <a href="'.$PHP_SELF.'&action=edit&id='.$i.'">Edytuj</a>
  25. <font class="decor">#</font> <a href="'.$PHP_SELF.'&action=delete&id='.$i.'">Kasuj</a>
  26. <font class="decor">#</font> <a href="panel.php">Panel Admina</a></div>';
  27. ban($linki[$i]['ip']);
  28. }
  29. }
  30. ?>

I teraz właśnie chyba wszystko powinno chodzić ale nic sie niedzieje gdy jest adres: action=edit&id='.$i.' :?:
co jest tego winą :?: sad.gif
nospor
mowisz ze dajesz linka action=edit&id='.$i.' i nic sie nie dzieje. Natomiast w funkcji ban() wyswietlasz cokolwiek gdy action==ban a nie edit, wiec sie nie dziw ze funckja ban nic ci nie wyswietla.

pozatym do funkcji ban przekazujesz $ip, do ktorego wogole sie nie odwolujesz
dr_bonzo
A wywolujesz te funkcje?
Apo
No wywołuje tylko funkcje paneladmina. Dlatego dałem funkcje ban do funkcji paneladmina.
dtb
1. wydaje mi sie że nie można tworzyc funkcji wewnątrz funkcji, gdyż przy ponownym wywołaniu głównej funkcji wyskoczy błąd bo że nie można stwoprzyc drugiej funkcji o takiej nazwie. (kiedys mialem podobny problem)
2. czy nie chodzilło czy przypadkiem o action=ban&id='.$i.' ?
3. zmień $_GET['id'] na isset($_GET['id']) w ifie
4. fopen($ban_db, 'w'): w - otwiera plik tylko do zapisu. jeżeli plik istnieje wszystkie dane zostaną skasowane, jeżeli nie, php spróbuje go utworzyć. czy nie chodzilo ci o dopisywanie do pliku zamiast nadpisywanie (a zamiast w)?
nospor
@dtb tutaj nie jest tworzona funkcja w funkcji, a jest wywoływana funkcja w funkcji. Lekka roznica smile.gif

@Apo nie napisaleś czy moja skromna uwaga była słuszna co do linku i warunku
Apo
@nospor
c oto twojegi linku to z pośpiechu popełniłem błąd. A wszystkie te drobne błędy typu 'w' czy w if-ie isset(&_GET['id']) nie maja większego znaczenia, bo chce aby mi to ogółem chodziło a potem przechodze do szczegółów.
Aha nospor a jak nie przekazuje wartości $ip do funkcji jak wydaje mie sie że jest przekazywane tu : ban($linki[$i]['ip']); w tej drugiej funkcji na końcu w poscie 1.
nospor
Ja nie napisalem ze nie przekazujesz, a ze sie nie odwolujesz (nie wykorzystujesz). To lekka roznica

Podaj jeszcze raz poprawiony kod, poprawione pytanie , bo przez te twoje bledy nie wiem oco ci chodzilo smile.gif
Apo
heh narazie dałem sobie z tym spokój zrobie to potem ;] narazie proste rzeczy smile.gif
ale jeszczy tylko 1 pytanie.
W pliku z kategoriami serializuje dane. Potem przy pomocy funkcji je odczytuje i tu mam kod:

  1. <?php
  2.  $linki = show('category_db.txt');
  3.  $linki = unserialize($linki);
  4. switch($_POST['cat']) {
  5. for($i=0; $i < count($linki); $i++) {
  6. case $i:
  7. $category = $linki[$i]['kategoria'];
  8. break;
  9. }
  10.  default:
  11.  $category = 'inna';
  12. }
  13. ?>

I odczytuje te kategorie i chce dać na switcha. Ake wyskakuje mi błąd:
Parse error: syntax error, unexpected T_FOR, expecting T_CASE or T_DEFAULT or '}' in g:\usr\apache\httpd\html\category\index.php on line 72

Linia 72:
for($i=0; $i < count($linki); $i++) {

No i moim zdaniem tu nie ma błedu ale coś robie źle sad.gif
nospor
Skladani switch nie pozwala na wkladanie zadnych petli w srodek. musisz recznie robic te case a nie tak jak teraz dynamicznie smile.gif

No, ewentualnie moglbyc stworzyc dynamiczne string reprezentujacy twoj kod php i potem go evalem potraktowac.
Apo
hmm poczytałem o tym eval ale to sie raczej nie nada.
Bo mam takie coś sobie tongue.gif
kategorie są zapisane w pliku i przez panel adminia można je dodawać i usuwać.
No wiec sie zmienia zawartość pliku. I przy dodanio strony do mojego katalogu stron www jest wybór kategorii. I tam właśnie sa generowane te wpisy z pliku w polu select. Po wyborze select 'switch' ustawiał kategorie z pola select do zmiennej $category i zapisywał do pliku:

  1. <?php
  2. switch($_POST['cat']) {
  3. case 0:
  4. $category = 'Webmaster';
  5. break;
  6. case 1:
  7. $category = 'Programowanie';
  8. break;
  9. case 2:
  10. $category = 'Grafika';
  11. break;
  12. }
  13.  
  14. $linki[] = array('kategoria' => $category, 'autor' => $nickzform, 'www' => $wwwzform, 'tytul' => $titlezform, 'opis' => $opiszform, 'ip' => $numerip, 'id' => $numerid);
  15. $linki = serialize($linki);
  16. add('baza.txt', $linki);
  17. ?>

Coś takiego.
Może macie propozycje jak to rozwiązać snitch.gif
Hacker
A próbowałeś tak??
  1. <?php
  2.  $linki = show('category_db.txt');
  3.  $linki = unserialize($linki);
  4.  if ($_POST['cat'] > count($linki) || !$linki[$_POST['cat']])
  5.  $kategoria = 'cośtam';
  6.  else
  7.  $kategoria = $linki[$_POST['cat']]['kategoria'];
  8.  
  9. ?>
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.