2013-06-07 17 views
7

Ok il problema è che quando uso la funzione trim non funziona ma quando eseguo il codice senza la funzione trim funziona, ma non funziona correttamente (il modulo accetta spazi bianchi .)

<?php 
session_start(); 
unset($_SESSION['username']); 

if (isset($_SESSION['username'])) 
    {echo "You are in already";} 

else if ($_SERVER['REQUEST_METHOD'] == 'POST') 
{  

if (!empty(trim($_POST['username'])) && !empty(trim($_POST['email']))) 
    { 
     $uname = htmlentities($_POST['username']); 
     $email = htmlentities($_POST['email']); 
    $_SESSION['username'] = $uname; 

      echo "THANKS: " . $uname . "<br />"; 
    } 
else { echo "fill the goddemn field"; } 


    } else { ?> 

<form action="index.php" method="post"> 
<label for="username">USERNAME:</label> 
<input type="text" name="username" /> 
<label for="E-MAIL">E-mail:</label> 
<input type="text" name="email" /> 
<input type="submit" value="Enter" /> 
</form> 


<?php } ?> 

ho provato il manuale http://php.net/manual/en/function.trim.php ma era difficile da leggere e non ho figura fuori qualche cosa

+5

Non è possibile passa direttamente il risultato di 'trim()' a 'empty()'. Attiva la segnalazione degli errori e vedrai errori ad esso correlati. 'empty()' richiede un _variable_ come argomento, quindi è necessario prima memorizzare 'trim ($ _ POST [])' in vars, quindi testare tramite 'empty()' –

+2

'error_reporting (E_ALL); ini_set ('display_errors', 1); '_always_ fai questo quando sviluppi codice. –

+1

Nota a margine: sembra controintuitivo disattivare una variabile, quindi verificare immediatamente se è impostata con 'isset'. – phpisuber01

risposta

15

Come il PHP manual dice:

vuoto - Determinare se un variabile è vuota

Nel suo caso, trim è una chiamata di funzione, non una variabile.

Se si vuole veramente fare la vostra if dichiarazione in linea, è possibile utilizzare qualcosa di simile:

if (!empty($var=trim($_POST['username'])) && !empty($var=trim($_POST['email']))) 

Ma un'attuazione migliore dovrebbe essere:

$username = array_key_exists('username', $_POST) ? trim($_POST['username']) : null; 
$email = array_key_exists('email', $_POST) ? trim($_POST['email']) : null; 

if (!empty($username) && !empty($email)) 
{ 
    (...) 
+0

oh capisco. grazie per la tua risposta è stato molto utile. – user2300068

+3

La funzione 'empty()' non accetterà espressioni arbitrarie (sotto PHP 5.5), e quindi chiamate di funzione, non funzionerà, ** pure ** come assegnazione di variabili, rendendo invalido l'esempio in linea. – losnir

+0

Appena testato, hai assolutamente ragione. http://codepad.org/AarXcD8a - Il mio errore. –