Validar campos vacios por metodo post en php

publicado por: Anonymous

mi duda esta en que php no reconoce los campos vacíos dentro $_POST, el cual contiene el arreglo de mi formulario.

tengo el siguiente codigo:

index.php

    <!DOCTYPE html>
<html>
<head>
    <title>Document</title>
</head>
<body>
    <form action="recibe.php" method="post">

    <input type="text" placeholder="Nombre:" name="nombre">
        <br>

        <label for="hombre">Hombre</label>
        <input type="radio" name="sexo" value="hombre" id="hombre">
        <br>

        <label for="mujer">Mujer</label>
        <input type="radio" name="sexo" value="mujer" id="mujer">
        <br>

        <select name="year" id="year">
            <option value="2000">2000</option>
            <option value="2001">2001</option>
            <option value="2002">2002</option>
        </select>
        <br>

        <label for="terminos">Aceptas los Terminos?</label>
        <input type="checkbox" name="terminos" id="terminos" value="ok">
        <br>
        <input type="submit" value="Enviar">


    </form>
</body>
</html>

Y valido con:

recibe.php

<?php
print_r($_POST);

if(!$_POST) {
    header("Location: http://localhost/Formularios/");
}

else
{
    $nombre = $_POST["nombre"];
    $sexo = $_POST["sexo"];
    $year = $_POST["year"];
    $Terminos = $_POST["terminos"];

    echo "Hola,".$nombre . " eres:". $sexo;
}

?>

Se supone que si no se envía completo el formulario, debe de volver al formulario hasta que todos los datos estén, pero me muestra esto:

    Array ( [nombre] => [year] => 2000 )
Notice: Undefined index: sexo in C:xampphtdocsFormulariosrecibe.php on line 11

Notice: Undefined index: terminos in C:xampphtdocsFormulariosrecibe.php on line 13
Hola, eres:

solución

La solución al problema planteado es la siguiente:

<?php
// Si todos los campos se han enviado, entonces, «$post» será «true»,
// de lo contrario será «false»:
$post = (isset($_POST['nombre']) && !empty($_POST['nombre'])) &&
        (isset($_POST['sexo']) && !empty($_POST['sexo'])) &&
        (isset($_POST['year']) && !empty($_POST['year'])) &&
        (isset($_POST['terminos']) && !empty($_POST['terminos']));


// Si $post es true (verdadero), entonces se mostrarán los resultados:
if ( $post ) {
    $nombre = htmlspecialchars($_POST["nombre"]);
    $sexo = htmlspecialchars($_POST["sexo"]);
    $year = htmlspecialchars($_POST["year"]);
    $terminos = htmlspecialchars($_POST["terminos"]);

  // Resultado
  echo "Hola <strong>$nombre</strong>, eres <strong>$sexo</strong>";
}else {
  // Si en cambio, es false (falso), entonces volverá al formulario desde
  // donde se envió la petición:
  header("Location: ./");
}
?>

La razón por la que se te presenta dicho problema, es porque $_POST es una variable global de tipo array asociativo y por ende, sigue existiendo mientras se envíe peticiones a través del método POST del formulario. Eso trae como resultado que no se cumpla la condicional.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *