No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Valida si un formulario ha sido enviado

17/24
Recursos

Aportes 20

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

No importa que tan genial su validación front-end, siempre tienes que validar desde el lado del servidor,

“Isset” comprueba si se ha seteado un dato o valor, peor no valida si esta vacío o no.

“Empty” (vacío en ingles) en cambio valida si un valor esta vacío o no.

Para solucionar el error que tuvo el profe a imprimir…

Es solo quitar el signo pesos $ antes del {

echo “¡Hola {$_POST[‘nombre’]}”;

Lo de validar si el formulario había sido enviado gracias al atributo name en el botón… no se me había ocurrido.
Excelente 🔥!
Comparto mi apunte de la clase

Index

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>iJCode - Validación de Formularios</title>
</head>
<body>
  <!-- Creación del formulario -->
  <form action="./server.php" method="POST">
    <label for="name">
      Ingresa tu nombre:
      <input type="text" name="name" id="name">
    </label>

    <!-- Un botón también puede llevar su atributo 'name' para validar si fue enviado por el método seleccionado -->
    <button type="submit" name="form">Enviar formulario</button>
  </form>
</body>
</html>

Server

<?php

// Comprobando que se recibio por el método POST
echo("<pre>");
   
  var_dump( $_POST );
  /*
    array(2) {
      ["name"]=>
      string(4) "Joel"
      ["form"]=>
      string(0) ""
    }
  */

echo("</pre>");

// isset(): Determina si una variable está definida y no es null.
// Es decir, determina si en la variable global $_POST (en este caso), existe el valor con determinado nombre
echo("<pre>");
   
  var_dump( isset($_POST['name']) );  // bool(true)
  var_dump( isset($_POST['age']) );  // bool(false)

  // Comprobando si el formulario fue enviado
  var_dump( isset($_POST['form']) ); // bool(true)

echo("</pre>");


// empty(): Determina si una variable está vacía, es decir que no exista un valor. Esta función no genera una advertencia si la variable no existe
echo("<pre>");

  var_dump( empty($_POST['name']) ); // bool(false)
  var_dump( empty($_POST['age']) ); // bool(true)

echo("</pre>");


// Creando una validación básica en el servidor
// Si 'name' esta definida en $_POST y no está vacía 'name' y si esta definida la variable 'form' en la variable global $_POST
if( isset($_POST['name']) && !empty($_POST['name']) && isset($_POST['form']) ){
  echo("Tu formulario se envío correctamente ✔");
}else{
  echo("Tu formulario no se envío ❌");
}
// Tu formulario se envío correctamente ✔

Resultado

Siempre es importante validar del lado del servidor, anotado.

😎 A mí me dijeron una vez “haz tu interfaz de usuario como que lo fuera a usar tu familia”. Dando a entender que lo tiene que saber usar mi mamá, mi hermana, mi abuelita, y hasta mi gato jaja. Hay que estar preparado para todo.

La función isset(), según el manual PHP, determina si una variable ha sido declarada y su valor no es NULO. Es importante fijarse bien: si una variable tiene valor nulo, aunque haya sido declarada, isset() devolverá false. En todos los ejemplos anteriores para is_null(), isset() devolvería false mientras que is_null() devolvió true, por eso se consideran funciones opuestas. También es importante fijarse que isset() devuelve true
 para variables con valores vacíos, por ejemplo, cadenas de texto vacías:

//isset() devuelve false por que $var no ha sido definida
var_dump( isset($var) );

//isset() devuelve false aunque la variable haya sido declarada pues su valor es NULL
$var;
var_dump( isset($var) );

//isset() devuelve true. El valor ya no es nulo aunque esté vacío
$var = "";
var_dump( isset($var) );```

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Validando el envío de un formulario</title>
</head>
<body>

<form action="server.php" method="post">

    <label for="nombre">Nombre</label>
    <input type="text" name="nombre" id="nombre">

    <button name="form" type="submit">Mandar formulario</button>

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

server.php

<?php

/* if ( isset($_POST["nombre"]) && !empty($_POST["nombre"])) {
    echo "¡Hola " . $_POST['nombre'] . "!";
}
else {
    echo "No mandaste nada 😾";
} */

if ( isset($_POST["form"]) ) {
    echo "Todo el formulario fue mandado";
}
else {
    echo "No se mando ningun formulario";
}```

Si tienes la version 7 o mayor puedes abraviar la condicion con un operador coalescente nulo

<?php

$name = $_POST['name'] ?? 'John';

fuente: https://www.phptutorial.net/php-tutorial/php-null-coalescing-operator/

<?php

if (empty($number)) {
  echo 'La variable number no existe si llegase a existir y estar vacía también va a ser true, por lo tanto se imprimiría este msn.';
}

$number = '';

// cuando sabemos que la variable ya ha sido previamente declarada no es necesario empty o isset
if (!$number) {
  echo 'La variable number está vacía, es 0 o "0", null o false';
}

// validamos tanto si corresponde con la comparación y el tipo de dato string en este caso.
if ($number === '1') {
  echo $number;
}

// tanto si $number es 1 entero o '1' string es true porque no validamos el tipo de dato.
if ($number == 1) {
  echo $number;
}


// Cualquier valor diferente de null, 0, '0', false o ''
if ($number) {
  echo $number;
}

Para que no se vuelva a enviar un form y no nos salga esa ventanita de warning debemos hacer uso del POST/ redirect/ GET pattern. Pueden googlearlo :) <https://en.wikipedia.org/wiki/Post/Redirect/Get#:~:text=Post%2FRedirect%2FGet%20(PRG>,problem%20encountered%20in%20user%20ag Igual un video con Charles Severance explicandolo :D <https://www.youtube.com/watch?v=bIkqNHyj25w>
Y hay alguna manera de evitar que se reenvíe un formulario? Cuando se recarga una página se da la advertencia en el navegador, pero como lo harían desde PHP? ?
tuve un resultado diferente al profesor cuando puso el dump con el isset() despues de haber eliminado el name, en mi caso siempre imprimia true. entonces la forma en la que lo solucioné fue intercambiando isset por empty
mirando el comportamiento booleano. ```js "; var_dump($_POST); echo ""; var_dump(isset($_POST["nombre"])); if ( isset($_POST["nombre"]) && !empty($_POST["nombre"])) { echo "¡Hola " . $_POST['nombre'] . "!"; } else { echo "No mandaste nada 😾"; } if ( isset($_POST["form"]) ) { echo "Todo el formulario fue mandado"; } else { echo "No se mando ningun formulario"; } ```

