No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Curso de PHP: Integraci贸n con HTML

Curso de PHP: Integraci贸n con HTML

Carlos Eduardo G贸mez Garc铆a

Carlos Eduardo G贸mez Garc铆a

Valida si un formulario ha sido enviado

17/24
Recursos

Aportes 19

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,

鈥淚sset鈥 comprueba si se ha seteado un dato o valor, peor no valida si esta vac铆o o no.

鈥淓mpty鈥 (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 鈥溌ola {$_POST[鈥榥ombre鈥橾}鈥;

Siempre es importante validar del lado del servidor, anotado.

馃槑 A m铆 me dijeron una vez 鈥渉az 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.

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

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

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
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? ?
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 鈥渧ac铆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.