2011-09-07 19 views
7

Mały problem dotyczący zakresu w PHP, nie mogę wywołać zmiennej $ report poza pętlą while. Próbowałem różnych rzeczy, w tym return. To nie działa, jedynymi dwiema funkcjami, które tutaj działają, są: echo zmienna $report wewnątrz pętli lub I print. Którego nie chcę robić, chociaż rozwiązuje problem, ale nie chcę przypadkowego bełkotu na ekranie użytkownika.Używanie zmiennej poza pętlą while (zakres)

Rozglądam się przez ostatnie 15 minut i nie widziałem żadnych problemów podobnych do tego tutaj.

Każda pomoc zostanie doceniona.

<? 
require "functions2.php"; 
require "members.php"; 
$query = "SELECT MAX(DOCid) as prevDOCid from reports"; 
$result = mysql_query($query); 

while ($row = mysql_fetch_array($result)) { 
    $prevDOCid = $row[prevDOCid]; 

$thisDOCid = $prevDOCid+1; 
$report = "a"."b".$thisDOCid; 


} 
echo $report; 
?> 
+0

jeśli echo $ raport wewnątrz pętli, czy masz jakieś op? – mithunsatheesh

+2

PHP tak naprawdę nie ma koncepcji zakresu, jak np. Java, gdzie byłby to problem. Jeśli '$ raport' nie zostanie zadeklarowany przed uzyskaniem dostępu do wyrażenia' echo', zgaduję, że PHP nigdy nie wchodzi w pętlę 'while'. – NullUserException

+0

Hmm, cóż, to nie działa. Najwyraźniej nie próbuję tylko powtórzyć raportu $, po prostu umieszczam kod w ten sposób dla uproszczenia. Jedynym sposobem, w jaki mogę użyć zmiennej poza pętlą, jest najpierw echo. –

Odpowiedz

10

Możesz spróbować zdefiniować zmienną przed pętlą, np.

$report = ""; 
while ($row = mysql_fetch_array($result)) { 
    $report .= "a"."b".$row["prevDOCid"]+1; 
} 
echo $report; 

Mam nadzieję, że to pomoże!

Edytuj Użyj. = Nie + =

+0

Tak, doskonale rozwiązałem problem. Przypuszczam, że zmienne mogą przyjmować nowe wartości w pętli i zatrzymywać je poza nim, ale nie można ich zdefiniować wewnątrz. Dziękuję bardzo! –

+4

@RVward Nie masz racji. Mogą * być * zadeklarowane w pętli i użyte poza tym. Oto [dowód] (http://codepad.org/508BRBCi). Różnica polega na tym, że nowe wartości są łączone z '$ report', zamiast tylko nadpisywać je każdą iteracją pętli. – NullUserException

+0

@NullUserException, że kod działa tam, ale nawet gdy próbuję wywołać echo $ prevDocid, to nie robi nic oprócz podania niezdefiniowanej zmiennej. Nie jestem pewien, co mam zrobić, jedyną rzeczą, która rozwiązała problem, była ta odpowiedź. –

Powiązane problemy