将动态多维数组从jQuery传递到php并插入数据库


passing dynamic multidimensional array from jQuery to php and insert into database

嗨,我正在尝试发布从jQuery到PHP再到mysql的动态数组我从jQuery获得数据,并能够序列化数据php获取变量,它显示为和数组但是,当我尝试为插入传递变量时,根据我将其放在foreach()中的位置,我要么只得到插入数据库的最后一个数组,要么所有内容的多个插入(即:名称1、问题1、日期1名称1、事件1、日期2等等)。$name,$problem,$timedate作为数组从jQuery发布。

在这个例子中,我只得到阵列的最后一个

 <?php
$name = $_POST['name'];
$problem = $_POST['problem'];
$timedate = $_POST['timedate'];
$con = mysql_connect("localhost","wayko","b4v0e1jj");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("joinus", $con);
$seriname =  mysql_real_escape_string(serialize($name));
$seriprob =  mysql_real_escape_string(serialize($problem));
$seritd =  mysql_real_escape_string(serialize($timedate));
foreach($name as  $valname){
foreach($problem as  $valprob){
foreach($timedate as $valtd){
}
}
}
$sql="INSERT INTO roomchart (Name,TimeDate,Problem)
VALUES
('$valname','$valtd','$valprob')";
echo $sql;
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error(). "Actual query: " . $sql);
}
mysql_close($con);
?>

在这个例子中,我得到了相同数据的多个插入,所以3个插入变成了9个

foreach($name as  $valname){
foreach($problem as  $valprob){
foreach($timedate as $valtd){
$sql="INSERT INTO roomchart (Name,TimeDate,Problem)
VALUES
('$valname','$valtd','$valprob')";
echo $sql;
}
}
}

有什么想法吗?

foreach就是这样工作的。在第一个示例中,三个嵌套的foreach循环中没有任何内容,因此PHP只循环到这三个数组中每一个的最后一个元素。然后,当您执行SQL语句时,您只执行一次—使用这三个数组中每一个的最后一个元素。

对于第二个示例,您将取$name的每个元素,将其与$problem的每个元素进行匹配,并将这些组合中的每个与$timedate中的每个元素相匹配。因此,假设每个数组中有3个元素,那么您就从这三个数组中创建了3x3x3=27个不同的元素组合(然后将这些组合中的每一个SQL到数据库中)。

我假设您有3个大小相等的数组,并且您希望将$name[0]$problem[0]$timedate[0]配对,将$name[1]$problem[1]$timedate[1]配对,等等。假设您的数组只有自动递增键(如前一句中所述),您可以使用:

foreach ($name as $key => $valname) {
    $sql = "INSERT INTO roomchart (Name, TimeDate, Problem)
    VALUES ('$valname', '$timedate[$key]', '$problem[$key]')";
    echo $sql;
}

这将为您提供所需的正确配对。

编辑编辑:最后一次编辑不起作用。使用以前的代码。