2013-06-07 13 views
7

OK problem polega na tym, że kiedy używam funkcji przycinania nie działa, ale gdy uruchamiam kod bez funkcji przycinania działa, ale nie działa prawidłowo (formularz akceptuje białe spacje .)

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

próbowałem ręcznego http://php.net/manual/en/function.trim.php ale to było trudne do odczytania i nie dowiedzieć się czegoś

+5

Nie możesz przekaż wynik 'trim()' bezpośrednio do 'empty()'. Włącz raportowanie błędów, a zobaczysz związane z nim błędy. 'empty()' wymaga _variable_ jako swojego argumentu, więc musisz najpierw zapisać 'trim ($ _ POST [])' w vars, a następnie przetestować przez 'empty()' –

+2

'error_reporting (E_ALL); ini_set ('display_errors', 1); '_always_ zrób to podczas tworzenia kodu. –

+1

Nota boczna: Zdaje się, że licznik jest intuicyjny, aby "unsetować" zmienną, a następnie natychmiast sprawdzić, czy jest ustawiony za pomocą 'isset'. – phpisuber01

Odpowiedz

15

Jako PHP manual mówi:

pusty - Określić, czy zmienna jest pusty

W twoim przypadku, trim jest wywołanie funkcji, a nie zmienna.

Jeśli naprawdę chcesz zrobić swoją if oświadczenie inline, można użyć coś takiego:

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

Ale lepsze wdrożenie powinno być:

$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 widzę. dzięki za twoją odpowiedź było bardzo pomocne. – user2300068

+3

Funkcja 'empty()' nie przyjmie żadnych dowolnych wyrażeń (poniżej PHP 5.5), a zatem wywoła funkcje, nie zadziała, ** również ** jako przypisanie zmiennych, co spowoduje, że twój przykładowy wiersz będzie niepoprawny. – losnir

+0

Właśnie przetestowane, masz absolutną rację. http://codepad.org/AarXcD8a - Mój błąd. –