将数组作为url参数发送

时间:2013-07-28 02:26:35

标签: php javascript arrays url

我正在使用这个项目,我需要传递一个数组作为URL参数,我实际上设法使用javascript。

function guardarTodo()
{
var datos = [];

var txtfechaCap = document.getElementById("txtfechaCap").value;
datos.push(txtfechaCap);
var cbxLocalidad = document.getElementById("cbxLocalidad").value;
datos.push(cbxLocalidad);
var txtapellidoP = document.getElementById("txtapellidoP").value;
datos.push(txtapellidoP);
var txtapellidoM = document.getElementById("txtapellidoM").value;
datos.push(txtapellidoM);
var txtNombres = document.getElementById("txtNombres").value;
datos.push(txtNombres);
var txtCurp = document.getElementById("txtCurp").value;
datos.push(txtCurp);

var chkSexo;
if(document.getElementById("chkHombre").checked)
    chkSexo = 'H';
else
    chkSexo = 'M';
datos.push(chkSexo);
var txtfecha = document.getElementById("txtfecha").value;
datos.push(txtfecha);
var txtEdad = document.getElementById("txtEdad").value;
datos.push(txtEdad);
var txtPeso = document.getElementById("txtPeso").value;
datos.push(txtPeso);
var txtTalla = document.getElementById("txtTalla").value;
datos.push(txtTalla);
var txtCC = document.getElementById("txtCC").value;
datos.push(txtCC);
for (var i=0;i<document.getElementById('table_depProg').rows.length;i++) 
{
    var prog = [];
    for (var j=0;j<1;j++) 
    {

        var programa = document.getElementById('table_depProg').rows[i].cells[j].innerHTML;
        alert(programa);
        prog.push(programa);
    }
    window.location.href = "funciones/guardar.php?prog="+prog+"&datos[]="+datos;
}
}

现在的问题是,当我尝试使用GET方法获取数组时,我无法逐个获取索引。

<?php
include("funciones.php");
//Persona
print_r($_GET['datos']);
@$fechacaptura = $_GET['datos']['txtfechaCap'];
@$idlocalidad = $_GET['datos']['cbxLocalidad'];
@$apaterno = $_GET['datos']['txtapellidoP'];
@$amaterno = $_GET['datos']['txtapellidoM'];
@$nombre = $_GET['datos']['txtNombres'];
@$curp = $_GET['datos']['txtCurp'];
@$sexo = $_GET['datos']['chkSexo'];
@$fechanacimiento = $_GET['datos']['txtfecha'];
@$edad = $_GET['datos']['txtEdad'];
@$peso = $_GET['datos']['txtPeso'];
@$talla = $_GET['datos']['txtTalla'];
@$cc = $_GET['datos']['txtCC'];

$sql = "CALL personasAdd($idlocalidad,'$fechacaptura','$apaterno','$amaterno','$nombre','$curp','$sexo',    '$fechanacimiento',$edad,$peso,$talla,$cc);";
@$idpersona = personasAdd($sql);
?>

如您所见,我打印数组以检查它是如何工作的,但这是输出:

Array ( [0] => 2013-07-03,8,LastName1,LastName2,Name(s),123456789012345678,H,2013-07-01,24,34,45,56 ).

它包含数据,但是当我打印$ sql变量时,我得到了这个:

CALL personasAdd(,'','','','','','','',,,,);

我一整天都在这里工作,找不到我做错了什么,我真的会找到任何帮助或线索来找出我的错误。

1 个答案:

答案 0 :(得分:0)

要按名称访问每个值,您必须在URL参数中包含该名称。否则,当您刚刚通过<input>时,PHP现在知道name="txtfechaCap"已经value

var txtfechaCap = document.getElementById("txtfechaCap").value;
datos.push('datos[txtfechaCap]=' + txtfechaCap);

var cbxLocalidad = document.getElementById("cbxLocalidad").value;
datos.push('datos[cbxLocalidad]=' + cbxLocalidad);

// etc.

encodeURIComponent()也是一个好主意,因为input.value肯定会包含网址的特殊字符:

var txtfechaCap = document.getElementById("txtfechaCap").value;
datos.push('datos[txtfechaCap]=' + encodeURIComponent(txtfechaCap));

// etc.

但是,现在datos中包含了名称,只需将Array加入'&'并附加:

window.location.href = "funciones/guardar.php?prog="+prog+"&"+datos.join('&');

您可能也想要与prog

类似
// ...
    prog.push('prog[]=' + encodeURIComponent(programa));
}

window.location.href = "funciones/guardar.php?"+prog.join("&")+"&"+datos.join('&');