Temas obsoletos - Funciones de recogida de datos

¡Atención!Esta lección incluye las funciones de recogida de datos que he dejado de utilizar a partir del curso 2019/20 porque las he sustituido por una única función que sirve tanto para datos sueltos como para matrices de cualquier dimensión. La nueva función se comenta en la lección Recogida de datos.

Recoger un dato

La siguiente función se puede utilizar únicamente para recoger datos sueltos (es decir, datos que no estén en forma de matriz).

<?php
// FUNCIÓN DE RECOGIDA DE UN DATO
function recoge($var)
{
    $tmp = (isset($_REQUEST[$var]))
        ? trim(htmlspecialchars($_REQUEST[$var], ENT_QUOTES, "UTF-8"))
        : "";
    return $tmp;
}

// EJEMPLO DE USO DE LA FUNCIÓN ANTERIOR
$nombre = recoge("nombre");

if ($nombre == "") {
    print "<p>No ha escrito ningún nombre</p>";
} else {
    print "<p>Su nombre es $nombre</p>\n";
}
?>

Recoger una matriz de una dimensión

La siguiente función se puede utilizar únicamente para recoger datos en forma de matriz de una dimensión.

Si un formulario envía los datos en forma de matriz, como en el ejemplo siguiente, la función recoge() del punto anterior no serviría.

<form action="ejemplo.php">
  <p>Nombre: <input type="text" name="nombre[1]"></p>
  <p>Apellido: <input type="text" name="nombre[2]"></p>
  <p><input type="submit" value="Enviar"></p>
</form>

Nombre:

Apellido:

Hay que hacer otra función que recoja y trate los datos en forma de matriz.

<?php
// FUNCIÓN DE RECOGIDA DE UNA MATRIZ DE UNA DIMENSIÓN
function recogeMatriz($var)
{
    $tmpMatriz = [];
    if (isset($_REQUEST[$var]) && is_array($_REQUEST[$var])) {
        foreach ($_REQUEST[$var] as $indice => $valor) {
            $indiceLimpio = trim(htmlspecialchars($indice, ENT_QUOTES, "UTF-8"));
            $valorLimpio  = trim(htmlspecialchars($valor,  ENT_QUOTES, "UTF-8"));
            $tmpMatriz[$indiceLimpio] = $valorLimpio;
        }
    }
    return $tmpMatriz;
}

// EJEMPLO DE USO DE LA FUNCIÓN ANTERIOR
$nombre = recogeMatriz("nombre");

if ($nombre[1] == "") {
    print "<p style=\"color: red\">No ha escrito su nombre.</p>\n";
} else {
    print "<p>Su nombre es <strong>$nombre[1]</strong>.</p>\n";
}

if ($nombre[2] == "") {
    print "<p style=\"color: red\">No ha escrito su apellido.</p>\n";
} else {
    print "<p>Su apellido es <strong>$nombre[2]</strong>.</p>\n";
}
?>

Recoger y recortar los datos

La siguiente función recoge(), que sólo permite recoger datos sueltos (no matrices), recorta los datos recibidos a una longitud determinada:

<?php
// FUNCIONES DE RECOGIDA Y RECORTE DE UN DATO
$tamNombre = 30;

$recorta = [
  "nombre" => $tamNombre
];

function recorta($campo, $cadena)
{
  global $recorta;

  $tmp = isset($recorta[$campo])
      ? substr($cadena, 0, $recorta[$campo])
      : $cadena;
  return $tmp;
}

function recoge($var)
{
  $tmp = (isset($_REQUEST[$var]))
      ? trim(htmlspecialchars($_REQUEST[$var], ENT_QUOTES, "UTF-8"))
      : "";
  $tmp = recorta($var, $tmp);
  return $tmp;
}

// EJEMPLO DE USO DE LAS FUNCIONES ANTERIORES
$nombre = recoge("nombre");
if ($nombre == "") {
  print "<p>No ha escrito ningún nombre</p>\n";
} else {
  print "<p>Su nombre es $nombre</p>\n";
}
?>