| Por: Fco Díaz [pAk0s] | | 17/8/2006
|
pues contrario a lo que comenta Jorge, si se pueden mandar arreglos via pos o get, ;), ojo mas no arreglos de java, si en tu cliente manejas un arreglo con java ese lo tienes que tratar antes de ser enviado por que si no te llegara una cadena depediendo del explorador sera la cadena por ejemplo si es en ie te llegara los datos como dato1,dato2,dato3 creo en firefox te llega como object o algo así, para enviar un arreglo a un script ya sea por post o get tu variable o nombre de campo deve de llevar unos "[]" al final para que tras coficar el la peticion el php te genera tus variables como arreglos mientras no tenga este nombre nunca te llegara un array siempre te llegaran cadenas, una de las formas que comentaba jorge es que se acostubra tratar los datos antes de enviarlos y ponerles al final un numero o bien concatenarlos en una sola cadena mandarlo a un campo hidden y enviarlo y luego con un explode recostruir el arreglo, esas son las primeras salidas hasta que un dia de pura casualidad me di cuenta de que si agrego el "[]" al final de mi nombre de campo se envia recibe como un arrelgo lo unico malo de este metodo es que es un poco mas dificil validad los formularios ya que no puedes hacer referencia en javascript x document.formulario.nombreCampo, por que tenes varios campos con los mismos nombres por lo cual la sentecia se buelve ambigua y el el explorador no sabra que hacer para ello se necesita hacer referia mediante los elemntos de forms.elemts[] o ponerles id distinos y recuperar los datos mediante document.getElementById('id') les dejo un ejemplo de como mandar arreglos por post o get
para saber si se trata de un arreglo usamo is_array($arreglo) esta nos retorna 1 si es arreglo si no no retorna nada
<?//Fco Díaz wariodiaz@gmail.com GNU
if(count($_GET)||count($_POST))//si recibo variables por get o post
{
if(count($_GET)){
echo "<h1><center>Variables X GET</center></h1>";
$_R=$_GET;
}
else{
echo "<h1><center>Variables X POST</center></h1>";
$_R=$_POST;
}
echo "datos es arreglo=".is_array($_R[datos])."<br>";
echo "texto es arreglo=".is_array($_R[texto])."<br>";
echo "Datos Recividos:<br>".nl2br(str_replace(" "," ",print_r($_R,1)));
for($i=0;$i<count($_R);$i++)
echo "\$datos[$i] = ".$_R[datos][$i]."<br>";
echo "<a href=\"?\">Atras</a>";
}
else
{
echo "<html>
<head>
<title>Variables X Get O Post</title>
</head>
<body>
<h1><center>Form X Post</center></h1>
<form name=f1 action=\"\" method=post>
<table border=1>
<tr><td>Dato 1</td><td><input type=text name=datos[]></td></tr>
<tr><td>Dato 2</td><td><input type=text name=datos[]></td></tr>
<tr><td>Dato 3</td><td><input type=text name=datos[]></td></tr>
<tr><td>Dato texto</td><td><input type=text name=texto></td></tr>
<tr><td colspan=2><input type=submit value=Ok></td></tr>
</table>
</form>
<br>
<h1><center>Form X Get</center></h1>
<form name=f2 action=\"\" method=get>
<table border=1>
<tr><td>Dato 1</td><td><input type=text name=datos[]></td></tr>
<tr><td>Dato 2</td><td><input type=text name=datos[]></td></tr>
<tr><td>Dato 3</td><td><input type=text name=datos[]></td></tr>
<tr><td>Dato textp</td><td><input type=text name=texto></td></tr>
<tr><td colspan=2><input type=submit value=Ok></td></tr>
</table>
</form>
</body>
</html>";
}
?>
Nombrando los campos múltiples del formulario (select multiple, checkbox) añadiendo unos corchetes al nombre(...name="dato[]"...), recibirás un array tanto si lo envías por POST como por GET. Así te evitas comprobar si se trata de un array, basta con que compruebes que el dato ha sido enviado.
Primero que nada disculpen por duplicar mis respuestas, pues no había leído el comentario de Juan Carlos y recién después de responder lo ley y creí conveniente contestar a su duda.
Para responder a la duda de Juan Carlos y a cualquiera que necesite resolver este tipo de problema, quisiera exponer mi experiencia, en mi caso lo utilice para pasar valores de un check por POST a un PHP para validar que por lo menos un check este seleccionado use funciones javascript les dejo el código para que puedan probarlo.
Copy paste en su servidor y listo para probar, y posteriormente adaptenlo a sus necesidades.
Atte.
elo950
<?php //Original de Fco Díaz wariodiaz@gmail.com GNU adaptado para la validacion de CHECKS por elo950
if(count($_GET)||count($_POST))//si recibo variables por get o post
{
if(count($_GET)){
echo "<h1><center>Variables X GET</center></h1>";
$_R=$_GET;
}
else{
echo "<h1><center>Variables X POST</center></h1>";
$_R=$_POST;
}
echo "CHECK es arreglo=".is_array($_R[check])."<br>";
echo "Datos Recividos:<br>".nl2br(str_replace(" "," ",print_r($_R,1)));
for($i=0;$i<count($_R);$i++)
echo "\$datos[$i] = ".$_R[check][$i]."<br>";
}
else
{
?>
<html>
<head>
<title>Enviando Arrays por POST y Validando con PHP</title>
<script>
/* recibe el pedido de envio */
function enviar(tarea) {
enviarform(tarea);
}
/* envia el formulario */
function enviarform(tarea){
document.form.tarea.value=tarea;
try {
document.form.onsubmit();
}
catch(e){}
document.form.submit();
}
/* verifica que un check este seleccionado y cambia el valor del campo seleccionados */
function chekado(checkseleccionado){
if (checkseleccionado == true){
document.form.seleccionados.value++;
}
else {
document.form.seleccionados.value--;
}
}
</script>
</head>
<body>
<a href="javascript:if (document.form.seleccionados.value == 0){
alert('Seleccione un Check'); } else { enviar('tarea1'); }">
<img src='imagen1.png' /><br />Tarea1</a><br />
<a href="javascript:if (document.form.seleccionados.value == 0){
alert('Seleccione un Check'); } else { enviar('tarea2'); }">
<img src='imagen1.png' /><br />Tarea2</a><br />
<form name="form" action="" method="post">
<input name='check[]' type='checkbox' value='valor1' onclick='chekado(this.checked);' />
<input name='check[]' type='checkbox' value='valor2' onclick='chekado(this.checked);' />
<input name='check[]' type='checkbox' value='valor3' onclick='chekado(this.checked);' />
<input type="hidden" name="tarea" value="" />
<!--
SI TIENES VARIAS TAREAS ( eliminar, editar, etc) ESTE CAMPO SIRVE PARA Guardar la tarea que selecicones este campo lo completa la funcion javascript enviarform(tarea) y posteriormente envia el formulario la misma funcion
-->
<input type="hidden" name="seleccionados" value="" />
<!--
CAMBIA DE VALOR AL SELECCIONAR UN CHECK SI NO SE SELECCIONO NINGUNO AL TRARTAR DE ENVIAR
LA FUNCION chekado(checkseleccionado) DARA UNA ADVERTENCIA PIDIENDO QUE SE SELECCIONE UN CHECK
-->
</form>
</body>
</html>
<?php } ?>