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

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

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'


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.


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"]) != "") { .. }

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

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'];
}

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

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


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

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.


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

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."!";

0

Puedes probar esto:

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

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

0

Puedes probar,

 <?php

     if (isset($_POST["mail"])) {
            echo "Yes, mail is set";    
        }else{  
            echo "N0, mail is not set";
        }
  ?>
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.