2011-09-07 10 views
7

Vấn đề nhỏ liên quan đến phạm vi trong PHP, tôi dường như không thể gọi biến $ báo cáo bên ngoài vòng lặp while. Tôi đã thử nhiều thứ khác nhau, bao gồm return. Điều này không hoạt động, chỉ có hai chức năng hoạt động ở đây là nếu tôi echo biến số $report bên trong vòng lặp hoặc nếu tôi print nó. Mà tôi không muốn làm, mặc dù nó giải quyết vấn đề, nhưng tôi không muốn ngẫu nhiên vô nghĩa trên màn hình của người dùng.Sử dụng biến ngoài vòng lặp while (phạm vi)

Tôi đã tìm kiếm khoảng 15 phút hoặc lâu hơn, và tôi chưa thấy bất kỳ vấn đề nào giống như vấn đề này ở đây.

Mọi trợ giúp sẽ được đánh giá cao.

<? 
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

nếu bạn đang lặp lại báo cáo $ trong vòng lặp while, bạn có nhận được bất kỳ hoạt động nào không? – mithunsatheesh

+2

PHP thực sự không có khái niệm về phạm vi, ví dụ, Java ở đâu đây sẽ là một vấn đề. Nếu '$ report' không được khai báo khi bạn nhận được câu lệnh' echo', tôi đoán PHP không bao giờ đi vào vòng lặp 'while' ở vị trí đầu tiên. – NullUserException

+0

Hmm, nó không hoạt động. Tôi rõ ràng không chỉ cố gắng lặp lại báo cáo $, tôi chỉ đăng mã theo cách này vì mục đích đơn giản. Cách duy nhất tôi có thể sử dụng biến bên ngoài vòng lặp là nếu tôi lặp lại nó trước. –

Trả lời

10

Bạn có thể thử xác định biến trước vòng lặp, ví dụ:

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

Tôi hy vọng điều này sẽ giúp ích cho bạn!

Chỉnh sửa Sử dụng. = Không + =

+0

Vâng giải quyết vấn đề một cách hoàn hảo. Tôi cho rằng các biến có thể đưa vào các giá trị mới trong vòng lặp và giữ chúng bên ngoài nó, nhưng chúng không thể được định nghĩa bên trong nó. Cảm ơn bạn rất nhiều! –

+4

@RVward Bạn đã sai. Chúng * có thể * được khai báo trong vòng lặp và được sử dụng bên ngoài nó. Đây là [bằng chứng] (http://codepad.org/508BRBCi). Sự khác biệt là ghép các giá trị mới này thành '$ report', thay vì chỉ ghi đè nó bằng mỗi lần lặp của vòng lặp. – NullUserException

+0

@NullUserException rằng mã hoạt động ở đó, nhưng ngay cả khi tôi cố gắng echo $ prevDOCid nó không làm bất cứ điều gì ngoại trừ cung cấp cho biến không xác định. Không chắc bạn muốn tôi làm gì, điều duy nhất giải quyết được vấn đề là câu trả lời này. –