2012-10-24 20 views
66

Ho un modulo su una pagina che si invia a un'altra pagina. Lì, controlla se la posta in entrata è piena. Se è così allora fai qualcosa e se non è pieno, fai qualcos'altro. Non capisco perché dice sempre che è impostato, anche se invio un modulo vuoto. Cosa manca o è sbagliato?

step2.php:

<form name="new user" method="post" action="step2_check.php"> 
<input type="text" name="mail"/> <br /> 
<input type="password" name="password"/><br /> 
<input type="submit" value="continue"/> 
</form> 

step2_check:

if (isset($_POST["mail"])) { 
    echo "Yes, mail is set";  
}else{ 
    echo "N0, mail is not set"; 
} 
+4

Tutti gli ingressi e le aree di testo presenti nel modulo di testo simile verranno inviati al server anche se i loro valori sono stringhe vuote. – hypeJunction

risposta

173

Change a questo:

if (isset($_POST["mail"]) && !empty($_POST["mail"])) { 
    echo "Yes, mail is set";  
}else{ 
    echo "N0, mail is not set"; 
} 

Così $ _POST è sempre impostato, ma il suo contenuto potrebbe essere vuoto. !

Dal vuoto() controlla già se il valore è impostato, è anche possibile utilizzare questa versione:

if (!empty($_POST["mail"])) { 
    echo "Yes, mail is set";  
}else{ 
    echo "N0, mail is not set"; 
} 
+2

Entrambe le opzioni funzionano bene. Molto chiaro e ben spiegato. Grazie! – Nrc

+7

Questa tabella comparativa è molto utile per cose come questa http://php.net/manual/en/types.comparisons.php –

+1

Piccola cosa ... Penso che sia preferibile evitare l'operatore '!' In casi come questo (più facile da leggere, meno possibilità di errore, ecc.) e invertire la logica ... 'if (vuoto()) {/ * No * /} altro {/ * Sì * /}' – MrWhite

18

Uso !empty invece di isset. isset return true per $_POST perché l'array $_POST è superglobale e esiste sempre (impostato).

O uso migliore $_SERVER['REQUEST_METHOD'] == 'POST'

+2

Si dovrebbe menzionare che usare BOTH 'isset' e'! Empty' per evitare errori. EDIT: Whoops, a quanto pare Imparare ogni giorno quindi [Ref] (http://kunststube.net/isset/) – Touki

+1

quale errore? 'empty' sopprime gli errori – Nemoden

+0

Empty non genera errori (per variabili non impostate) @Touki – PeeHaa

2

Se si invia una forma vuota, $ _POST [ 'email'] sarà ancora essere inviato, ma il valore è vuoto. Per verificare se il campo è vuoto è necessario controllare

if(isset($_POST["mail"]) && trim($_POST["mail"]) != "") { .. } 
+0

Copia il codice incolla e penso che non funzioni? Hai controllato? – Nrc

4

From php.net, isset

Restituisce TRUE se var esiste e ha un valore diverso da NULL, FALSE altrimenti.

lo spazio vuoto è considerato come impostato. Devi usare empty() per controllare tutte le opzioni nulle.

1

Forse si può provare questo:

if (isset($_POST['mail']) && ($_POST['mail'] !=0)) { echo "Yes, mail is set"; } else { echo "No, mail is not set"; } 

2

aggiungere il seguente attributo al modulo testo di input: required="required". Se il modulo non è compilato, non consentirà all'utente di inviare il modulo.

Il nuovo codice sarà:

<form name="new user" method="post" action="step2_check.php"> 
<input type="text" name="mail" required="required"/> <br /> 
<input type="password" name="password" required="required"/><br /> 
<input type="submit" value="continue"/> 
if (isset($_POST["mail"])) { 
    echo "Yes, mail is set";  
} 
0

di rispondere alla domanda pubblicato: isset e svuotarlo insieme dà tre condizioni. Questo può essere usato anche da Javascript con un comando Ajax.

$errMess="Didn't test"; // This message should not show 
if(isset($_POST["foo"])){ // does it exist or not 
    $foo = $_POST["foo"]; // save $foo from POST made by HTTP request 
    if(empty($foo)){  // exist but it's null 
     $errMess="Empty"; // #1 Nothing in $foo it's emtpy 

    } else {    // exist and has data 
     $errMess="None"; // #2 Something in $foo use it now 
     } 
} else {     // couldn't find ?foo=dataHere 
    $errMess="Missing"; // #3 There's no foo in request data 
    } 

echo "Was there a problem: ".$errMess."!"; 
2

Si può semplicemente utilizzare:

if($_POST['username'] and $_POST['password']){ 
    $username = $_POST['username']; 
    $password = $_POST['password']; 
} 

In alternativa, utilizzare empty()

if(!empty($_POST['username']) and !empty($_POST['password'])){ 
    $username = $_POST['username']; 
    $password = $_POST['password']; 
} 
+0

Secondo il [confronto di tipo PHP tabelle] (http://php.net/manual/en/types.comparisons.php) hai assolutamente ragione. Un semplice booleano fa il lavoro della funzione vuota per controllare la stringa vuota. – viery365

0

Si può provare questo:

if (isset($_POST["mail"]) !== false) { 
    echo "Yes, mail is set";  
}else{ 
    echo "N0, mail is not set"; 
} 
+0

Devi spiegare la tua risposta. SO esiste non solo per rispondere alle domande ma per educare le persone – Machavity

0
<form name="new user" method="post" action="step2_check.php"> 
    <input type="text" name="mail" required="required"/> <br /> 
    <input type="password" name="password" required="required"/><br /> 
    <input type="submit" value="continue"/> 
</form> 

<?php 
if (!empty($_POST["mail"])) { 
    echo "Yes, mail is set";  
}else{ 
    echo "N0, mail is not set"; 
} 
?> 
0

Si può provare,

<?php 

    if (isset($_POST["mail"])) { 
      echo "Yes, mail is set";  
     }else{ 
      echo "N0, mail is not set"; 
     } 
    ?> 
2

Uso !empty() invece di isset(). Perché isset() restituirà sempre true nel tuo caso.

if (!empty($_POST["mail"])) { 
    echo "Yes, mail is entered";  
} else { 
    echo "No, mail is not entered"; 
} 
0
<?php 
    if(isset($_POST['mail']) && $_POST['mail']!='') { 
     echo "Yes, mail is set"; 
    }else{ 
     echo "N0, mail is not set"; 
    } 
?> 
+3

Dovresti spiegare perché il tuo codice risponde alla domanda dell'OP. – Markus