Se isset $ _POST

100

Eu tenho um formulário em uma página que envia para outra página. Lá, ele verifica se o e-mail de entrada está preenchido. Se sim, faça algo e se não estiver preenchido, faça outra coisa. Não entendo por que sempre diz que está configurado, mesmo que eu envie um formulário vazio. O que está faltando ou errado?

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";
}
Nrc
fonte
6
Todas as entradas e áreas de texto semelhantes a texto presentes em seu formulário serão enviadas ao servidor, mesmo se seus valores forem strings vazias.
hypeJunction

Respostas:

223

A maioria das entradas de formulário são sempre configuradas, mesmo se não forem preenchidas, portanto, você também deve verificar o vazio.

Como !empty()já verifica para ambos, você pode usar isto:

if (!empty($_POST["mail"])) {
    echo "Yes, mail is set";    
} else {  
    echo "No, mail is not set";
}
oopbase
fonte
9
Esta tabela de comparação é muito útil para coisas como esta php.net/manual/en/types.comparisons.php
A Star
2
Coisa menor ... Acho que é preferível evitar a !operadora em casos como este (mais fácil de ler, menos chance de erro, etc.) e inverter a lógica ...if (empty()) {/* No */} else {/* Yes */}
MrWhite 01 de
25

Use em !emptyvez de isset. isset retorna true $_POSTporque $_POSTarray é superglobal e sempre existe (set).

Ou melhor usar $_SERVER['REQUEST_METHOD'] == 'POST'

Nemoden
fonte
2
Você deve mencionar que use AMBOS issete !emptypara evitar erros. EDIT: Opa, aparentemente aprende todos os dias, em seguida, Ref
Touki
1
Eu tentei e ambos funcionam bem. Por que $ _SERVER ['REQUEST_METHOD'] == 'POST' é melhor? O que isso faz exatamente? pode se referir a uma entrada específica ou é genérico para o formulário?
Nrc
3
$_SERVER['REQUEST_METHOD']garante que o usuário enviou o formulário. $_POSTpode estar vazio mesmo neste caso. Considere este formulário <form method="post"></form>:, submetê-lo não enviará nada para a ação, mas o tipo de solicitação será post. Ou isso pode ser feito com a onda: curl -X POST http://example.com/processor.php. Se o processador contém código como echo $_SERVER['REQUEST_METHOD']. ' '.var_export(empty($_POST),1);, você veráPOST true
Nemoden
5

De php.net , isset

Retorna TRUE se var existe e tem valor diferente de NULL, FALSE caso contrário.

o espaço vazio é considerado como definido. Você precisa usar empty () para verificar todas as opções nulas.

janenz00
fonte
2

Se você enviar o formulário vazio, $ _POST ['mail'] ainda será enviado, mas o valor está vazio. Para verificar se o campo está vazio, você precisa verificar

if(isset($_POST["mail"]) && trim($_POST["mail"]) != "") { .. }
mboldt
fonte
Eu copio e colo o código e acho que não funciona? Você verificou?
Nrc
2

Adicione o seguinte atributo para a forma de texto de entrada: required="required". Se o formulário não for preenchido, não permitirá que o usuário o envie.

Seu novo código será:

<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";    
}
Kushan Mehta
fonte
2

Você pode simplesmente usar:

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

Alternativamente, use empty ()

if(!empty($_POST['username']) and !empty($_POST['password'])){
  $username = $_POST['username'];
  $password = $_POST['password'];
}
CONvid19
fonte
De acordo com as tabelas de comparação de tipos do PHP, você está absolutamente certo. Um booleano simples faz o trabalho da função vazia para verificar a string vazia.
viery365
Eu sei que esta é uma resposta antiga, mas o primeiro método pode causar aviso de índice indefinido.
ICE
1
@ICE Ele pode ser facilmente contornado por prefixar as variáveis com @, ou seja: @$_POST['username']. Obrigado por perceber isso.
CONvid19
2

Use em !empty()vez de isset(). Pois isset()sempre retornará verdadeiro no seu caso.

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

Talvez você possa tentar este:

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

Nica
fonte
1
<?php
    if(isset($_POST['mail']) && $_POST['mail']!='') {
        echo "Yes, mail is set";
    }else{
        echo "N0, mail is not set";
    }
?>
Asep Nurjaman
fonte
3
Você deve explicar por que seu código responde à pergunta do OP.
Markus
1

Vamos pensar que este é o seu formulário HTML em 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>

Eu acho que você precisa disso para o seu banco de dados, então você pode atribuir o seu valor de formulário HTML à variável php, agora você pode usar o Real Escape String e abaixo deve ser o seu

step2_check.php

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

Onde $ db é sua conexão de banco de dados.

AleksAnderson IT
fonte
1

Verifique se o FORMULÁRIO foi enviado primeiro e, em seguida, o campo. Você também deve higienizar o campo para evitar hackers.

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";
   } 
}
Debbie Kurth
fonte
0

Para responder à pergunta postada: isset e empty juntos fornecem três condições. Isso também pode ser usado por Javascript com um 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."!";
Vinnarian
fonte
0

Você pode tentar isto:

if (isset($_POST["mail"]) !== false) {
    echo "Yes, mail is set";    
}else{  
    echo "N0, mail is not set";
}
Akash Ujjwal
fonte
Você precisa explicar sua resposta. O SO existe não apenas para responder a perguntas, mas para educar as pessoas
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";
}
?>
Thilina
fonte
0

Podes tentar,

 <?php

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