2010-11-16 24 views
5

Sto provando a eseguire codice da uno book. Sembra che ci sia un problema con il codice.Messaggio di errore: Errore irreversibile: impossibile utilizzare la funzione return> value in write context in

Ecco il messaggio di errore:

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

ecco il codice indicato nel messaggio (a partire on line 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 />"; 
     } 

Gradirei qualsiasi aiuto. Per favore fatemi sapere se ho bisogno di fornire ulteriori informazioni


Grazie mille ragazzi. E 'stato molto veloce. La soluzione funziona alla grande.

Il problema è che la funzione empty() deve essere applicata solo alle variabili dirette.

di riferimento futuro: Il codice è da 'PHP per Absolute Beginners' da Jason Lengstorf (2009), pagine 90-91, capitolo 3, $ _SESSION

codice corretto:

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

risposta

6

in breve: la funzione empty() funziona solo direttamente sulle variabili

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

direi, per il corso di ottenere ulteriormente con quel libro, basta usare un variabile temporanea

quindi cambia:

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

a

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

Grazie mille. Questo funziona. Ho aggiornato la domanda con il codice corretto nel caso in cui qualcun altro stia utilizzando questo libro e si imbatta nel problema. – ntc

+1

Grazie mille per aver chiesto e risposto a questa domanda con il codice corretto. Sono nuovo di PHP e di programmazione, e quando mi imbatto in un errore di battitura nel libro ho praticamente sempre pensato che non sono io a ottenerlo. È un vero sollievo mettere le cose giuste e vederle funzionare! –

+0

Penso che si dovrebbe notare che questo comportamento riguarda solo le versioni di PHP <5.5 come dichiarato a [php.function.empty] (http://php.net/manual/en/function.empty.php) –

3

Esattamente il vostro esempio è citato il manuale

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

Utilizzare una variabile temporanea, o semplicemente di prova contro il "vuoto stringa "

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

Grazie Sebastian . C'è un modo che avrei potuto dedurre dal messaggio di errore che il problema era con questa funzione? Non sono molto bravo a capirli a questo punto. – ntc

+0

Alcuni metodi accettano i parametri come riferimento e quindi accettano solo variabili, poiché sono l'unico, che può essere passato come riferimento. "passa per riferimento" di solito significa che la funzione * forse * desidera scrivere su questa variabile (che influenza anche il valore variabile al di fuori della funzione). E cioè, ciò che il messaggio cerca di dire: "vuoto" (perché) non può scrivere sul valore di ritorno di una funzione, solo sulle variabili. – KingCrunch

Problemi correlati