2010-11-16 19 views
5

Tôi đang cố gắng chạy một số mã từ book. Dường như có sự cố với mã.Thông báo lỗi: Lỗi nghiêm trọng: Không thể sử dụng hàm trả về> giá trị trong ngữ cảnh viết trong

Dưới đây là thông báo lỗi:

Fatal error: Can't use function return value in write context in /Applications/MAMP/htdocs/Eclipse-Workspace/simpleblog/test.php on line 24

Đây là mã tham chiếu trong thông điệp (bắt đầu trên đường dây 24)

if (!empty(trim($_POST['username'])) 
     && !empty(trim($_POST['email']))) { 
     // Store escaped $_POST values in variables 
      $uname = htmlentities($_POST['username']); 
      $email = htmlentities($_POST['email']); 

      $_SESSION['username'] = $uname; 

      echo "Thanks for registering! <br />", 
       "Username: $uname <br />", 
       "Email: $email <br />"; 
     } 

tôi sẽ đánh giá cao sự giúp đỡ nào. Vui lòng cho tôi biết nếu tôi cần cung cấp thêm bất kỳ thông tin nào


Cảm ơn rất nhiều bạn. Điều đó rất nhanh. Các giải pháp hoạt động tuyệt vời.

Vấn đề là hàm rỗng() chỉ cần được áp dụng cho các biến trực tiếp.

Để tham khảo trong tương lai: Mã này là từ 'PHP cho người mới bắt đầu tuyệt đối' bởi Jason Lengstorf (2009), các trang 90-91, Chương 3, $ _SESSION

đang sửa chữa:

//new - Created a variable that can be passed to the empty() function 
    $trimusername = trim($_POST['username']); 

    //modified - applying the empty function correctly to the new variable 
    if (!empty($trimusername) 
    && !empty($trimusername)) { 

    // Store escaped $_POST values in variables 
    $uname = htmlentities($_POST['username']); 
    $email = htmlentities($_POST['email']); 

    $_SESSION['username'] = $uname; 

    echo "Thanks for registering! <br />", 
     "Username: $uname <br />", 
     "Email: $email <br />"; 
} 

Trả lời

6

Tóm lại: Chức năng empty() chỉ hoạt động trực tiếp trên các biến số

<?php 
empty($foo); // ok 
empty(trim($foo)); // not ok 

tôi muốn nói, để tiếp tục với cuốn sách đó, chỉ cần sử dụng tạm thời biến

nên thay đổi:

if (!empty(trim($_POST['username'])) 

để

$username = trim($_POST['username']); 
if(!empty($username)) { 
    //.... 
+0

Cảm ơn rất nhiều. Những công việc này. Tôi đã cập nhật câu hỏi với mã đã sửa trong trường hợp bất kỳ ai khác đang sử dụng cuốn sách này và gặp sự cố. – ntc

+1

Cảm ơn bạn rất nhiều vì đã hỏi và trả lời câu hỏi này với mã đã sửa. Tôi mới sử dụng PHP và lập trình, và khi tôi chạy qua một lỗi đánh máy trong cuốn sách, tôi luôn nghĩ rằng đó chỉ là tôi không nhận được nó. Thật là nhẹ nhõm khi đặt đúng thứ vào và thấy nó hoạt động! –

+0

Tôi nghĩ rằng cần lưu ý rằng hành vi này chỉ ảnh hưởng đến các phiên bản PHP <5.5 như đã nêu tại [php.function.empty] (http://php.net/manual/en/function.empty.php) –

3

Chính xác ví dụ của bạn được nêu tại hướng dẫn

Note:

empty() only checks variables as anything else will result in a parse error. In other words, the following will not work: empty(trim($name)).

Sử dụng một biến tạm thời, hoặc chỉ thử nghiệm chống lại "rỗng chuỗi "

if (trim($foo) !== '') { 
    // Your code 
} 
+0

Cảm ơn Sebastian . Có cách nào tôi có thể suy ra từ thông báo lỗi rằng sự cố xảy ra với chức năng này không? Tôi không giỏi hiểu chúng vào thời điểm này. – ntc

+0

Một số phương thức lấy tham số làm tham chiếu và do đó chúng chỉ chấp nhận các biến, vì chúng là phương thức duy nhất, có thể được chuyển thành tham chiếu. "truyền bằng tham chiếu" thường có nghĩa là hàm * có thể * muốn ghi vào biến này (cũng ảnh hưởng đến giá trị biến bên ngoài hàm). Và đó là, thông điệp cố gắng nói: "trống" (tại sao) không thể ghi vào giá trị trả về của hàm, chỉ với các biến. – KingCrunch

Các vấn đề liên quan