¿Cuál es la forma más segura de enviar un array a través de POST
?
foreach ($id as $array)
{
<input type="hidden" name="prova[]" value="<?php echo $array; ?>"/>
}
<input type="submit" name="submit"/>
o usar implode()
para crear una única variable, pasar la variable y luego usar explode()
para recuperar los valores en un nuevo array?
Editar Si pregunta por la seguridad, vea mi adenda al final Editar
PHP tiene una función serialize para este propósito específico. Pásele un array, y le dará una representación de cadena del mismo. Cuando quieras convertirlo de nuevo a un array, sólo tienes que usar la función unserialize.
$data = array('one'=>1, 'two'=>2, 'three'=>33);
$dataString = serialize($data);
//send elsewhere
$data = unserialize($dataString);
Esto se utiliza a menudo por los codificadores perezosos para guardar los datos en una base de datos. No se recomienda, pero funciona como una solución rápida y sucia.
Addendum
Tenía la impresión de que estabas buscando una manera de enviar los datos de forma fiable, no "segura". No importa cómo pases los datos, si van a través del sistema del usuario, no puedes confiar en ellos en absoluto. Generalmente, deberías almacenarlo en algún lugar del servidor "y"; usar una credencial (cookie, sesión, contraseña, etc.) para buscarlo.
Podrías ponerlo en la sesión:
session_start();
$_SESSION['array_name'] = $array_name;
O si quieres enviarlo a través de un formulario puedes serializarlo:
<input type='hidden' name='input_name' value="<?php echo htmlentities(serialize($array_name)); ?>" />
$passed_array = unserialize($_POST['input_name']);
Ten en cuenta que para trabajar con arrays serializados, necesitas usar POST como método de transmisión del formulario, ya que GET tiene un límite de tamaño en torno a los 1024 caracteres.
Yo'utilizaría sesiones siempre que fuera posible.
¿Por qué lo envías por correo si ya lo tienes en el servidor (PHP)?
¿Por qué no simplemente guardar la matriz a s $_SESSION
variable para que pueda utilizarlo cuando el formulario se envía, que podría hacer que sea más "seguro" ya que entonces el cliente no puede cambiar las variables mediante la edición de la fuente.
Todo depende de lo que realmente quieras hacer.