Validar si un formulario se ha enviado

Puedes usar las funciones isset() y empty() en conjunto para validar si un formulario se ha enviado y si los campos están completos en PHP. isset() verifica si una variable está definida y empty() verifica si una variable está vacía. Aquí tienes un ejemplo de cómo hacerlo:

Empty

En PHP, la función empty() se utiliza para verificar si una variable está vacía. Una variable se considera vacía si se cumple una o más de las siguientes condiciones:

  1. La variable no está definida.
  2. La variable tiene un valor que se evalúa como falso, como null, false, 0, una cadena vacía "" o un arreglo vacío.

La sintaxis básica de la función empty() es la siguiente:

bool empty ( mixed $variable )

Donde $variable es la variable que deseas verificar.

Aquí tienes algunos ejemplos de cómo se utiliza empty():

$nombre = "Juan";
$edad = 0;
$correo = "";
$telefono = null;
$arreglo = array();

if (empty($nombre)) {
    echo "El nombre está vacío.";
} else {
    echo "El nombre no está vacío.";
}

if (empty($edad)) {
    echo "La edad está vacía.";
} else {
    echo "La edad no está vacía.";
}

if (empty($correo)) {
    echo "El correo está vacío.";
} else {
    echo "El correo no está vacío.";
}

if (empty($telefono)) {
    echo "El teléfono está vacío.";
} else {
    echo "El teléfono no está vacío.";
}

if (empty($arreglo)) {
    echo "El arreglo está vacío.";
} else {
    echo "El arreglo no está vacío.";
}

En estos ejemplos, la función empty() se utiliza para verificar si las variables tienen valores que se consideran como “vacíos”. Como resultado, obtendrás diferentes mensajes dependiendo de si las variables cumplen las condiciones de estar vacías o no.

Recuerda que empty() solo verifica si una variable está vacía según las condiciones mencionadas. Si deseas verificar si una variable existe o está definida, debes usar isset().

Isset

En PHP, la función isset() se utiliza para verificar si una variable está definida y tiene un valor asignado. La función devuelve true si la variable está definida y tiene un valor, y false si la variable no está definida o su valor es null.

La sintaxis básica de la función isset() es la siguiente:

bool isset ( mixed $variable [, mixed $... ] )

Donde $variable es la variable que deseas verificar y $... indica que puedes proporcionar más variables para verificar en la misma llamada a la función.

Aquí tienes algunos ejemplos de cómo se utiliza isset():

