2010-11-16 3 views
5

kann nicht verwendet werden Ich versuche, Code aus einer book ausführen. Es scheint ein Problem mit dem Code zu geben. HierFehlermeldung: Schwerwiegender Fehler: Funktion zurück> Wert im Schreibkontext in

ist die Fehlermeldung:

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

Hier ist der Code in der Nachricht verwiesen wird (ab Zeile 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 />"; 
     } 

ich Hilfe schätzen würde. Bitte lassen Sie mich wissen, wenn ich weitere Informationen zur Verfügung stellen muss


Vielen Dank Jungs. Das war sehr schnell. Die Lösung funktioniert großartig.

Das Problem ist, dass die leere() Funktion nur auf direkte Variablen angewendet werden muss.

Für die Zukunft: Der Code ist von 'PHP für Absolute Beginners' von Jason Lengstorf (2009), Seiten 90-91, Kapitel 3, $ _SESSION

korrigierte Code:

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

Antwort

6

kurz gesagt: die empty() Funktion funktioniert nur direkt auf Variablen

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

ich sagen würde, für den Verlauf immer weiter mit diesem Buch, nur verwenden temporäre Variable

so ändern:

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

zu

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

Vielen Dank. Das funktioniert. Ich habe die Frage mit dem korrigierten Code aktualisiert, falls jemand anderes dieses Buch benutzt und auf das Problem eingeht. – ntc

+1

Vielen Dank, dass Sie diese Frage mit dem korrigierten Code gestellt und beantwortet haben. Ich bin neu in PHP und in der Programmierung, und wenn ich einen Tippfehler im Buch überfalle, merke ich immer, dass ich es nur nicht verstehe. Es ist so eine Erleichterung, die richtigen Dinge zu tun und zu sehen, wie es funktioniert! –

+0

Ich denke, es sollte beachtet werden, dass dieses Verhalten nur PHP-Versionen <5.5 betrifft, wie unter [php.function.empty] (http://php.net/manual/en/function.empty.php) –

3

Genau Ihr Beispiel bei der manuellen

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

Verwenden Sie eine temporäre Variable, oder einfach nur Test gegen „leer erwähnt wird Zeichenkette "

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

Vielen Dank Sebastian . Gibt es eine Möglichkeit, die ich aus der Fehlermeldung abgeleitet haben könnte, dass das Problem bei dieser Funktion war? Ich bin nicht sehr gut darin, sie an dieser Stelle zu verstehen. – ntc

+0

Einige Methoden nehmen Parameter als Referenz und akzeptieren daher nur Variablen, da sie die einzigen sind, die als Referenz übergeben werden können. "pass by reference" bedeutet in der Regel, dass die Funktion * vielleicht * in diese Variable schreiben möchte (was sich auch auf den Variablenwert außerhalb der Funktion auswirkt). Und das ist, was die Nachricht zu sagen versucht: "leer" (wherever) kann nicht auf den Rückgabewert einer Funktion schreiben, nur auf Variablen. – KingCrunch