Se è impostato $ _POST


101

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

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

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

Risposte:


224

La maggior parte degli input del modulo sono sempre impostati, anche se non compilati, quindi è necessario verificare anche il vuoto.

Poiché !empty()è già verificato per entrambi, puoi usare questo:

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

10
Questa tabella di confronto è molto utile per cose come questa php.net/manual/en/types.comparisons.php
A Star

2
Cosa minore ... 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 (empty()) {/* No */} else {/* Yes */}
MrWhite

25

Usa !emptyinvece di isset. isset restituisce vero $_POSTperché l' $_POSTarray è superglobale ed esiste sempre (impostato).

O meglio usare $_SERVER['REQUEST_METHOD'] == 'POST'


2
Dovresti menzionare che usa ENTRAMBI issete !emptyper prevenire errori. EDIT: Whoops, apparentemente impara ogni giorno quindi Ref
Touki

1
Ho provato ed entrambi funzionano bene. Perché $ _SERVER ['REQUEST_METHOD'] == 'POST' è migliore? Cosa fa esattamente? può riferirsi a un input specifico o è generico al modulo?
Nrc

3
$_SERVER['REQUEST_METHOD']assicura che l'utente abbia inviato il modulo. $_POSTpuò essere vuoto anche in questo caso. Considera questo modulo: l' <form method="post"></form>invio non invierà nulla all'azione, ma il tipo di richiesta sarà post. Oppure può essere fatto con l'arricciatura: curl -X POST http://example.com/processor.php. Se il processore contiene codice simile echo $_SERVER['REQUEST_METHOD']. ' '.var_export(empty($_POST),1);, vedraiPOST true
Nemoden

5

Da php.net , isset

Restituisce TRUE se var esiste e ha un valore diverso da NULL, FALSE in caso contrario.

lo spazio vuoto è considerato come un insieme. È necessario utilizzare empty () per controllare tutte le opzioni null.


2

Se invii il modulo vuoto, $ _POST ['mail'] verrà comunque inviato, ma il valore è vuoto. Per verificare se il campo è vuoto devi controllare

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

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

2

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

Il tuo 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";    
}

2

Puoi semplicemente usare:

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

In alternativa, usa empty ()

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

Secondo le tabelle di confronto dei tipi di PHP hai assolutamente ragione. Un semplice booleano esegue il lavoro della funzione vuota per controllare la stringa vuota.
viery365

So che questa è una vecchia risposta, ma il primo metodo può causare un avviso di indice non definito.
ICE

1
@ICE Può essere facilmente aggirato anteponendo le variabili con @, vale a dire: @$_POST['username']. Grazie per averlo notato.
CONvid19

2

Usa !empty()invece di isset(). Perché isset()tornerà sempre vero nel tuo caso.

if (!empty($_POST["mail"])) {
    echo "Yes, mail is entered";    
} else {  
    echo "No, mail is not entered";
}

1

Forse puoi provare questo:

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


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

1

Pensiamo che questo sia il tuo modulo HTML in step2.php

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>

Penso che tu ne abbia bisogno per il tuo database, quindi puoi assegnare il tuo valore del modulo HTML alla variabile php, ora puoi usare Real Escape String e sotto deve essere il tuo

step2_check.php

if(isset($_POST['mail']) && !empty($_POST['mail']))
{
$mail = mysqli_real_escape_string($db, $_POST['mail']);
}

Dove $ db è la connessione al database.


1

Controlla se il FORM è stato inviato prima, poi il campo. Dovresti anche disinfettare il campo per prevenire gli hacker.

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"  id="SubmitForm" name= "SubmitForm" value="continue"/>
</form>

step2_check:


if (isset($_POST["SubmitForm"]))
   {
   $Email =  sanitize_text_field(stripslashes($_POST["SubmitForm"]));
   if(!empty($Email))
     echo "Yes, mail is set"; 
   else
     echo "N0, mail is not set";
   } 
}

0

Per rispondere alla domanda pubblicata: isset e empty insieme danno tre condizioni. Può essere utilizzato 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."!";

0

Puoi provare questo:

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

Devi spiegare la tua risposta. COSÌ esiste non solo per rispondere alle domande ma per istruire 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

Puoi provare,

 <?php

     if (isset($_POST["mail"])) {
            echo "Yes, mail is set";    
        }else{  
            echo "N0, mail is not set";
        }
  ?>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.