$nombre = "Juan";
$edad = null;
$correo = "";

if (isset($nombre)) {
    echo "La variable \\$nombre está definida.";
} else {
    echo "La variable \\$nombre no está definida.";
}

if (isset($edad)) {
    echo "La variable \\$edad está definida.";
} else {
    echo "La variable \\$edad no está definida.";
}

if (isset($correo)) {
    echo "La variable \\$correo está definida.";
} else {
    echo "La variable \\$correo no está definida.";
}

En estos ejemplos, la función isset() se utiliza para verificar si las variables están definidas. Las variables que tienen valores asignados, incluso si son null o cadenas vacías, se consideran definidas. Las variables que no han sido declaradas o definidas devolverán false en la función isset().

La función isset() es especialmente útil para evitar errores al intentar acceder a variables que podrían no existir. Antes de utilizar una variable, puedes usar isset() para verificar si está definida y, si es así, proceder a trabajar con su valor.

Recuerda que, dependiendo de tus necesidades, también puedes aplicar otras validaciones adicionales a los datos recibidos para garantizar que sean válidos y seguros antes de procesarlos.

Código desarrollado para la clase

Formulario en HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Validando el envío de un formulario</title>
</head>
<body>
    <!-- Formulario -->
    <form action="server.php" method="post" enctype="multipart/form-data">

        <!-- Input simple -->
        <label><h3>Datos usuario</h3></label>
        <label for="nombre">Nombre:</label>
        <input type="text" name="nombre" id="nombre" placeholder="Nombre"><br>
        <label for="apellido">Apellido:</label>
        <input type="text" name="apellido" id="apellido" placeholder="Apellido"><br>
        <label for="edad">Edad:</label>
        <input type="number" name="edad" id="edad" placeholder="Edad"><br>

        <!-- Reset -->
        <input type="reset" value="Limpiar">

        <!-- Envio -->
        <button name="enviar" type="submit">Enviar</button>
    </form>
</body>
</html>

Servidor PHP

<?php

// // Truco para debugear y ver lo que llega por POST
// echo "<pre>";
// var_dump($_POST); // Recupera la información que se envía por POST
// var_dump($_FILES); // Recupera la información que se envía por FILES
// echo "</pre>";

if(isset($_POST["nombre"], $_POST["apellido"], $_POST["edad"]) && !empty($_POST["nombre"]) && !empty($_POST["apellido"]) && !empty($_POST["edad"])) {
    echo "Hola: " . $_POST["nombre"] . " " . $_POST["apellido"] . ", tu edad es " . $_POST["edad"]. "<br>";
} else {
    echo "No se ha enviado la totalidad de los datos <br>";
}

if(isset($_POST["enviar"])) {
    echo "Se ha enviado el formulario";
} else {
    echo "No se ha enviado ningun formulario";
}
?>

validacion de recepcion de datos

$nombre = $_POST['nombre'];

if (isset($nombre)) {
    echo "Hola ${nombre}!";
}
if(empty($nombre)) {
    echo "No enviaste nada!!!";
}

HTML tiene muchas validaciones para formularios, podes mezclarlas con las de PHP
adjunto link
https://developer.mozilla.org/es/docs/Learn/Forms/Form_validation

La función ctype_alpha es útil para validar que un campo del formulario contenga solo letras y puede ser utilizada en conjunción con otras funciones de validación para asegurar que los datos del formulario sean válidos.

<?php

if (isset($_POST['nombre'])) {
    // Recibir datos del formulario
    $nombre = $_POST['nombre'];

    // Validar los datos
    if (empty($nombre)) {
        // Si el nombre está vacío, mostrar un error
        echo 'Por favor ingrese su nombre';
    } elseif (!ctype_alpha($nombre)) {
        // Si el nombre contiene números, mostrar un error
        echo 'Por favor ingrese solo letras en el nombre';
    } else {
        // Si el nombre no está vacío y no contiene números, mostrar un mensaje de éxito
        echo 'Gracias por enviar el formulario. Su nombre es ' . $nombre;
    }
}
?>

Para validar si se encuentra un espacio en blanco que también es dato.

$datos = $_POST["nombre"];
if (isset($datos)!= " " ) {
    echo "!Hola bienvenido $datos!";
}else
 {echo "No enviaste ningun nombre chao";
}   ```

Diferencias entre isset vs empty

Si quieren saber un poco más, este artículo tiene buena información: ver más

Solo mencionar que empty no genera algo advertencia a diferencia de isset si lo hace.