Diferencia entre revisiones de «PHP Paso de datos utilizando campos ocultos»

De MediaWiki
Ir a la navegación Ir a la búsqueda
 
Línea 1: Línea 1:
−
* A utilización de campos ocultos ten unha limitación xa que sempre será necesario enviar os datos dunha páxina á seguinte <u>utilizando un formulario</u>.
+
== Paso de datos mediante campos ocultos ==
 +
 
 +
* Outra forma de pasar información dunha páxina á seguinte consiste en empregar campos ocultos dun formulario mediante:
 +
 
 +
::<syntaxhighlight lang="html"> <input type="hidden"> </syntaxhighlight>
 +
 
 +
* Os campos ocultos non se amosan visualmente no formulario, pero o seu valor envíase xunto co resto dos campos cando se realiza o '''submit'''.
 +
 
 +
* Esta técnica ten unha limitación importante: os datos só se envían cando se envía o formulario. Polo tanto, é necesario que exista un formulario que conteña os campos ocultos.
 +
 
 +
* Por exemplo, podemos gardar temporalmente un nome nun campo oculto:
 +
 
 +
::<syntaxhighlight lang="php">
  
−
* A idea é moi sinxela. Supón gardar a información que queremos que sexa persistente (é dicir, que se pase dunha páxina á seguinte) en campos ocultos da forma:
 
−
::<syntaxhighlight lang="php" line enclose="div" highlight="" >
 
 
<?php
 
<?php
−
$datoAgardar='Angel';
+
$datoAGardar = 'Angel';
−
printf("<input type='hidden' value='%s' name='campoOcultoNome' />",$datoAgardar);
 
 
?>
 
?>
−
</syntaxhighlight>
 
  
 +
<form action="seguinte.php" method="post">
 +
    <input
 +
        type="hidden"
 +
        name="campoOcultoNome"
 +
        value="<?= htmlspecialchars(
 +
            $datoAGardar,
 +
            ENT_QUOTES | ENT_SUBSTITUTE,
 +
            'UTF-8'
 +
        ) ?>"
 +
    >
 +
 +
```
 +
<button type="submit">Continuar</button>
 +
```
 +
 +
</form>
 +
</syntaxhighlight>
 +
 +
* Na páxina '''seguinte.php''' poderiamos recuperar o valor mediante:
 +
 +
::<syntaxhighlight lang="php">
 +
$nomeRecibido = $_POST['campoOcultoNome'] ?? '';
 +
 +
if (!is_string($nomeRecibido)) {
 +
$nomeRecibido = '';
 +
}
 +
 +
$nome = trim($nomeRecibido); </syntaxhighlight>
 +
 +
* Este mecanismo pode empregarse, por exemplo, nun formulario dividido en varias páxinas, no que queremos enviar á seguinte páxina parte da información introducida anteriormente.
 +
 +
: Por exemplo:
 +
 +
::<syntaxhighlight lang="text">
 +
Páxina 1
 +
↓
 +
nome = Ana
 +
 +
Páxina 2
 +
↓ <input type="hidden" name="nome" value="Ana">
 +
↓
 +
idade = 20
 +
 +
Páxina 3
 +
↓
 +
recibe nome + idade </syntaxhighlight>
 +
 +
* '''IMPORTANTE:''' Un campo oculto '''non é un campo secreto'''.
 +
 +
: Aínda que non apareza visualmente no formulario, o usuario pode inspeccionar e modificar o seu valor empregando as ferramentas do navegador ou enviando manualmente unha petición HTTP.
 +
 +
: Polo tanto, os valores recibidos mediante campos ocultos deben tratarse igual que calquera outro dato recibido desde o cliente:
 +
 +
:* Deben ser '''validados no servidor'''.
 +
:* Non deben empregarse directamente para tomar decisións de seguridade.
 +
:* Non debemos confiar neles para gardar información como permisos, roles, prezos ou identificadores aos que o usuario non debería poder acceder.
 +
 +
* Por exemplo, non sería seguro confiar directamente nun campo como:
 +
 +
::<syntaxhighlight lang="html"> <input type="hidden" name="prezo" value="100"> </syntaxhighlight>
  
