2011-02-23 15 views
17
$idArray = array(1,2,3,4); 

¿Puedo escribir esta línea en HTML?cómo pasar una matriz en GET en PHP?

<form method='POST' action='{$_SERVER['PHP_SELF']}?arr={$idArray}'> 

o debería escribir:

<form method='POST' action='{$_SERVER['PHP_SELF']}?arr[]={$idArray}'> 

¿cómo se pasa?

¿cómo debo manejarlo en la página llamada?

gracias !!

Respuesta

6

Utilice serialize y unserialize función de PHP. Esta función le proporciona la versión almacenable (cadena) del tipo de matriz. Para más infomación sobre el uso de leer http://php.net/manual/en/function.serialize.php y http://www.php.net/manual/en/function.unserialize.php

+0

es esa función parte del núcleo? No lo veo en ningún lado, ¿estás refiriendo a empacar()? – Oliver

+0

¿existe esa función? – Stofke

+0

'serialize' y' unserialize'? Sí, la última vez que lo comprobé, de hecho existen. –

40

Si desea pasar un array como parámetro, habría que añadir un parámetro para cada elemento. Su cadena de consulta se convertiría en:

?arr[]=1&arr[]=2&arr[]=3&arr[]=4 

Como otros han escrito, también puede serializar y unserialize la matriz.

¿Pero realmente tiene que volver a enviar los datos al cliente? Parece que solo necesita una forma de persistir los datos entre las solicitudes.

En este caso, es mejor usar sessions(docs). Esto también es más seguro ya que de lo contrario el cliente podría modificar los datos.

+1

¿Puedes especificar claves usando este método? – Qwerty

0

En el caso particular que usted mencionó, implosionaría la matriz a una cadena y luego la explotaría al publicar el formulario.

$str = rawurlencode(implode(",",$idArray)); 

<form method='POST' action='{$_SERVER['PHP_SELF']}?arr={$str}'> 

y luego en el procesamiento posterior:

$idArray = explode(",",rawurldecode($_POST['arr'])); 
+0

Eso supone que la matriz es unidimensional, y solo contiene tipos simples (es decir, no es una matriz de objetos). –

+0

que es en este caso, de ahí el "En el caso particular que mencionas" – Oliver

3

Otra opción (incluso de aspecto agradable, diría):

<form method='POST'> 
    <input type="hidden" name="idArray[]" value="1" /> 
    <input type="hidden" name="idArray[]" value="2" /> 
    <input type="hidden" name="idArray[]" value="3" /> 
    <input type="hidden" name="idArray[]" value="4" /> 
</form> 

Pero, por supuesto, se envía como POST. No recomendaría enviarlo con serialización ya que la salida de esa función puede ser bastante grande y la longitud o URL es limitada.

+0

¿Puedes especificar claves usando este método? – Qwerty

+0

@Qwerty puedes usar algo como 'name =" idArray [42] "' – Czechnology

+0

Pensé que sí, bu No estaba seguro Entonces ES un enfoque legítimo entonces. Es porque algunos analizadores de JavaScript GET tratan eso como claves diferentes ... – Qwerty

3

Puede usar serializar y & serializar junto con urlencode p.

en el envío puede enviarlos como estos:

<?php 
$array1 = Array(["key1"]=>"value1",["key2"]=>"value2"); 
$array2 = Array(["key1"]=>"value1",["key2"]=>"value2"); 
$data1="textdata"; 

$urlPortion= '&array1='.urlencode(serialize($array1)). 
      '&array2='.urlencode(serialize($array2)). 
      '&data1='.urlencode(serialize($data1)); 
//Full URL: 
$fullUrl='http://localhost/?somevariable=somevalue'.$urlPortion 
?> 

sobre la recepción se puede acceder a ellos como:

<?php 
$destArray1=unserialize($_GET['array1']); 
$destArray2=unserialize($_GET['array2']); 
$destData1=unserialize($_GET['data1']); 
?> 

y listo, puede adjuntar esa URL a petición ajax o una página del navegador normal .

3

Simplemente use explode() y pase su valor. Puede recuperar la matriz utilizando implode().

Nota: Elija el delimitador de acuerdo con el tipo de contenido que no existe en su matriz. Por ej. Si está seguro de que no habrá comas (,) en su matriz, elija la coma como delimitador.

0

Una sesión es una manera mucho más segura y limpia de hacer esto. Iniciar su sesión con:

session_start(); 

A continuación, agregue la matriz serializada como una variable de sesión como esto:

$_SESSION["venue"] = serialize($venue); 

La basta con entrar en la variable de sesión cuando lo necesite.

1

Uso parse_str función

$str = "first=value&arr[]=foo+bar&arr[]=baz"; 
parse_str($str); 
echo $first; 

Ésta es viejo tema, pero no hay respuesta real.

Cuestiones relacionadas