Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Niewidoczność zmiennej w funkcji
Forum PHP.pl > Forum > Przedszkole
kuna15
Mam skrypt stronnicowania:

  1. $wykonawca='ddd';
  2. $skrypt="/szukaj/".$wykonawca."/";
  3.  
  4. function pasek($total_items,$na_stronie,$na_pasku,$skrypt,$s,$wykonawca) {
  5. $stron = ceil($total_items/$na_stronie);
  6.  
  7. if ($s<1) $s=1;
  8. if ($s>$stron) $s=$stron;
  9. $koniec = $s+$na_pasku;
  10. if ($s<=$na_pasku) $koniec = $na_pasku*2+1;
  11. if ($koniec>$stron) $koniec = $stron;
  12. $start = $koniec-$na_pasku*2;
  13. if ($start<1) $start=1;
  14. if ($s>1) $p = "<a href='$skrypt".(1)."'>|&lt;&lt;</a>&nbsp;&nbsp;&nbsp;<a href='$skrypt".($s-1)."'>&lt;</a>";
  15. else $p = "<span style='color:gray; font-size:12px;'>|&lt;&lt;</span>&nbsp;&nbsp;&nbsp;<span style='color:gray'>&lt;</span>";
  16. if ($s<$stron) $n = "<a href='$skrypt".($s+1)."'>&gt;</a>&nbsp;&nbsp;&nbsp;<a href='$skrypt".$stron."'>&gt;&gt;|</a>";
  17. else $n = "<span style='color:gray; font-size:12px;'>&gt;</span>&nbsp;&nbsp;&nbsp;<span style='color:gray'>&gt;&gt;|</span>";
  18. for ($i=$start; $i<=$koniec; $i++) {
  19. if ($i==$s) $l .= "&nbsp;<span style='color:#ff0000; font-size:12px;'><big><b>$i</b></big></span>&nbsp;";
  20. else $l .= "&nbsp;<a href='$skrypt$i'>$i</a>&nbsp;";
  21. }
  22. if ($total_items<1) { $wynik = "Brak informacji spełniających kryteria wyszukiwania";
  23. $sql = "UPDATE `liczniki` SET `cnt`=`cnt`+1 WHERE id=1;";
  24. $resultxx = mysql_query($sql);
  25.  
  26. $sql = "INSERT INTO `nieznalezione` ( `id` , `tytul` , `data`) VALUES ( '', '$wykonawca', '$cur_date');";
  27. $dodaj = mysql_query($sql);
  28. }
  29. (...)


Problem polega na tym, że nie mogę wstawić do zapytania:
  1. $sql = "INSERT INTO `nieznalezione` ( `id` , `tytul` , `data`) VALUES ( '', '$wykonawca', '$cur_date');";

zmiennej $wykonawca, echo tego zapytania pokazuje wtedy:
  1. INSERT INTO `nieznalezione` ( `id` , `tytul` , `data`) VALUES ( '', '', '');

ale jak zamiast $wykonawca wstawiam w to miejsce $skrypt (która też składa się w części ze $wykonawca) to wszystko się ładnie wyświetla:
  1. INSERT INTO `nieznalezione` ( `id` , `tytul` , `data`) VALUES ( '', '/szukaj/ddd/', '');


O co tutaj chodzi questionmark.gif
Dlaczego nie mogę tej zmiennej tam wstawić bezpośrednio, ale jak wrzucę ją w co innego to już mogę to tam wstawić ?



viking
Poczytaj o zasięgu zmiennych. Nie będą widoczne wewnątrz funkcji chyba że je do niej przekażesz

pasek($a,$b,$wykonawca);
kuna15
no, ale przecież mam na końcu:
function pasek($total_items,$na_stronie,$na_pasku,$skrypt,$s,$wykonawca)
viking
To jest definicja funkcji która nijak ma się do wartości poza nią - przez przypadek nazwy się pokrywają. Wartości do niej przekazujesz wywołując funkcję.
kuna15
Dobra zajarzyłem, dzięki smile.gif
viking
W miejscu w którym wywołujesz funkcję pasek(), na 6 miejscu w liście argumentów ma się znaleźć zmienna z zewnątrz, w tym wypadku $wykonawca
http://php.net/manual/en/functions.user-defined.php

Możesz też odwołać się do zmiennych z nadrzędnego kontekstu w postaci domknięcia ale wspominam tylko jako ciekawostkę na przyszlość kiedy zrozumiesz podstawy smile.gif

  1. $wykonawca='ddd';
  2. $skrypt="/szukaj/".$wykonawca."/";
  3.  
  4. $pasek = function($total_items,$na_stronie,$na_pasku,$s) use ($skrypt, $wykonawca) {
  5. echo $total_items, '-', $skrypt, '-', $wykonawca;
  6. $wykonawca = 'aaa';
  7. };
  8.  
  9. $pasek(20, 10, 1, 1);
  10. echo ', przekazana kopia, wartość oryginalna bez zmian: ' . $wykonawca;
  11.  
kuna15
Dzięki za info smile.gif
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.