• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Użycie zmiennej z jednego pliku w innym - return oraz global wyświetlają undefined

Object Storage Arubacloud
0 głosów
205 wizyt
pytanie zadane 12 listopada 2018 w PHP przez Śmieszek_;3 Użytkownik (780 p.)
edycja 12 listopada 2018 przez Śmieszek_;3

Cześć, 

w pliku modfunctions.php mam funkcję

function articlesToAccept($polaczenie) {
			if ($anyArticlesToAccept = $polaczenie->query("SELECT * FROM articles WHERE toaccept=1")) {
				global $amountOfArticlesToAccept;
				global $rowToAccept; 

				$amountOfArticlesToAccept = $anyArticlesToAccept->num_rows;
				
				
				if ($amountOfArticlesToAccept>0) {
					for ($i=0; $i<$amountOfArticlesToAccept; $i++) {
						$articlesToAccept = $anyArticlesToAccept->fetch_assoc();
						$aid = $articlesToAccept['artid'];
						$authorLogin = $articlesToAccept['login'];
						$cid = $articlesToAccept['catid'];
						$subject = $articlesToAccept['subject'];
						$rowAmount = $i+1;
						$rowToAccept .= '<div class="to-accept-row"><div class="to-accept-row-counting">'.$rowAmount.'</div>';
						$rowToAccept .= '<div class="accept-row-title">'.$subject.'</div>';
						$rowToAccept .= '<div class="accept-row-author">'.$authorLogin.'</div>';
						$rowToAccept .= '<div class="accept-row-checkbox"><input type="checkbox"></div></div>';
					}
					return true;
				} else {
					$rowToAccept .= "Nie ma artykułów do zaakceptowania.";
					return false;
				}
			} else {
				throw new Exception($polaczenie->error);
			}
		}

 

W pliku index.php używam require_once  żeby mieć dostęp do wszystkich zmiennych z tego pliku i w pewien sposób działa. W index.php używam zarówno zmiennej $amountOfArticlesToAccept jak i $rowToAccept i ta druga działa bez zarzutu natomiast pierwsza zwraca undefined. 

Próbowałem użyć

return $amountOfArticlesToAccept; 

pod pętlą for, ale to nic nie daje, dalej jest błąd undefined

 

Kod pliku index.php

if (isModerator($gid, $polaczenie=$polaczenie)) {
			$panelHTML = '<div class="mcp_panel">';
			$panelHTML .= '<div class="panel_rightcolumn">'; 
			$panelHTML .= '<div class="thead">Ukryte artykuły</div>';
			$panelHTML .= '<div class="to-accept-row">';
			$panelHTML .= '<div class="accept-row-left">Ilość artykułów do zaakceptowania: </div>';
			$panelHTML .= '<div class="accept-row-right">'.$amountOfArticlesToAccept.'</div>';
			$panelHTML .= '</div>';
			if (articlesToAccept($polaczenie)) {
				$panelHTML .= $rowToAccept;
			} else {
				$panelHTML .= $rowToAccept;
			}
			$panelHTML .= '</div>';
			$panelHTML .= '</div></div>';
		} else {
			header("Location: ../index.php");
			exit();
		}

 

Dlaczego $rowToAccept mogę normalnie wywołać a $amountOfArticlesToAccept jest niezdefiniowana?

komentarz 12 listopada 2018 przez OdsetekGlupoty Pasjonat (15,360 p.)
Podaj treść błędu, który się wyświetla
komentarz 12 listopada 2018 przez Śmieszek_;3 Użytkownik (780 p.)
mod_fcgid: stderr: PHP Notice:  Undefined variable: amountOfArticlesToAccept in 

1 odpowiedź

+1 głos
odpowiedź 13 listopada 2018 przez Iamhexi Obywatel (1,330 p.)
wybrane 14 listopada 2018 przez Śmieszek_;3
 
Najlepsza

