2010-11-16 12 views
5

Próbuję uruchomić kod z poziomu book. Wygląda na problem z kodem.Komunikat o błędzie: Błąd krytyczny: nie można użyć funkcji return> wartość w kontekście zapisu w

Oto komunikat błędu:

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

Oto kod wymieniony w komunikacie (począwszy od linii 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 />"; 
     } 

Będę wdzięczny za każdą pomoc. Daj mi znać, jeśli chcę podać więcej informacji:


Wielkie dzięki. To było bardzo szybkie. Rozwiązanie działa świetnie.

Problem polega na tym, że funkcję empty() należy zastosować tylko do zmiennych bezpośrednich.

Na przyszłość: Kod jest od 'PHP dla początkujących' Jason Lengstorf (2009), strony 90-91, rozdział 3, $ _SESSION

Kod poprawiony:

//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 />"; 
} 

Odpowiedz

6

w skrócie: funkcja empty() działa tylko bezpośrednio na zmiennych

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

powiedziałbym, za przebieg coraz dalej z tej książki, po prostu użyć tymczasowa zmienna

więc zmienić:

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

do

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

Wielkie dzięki. To działa. Zaktualizowałem pytanie poprawionym kodem na wypadek, gdyby ktoś inny używał tej książki i napotkał problem. – ntc

+1

Dziękuję bardzo za pytanie i udzielenie odpowiedzi na to pytanie z poprawionym kodem. Jestem nowicjuszem w PHP i programowaniu, a kiedy natknąłem się na literówkę w książce, zawsze uważam, że to tylko ja nie dostaję. Z ulgą umieszczamy właściwe rzeczy i widzimy, że działa! –

+0

Myślę, że należy zauważyć, że to zachowanie dotyczy tylko wersji PHP <5.5, jak podano w [php.function.empty] (http://php.net/manual/en/function.empty.php) –

3

Dokładnie Twój przykład jest wymieniona na ręczną

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)).

użytkowania tymczasową zmienną, lub po prostu przetestować przed „pusty ciąg "

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

Dzięki Sebastian . Czy mogę w jakiś sposób wywnioskować z komunikatu o błędzie, że problem dotyczy tej funkcji? Nie jestem zbyt dobry w ich rozumieniu w tym momencie. – ntc

+0

Niektóre metody pobierają parametry jako referencje, więc akceptują tylko zmienne, ponieważ są jedynymi, które mogą zostać przekazane jako referencje. "przekazanie przez odniesienie" zwykle oznacza, że ​​funkcja * może * chce zapisać do tej zmiennej (która wpływa również na wartość zmiennej poza funkcją). I to jest, co wiadomość stara się powiedzieć: "puste" (dlaczego) nie może zapisywać do wartości zwracanej funkcji, tylko do zmiennych. – KingCrunch

Powiązane problemy