2013-06-07 12 views
7

Ok das Problem ist, dass, wenn ich die Trimm-Funktion nicht funktioniert, aber wenn ich den Code ohne die Trimm-Funktion ausführen funktioniert, aber nicht richtig funktioniert (das Formular akzeptiert Leerzeichen .

) versucht
<?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 } ?> 

ich das Handbuch http://php.net/manual/en/function.trim.php aber es war schwer zu lesen und ich finde nichts aus

+5

Sie können nicht Übergeben Sie das Ergebnis von 'trim()' direkt an 'empty()'. Aktivieren Sie die Fehlerberichterstattung und Sie werden Fehler sehen. 'empty()' benötigt eine _variable_ als sein Argument, also müssen Sie zuerst die 'trim ($ _ POST [])' in vars speichern und dann über 'empty()' –

+2

'error_reporting (E_ALL); ini_set ('display_errors', 1); '_always_ tun dies bei der Entwicklung von Code. –

+1

Seitennotiz: Scheint intuitiv zu sein, eine Variable zu "unscharf" zu setzen und dann sofort zu überprüfen, ob sie mit 'isset' gesetzt ist. – phpisuber01

Antwort

15

Als PHP manual sagt:

empty - Prüft, ob ein Variable leer

In Ihrem Fall ist trim ein Funktionsaufruf, keine Variable.

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

Aber eine bessere Umsetzung sollte sein:

Wenn Sie wirklich Ihre if Aussage Inline tun möchten, können Sie so etwas wie verwenden können

$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 ich sehe. Danke für deine Antwort, es war sehr hilfreich. – user2300068

+3

Die Funktion 'empty()' akzeptiert keine beliebigen Ausdrücke (unter PHP 5.5) und funktioniert daher auch nicht, ** ebenso wie Variablenzuweisungen, wodurch Ihr Inline-Beispiel ungültig wird. – losnir

+0

Nur getestet, Sie haben absolut Recht. http://codepad.org/AarXcD8a - Mein Fehler. –