−
* Facelo desta forma leva consigo que sempre temos que ter un formulario e que calquera iteración do usuario que leve consigo cargar unha nova páxina, provocará o submit() do formulario ata esa nova páxina.
+
: porque o usuario podería modificar o valor antes de enviar o formulario:
  
 +
::<syntaxhighlight lang="html"> <input type="hidden" name="prezo" value="1"> </syntaxhighlight>
  
−
* Normalmente esta técnica se utiliza cando temos unha recollida de datos dun usuario que require de varias páxinas e queremos ir gardando os datos ata chegar á páxina que vai procesar os datos recollidos.
+
: O prezo real debería obterse novamente no servidor, por exemplo consultando a base de datos a partir do identificador do produto.
  
 +
* Os campos ocultos son útiles para transportar información entre formularios, pero cando necesitamos manter información de forma fiable entre varias páxinas dunha aplicación normalmente empregaremos '''sesións''', que veremos posteriormente.
  
  
Línea 20: Línea 90:
  
  
−
<br> -- [[Usuario:angelfg|Ángel D. Fernández González]] -- (2016).
+
<br> -- [[Usuario:angelfg|Ángel D. Fernández González]] -- (2026).

Revisión actual del 18:26 13 sep 2026

Paso de datos mediante campos ocultos

  • Outra forma de pasar información dunha páxina á seguinte consiste en empregar campos ocultos dun formulario mediante:
 <input type="hidden">
  • Os campos ocultos non se amosan visualmente no formulario, pero o seu valor envíase xunto co resto dos campos cando se realiza o submit.
  • Esta técnica ten unha limitación importante: os datos só se envían cando se envía o formulario. Polo tanto, é necesario que exista un formulario que conteña os campos ocultos.
  • Por exemplo, podemos gardar temporalmente un nome nun campo oculto:
<?php
$datoAGardar = 'Angel';
?>

<form action="seguinte.php" method="post">
    <input
        type="hidden"
        name="campoOcultoNome"
        value="<?= htmlspecialchars(
            $datoAGardar,
            ENT_QUOTES | ENT_SUBSTITUTE,
            'UTF-8'
        ) ?>"
    >

```
<button type="submit">Continuar</button>
```

</form>
  • Na páxina seguinte.php poderiamos recuperar o valor mediante:
$nomeRecibido = $_POST['campoOcultoNome'] ?? '';

if (!is_string($nomeRecibido)) {
$nomeRecibido = '';
}

$nome = trim($nomeRecibido);
  • Este mecanismo pode empregarse, por exemplo, nun formulario dividido en varias páxinas, no que queremos enviar á seguinte páxina parte da información introducida anteriormente.
Por exemplo:
Páxina 1
↓
nome = Ana

Páxina 2
↓ <input type="hidden" name="nome" value="Ana">
↓
idade = 20

Páxina 3
↓
recibe nome + idade
  • IMPORTANTE: Un campo oculto non é un campo secreto.
Aínda que non apareza visualmente no formulario, o usuario pode inspeccionar e modificar o seu valor empregando as ferramentas do navegador ou enviando manualmente unha petición HTTP.
Polo tanto, os valores recibidos mediante campos ocultos deben tratarse igual que calquera outro dato recibido desde o cliente:
  • Deben ser validados no servidor.
  • Non deben empregarse directamente para tomar decisións de seguridade.
  • Non debemos confiar neles para gardar información como permisos, roles, prezos ou identificadores aos que o usuario non debería poder acceder.
  • Por exemplo, non sería seguro confiar directamente nun campo como:
 <input type="hidden" name="prezo" value="100">
porque o usuario podería modificar o valor antes de enviar o formulario:
 <input type="hidden" name="prezo" value="1">
O prezo real debería obterse novamente no servidor, por exemplo consultando a base de datos a partir do identificador do produto.
  • Os campos ocultos son útiles para transportar información entre formularios, pero cando necesitamos manter información de forma fiable entre varias páxinas dunha aplicación normalmente empregaremos sesións, que veremos posteriormente.




-- Ángel D. Fernández González -- (2026).