Próbujesz się odwołać do zmiennej globalnej $amountOfArticlesToAccept zanim wywołasz funkcję articlesToAccept($polaczenie) w IF'ie. W ten sposób odwołujesz się do nieistniejącej jeszcze zmiennej. Wywołaj funkcję articlesToAccept($polaczenie) przed próbą dostania się do $amountOfArticlesToAccept, a potem spróbuj się do niej odwołać, najlepiej przez tablicę superglobalnych $GLOBALS zmiennych tak, jak Ci wcześniej radziłem.

Zmienne globalne zadeklarowane w skrypcie są widoczne w całym skrypcie, ale nie wewnątrz funkcji. Deklarując zmienną globalną w jednej z funkcji (czyli gdzieś w skrypcie), w innych funkcjach nie masz do nich dostępu.

<?php

function aaa(){
    global $aaa;
    $aaa = 1;
}

function bbb() {
    echo $aaa;
}   

aaa();
bbb(); // Nic się nie wyświetli

?>

Jak obejść ten problem? Wystarczy użyć tablicy superglobalnej $GLOBALS. Schemat użycia wygląda następująco: $GLOBALS['twojazmienna']; Należy pamiętać, że $twojazmienna musi być zadeklarowana ze słowem kluczowym global. Jeśli odwołujesz się do zmiennej lub tablicy superglobalnej możesz ich używać w dowolnym miejscu w skrypcie, np. wewnątrz funkcji, klas jak i poza nimi.

<?php

function aaa(){
    global $aaa;
    $aaa = 1;
}

function bbb() {
    echo $GLOBALS['aaa'];
}   

aaa();
bbb(); // Wyświetli się 1

?>

Jeśli dalej będą problemy, to spróbuję wymyślić coś innego. Daj znać, czy pomogło.

Pozdrawiam wink

komentarz 14 listopada 2018 przez Śmieszek_;3 Użytkownik (780 p.)

Niestety nic, teraz wyświetla błąd

mod_fcgid: stderr: PHP Notice:  Undefined index: amountOfArticlesToAccept in

Jeżeli wywołuję tę zmienną w tym pliku (modfunctions.php) to działa, ale jak spróbuję w tym drugim - index.php (gdzie ma się wyświetlać) to wyskakuje ten błąd.

Używam require_once więc powinno załadować te wszystkie funkcje i zmienne z modfunctions i je wyświetlić, ale wyrzuca błąd ;/

1
komentarz 14 listopada 2018 przez Iamhexi Obywatel (1,330 p.)
Próbujesz się odwołać do zmiennej globalnej $amountOfArticlesToAccept zanim wywołasz funkcję articlesToAccept($polaczenie) w IF'ie. W ten sposób odwołujesz się do nieistniejącej jeszcze zmiennej. Wywołaj funkcję articlesToAccept($polaczenie) przed próbą dostania się do $amountOfArticlesToAccept, a potem spróbuj się do niej odwołać, najlepiej przez tablicę superglobalnych $GLOBALS zmiennych tak, jak Ci wcześniej radziłem.

Abstrahując, jeżeli coś jest policzalne w j. angielskim, np. artykuły [articles] to używa się słowa 'number' - liczba, a nie 'amount' - ilość. Stąd $numberOfArticlesToAccept byłoby lepszą nazwą zmiennej niż $amountOfArticlesToAccept .
1
komentarz 14 listopada 2018 przez Śmieszek_;3 Użytkownik (780 p.)
Dzięki, działa ;)

 

Z nazywaniem zmiennych mam trochę problemu i myślę nad tym jakiś czas, mój angielski nie jest jeszcze na wystarczająco dobrym poziomie ;d Dzięki za radę! ;)

Podobne pytania

0 głosów
2 odpowiedzi 232 wizyt
pytanie zadane 20 lutego 2021 w JavaScript przez Szyszka Gaduła (3,490 p.)
0 głosów
1 odpowiedź 166 wizyt
pytanie zadane 19 maja 2020 w C i C++ przez kasia98 Nowicjusz (220 p.)
0 głosów
1 odpowiedź 192 wizyt
pytanie zadane 24 kwietnia 2020 w Java przez danielo665 Obywatel (1,040 p.)

92,583 zapytań

141,434 odpowiedzi

319,669 komentarzy

61,966 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...