Si se establece $ _POST

100

Tengo un formulario en una página que se envía a otra página. Allí, comprueba si el correo de entrada está lleno. Si es así, haga algo y si no está lleno, haga otra cosa. No entiendo por qué siempre dice que está configurado, incluso si envío un formulario vacío. ¿Qué falta o está mal?

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
fuente
6
Todas las entradas y áreas de texto similares a texto presentes en su formulario se enviarán al servidor incluso si sus valores son cadenas vacías.
hypeJunction

Respuestas:

223

La mayoría de las entradas de formulario siempre están configuradas, incluso si no se completan, por lo que también debe verificar el vacío.

Como !empty()ya verifica ambos, puede usar esto:

if (!empty($_POST["mail"])) {
    echo "Yes, mail is set";    
} else {  
    echo "No, mail is not set";
}
oopbase
fuente
9
Esta tabla de comparación es muy útil para cosas como esta php.net/manual/en/types.comparisons.php
A Star
2
Menor cosa ... creo que es preferible evitar al !operador en casos como este (más fácil de leer, menos posibilidades de error, etc.) e invertir la lógica ...if (empty()) {/* No */} else {/* Yes */}
MrWhite
25

Utilizar en !emptylugar de isset. isset devuelve verdadero $_POSTporque $_POSTarray es superglobal y siempre existe (set).

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

Nemoden
fuente
2
Debe mencionar que use AMBOS issety !emptypara evitar errores. EDITAR: Vaya, aparentemente lo hace Aprender todos los días y luego Ref
Touki
1
Lo intenté y ambos funcionan bien. ¿Por qué $ _SERVER ['REQUEST_METHOD'] == 'POST' es mejor? ¿Qué hace exactamente? ¿Puede referirse a una entrada específica o es genérico al formulario?
Nrc
3
$_SERVER['REQUEST_METHOD']asegura que el usuario haya enviado el formulario. $_POSTpuede estar vacío incluso en este caso. Considere este formulario:, <form method="post"></form>enviarlo no enviará nada a la acción, pero el tipo de solicitud será post. O se puede hacer con curl: curl -X POST http://example.com/processor.php. Si el procesador contiene un código similar echo $_SERVER['REQUEST_METHOD']. ' '.var_export(empty($_POST),1);, veráPOST true
Nemoden
5

Desde php.net , isset

Devuelve VERDADERO si var existe y tiene un valor distinto de NULL, FALSE en caso contrario.

el espacio vacío se considera establecido. Necesita usar empty () para verificar todas las opciones nulas.

janenz00
fuente
2

Si envía el formulario vacío, se seguirá enviando $ _POST ['mail'], pero el valor está vacío. Para verificar si el campo está vacío, debe verificar

if(isset($_POST["mail"]) && trim($_POST["mail"]) != "") { .. }
mboldt
fuente
Copio pego el código y creo que no funciona? ¿Lo has comprobado?
Nrc
2

Agregue el atributo siguiente al formulario de entrada de texto: required="required". Si el formulario no está lleno, no permitirá que el usuario envíe el formulario.

Tu nuevo 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
fuente
2

Simplemente puede usar:

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

Alternativamente, use vacío ()

if(!empty($_POST['username']) and !empty($_POST['password'])){
  $username = $_POST['username'];
  $password = $_POST['password'];
}
CONvid19
fuente
De acuerdo con las tablas de comparación de tipos de PHP , tiene toda la razón. Un booleano simple hace el trabajo de la función vacía para verificar la cadena vacía.
viery365
Sé que esta es una respuesta anterior, pero el primer método puede causar un aviso de índice indefinido.
ICE
1
@ICE Puede ser fácilmente dejados de lado por un prefijo con las variables @, es decir: @$_POST['username']. Gracias por darte cuenta de eso.
CONvid19
2

Utilizar en !empty()lugar de isset(). Porque isset()siempre volverá verdadero en tu caso.

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

Tal vez puedas probar este:

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

Nica
fuente
1
<?php
    if(isset($_POST['mail']) && $_POST['mail']!='') {
        echo "Yes, mail is set";
    }else{
        echo "N0, mail is not set";
    }
?>
Asep Nurjaman
fuente
3
Debe explicar por qué su código responde a la pregunta del OP.
Markus
1

Vamos a pensar que este es su formulario HTML en 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>

Creo que lo necesita para su base de datos, por lo que puede asignar su valor de formulario HTML a la variable php, ahora puede usar Real Escape String y debajo debe estar su

step2_check.php

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

Donde $ db es su conexión de base de datos.

AleksAnderson IT
fuente
1

Verifique primero si se envió el FORMULARIO y luego el campo. También debe desinfectar el campo para evitar los piratas informáticos.

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
fuente
0

Para responder a la pregunta publicada: isset y empty juntos da tres condiciones. Esto también puede ser utilizado por 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."!";
Vinnarian
fuente
0

Puedes probar esto:

if (isset($_POST["mail"]) !== false) {
    echo "Yes, mail is set";    
}else{  
    echo "N0, mail is not set";
}
Akash Ujjwal
fuente
Necesitas explicar tu respuesta. SO existe no solo para responder preguntas, sino para educar a las personas
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
fuente
0

Puedes probar,

 <?php

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