0

您好我正在尝试将动态数组从 jQuery 发布到 PHP 到 mysql 我从 jQuery 获取数据并能够序列化数据 php 获取变量并且它作为数组出现但是当我尝试为我的插入和依赖传递变量时我把它放在 foreach() 我要么只得到插入数据库的最后一个数组,要么得到所有东西的多个插入(即:name1、prob1、date1 name1、prob1、date2 等)。$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;
}
}
}

有任何想法吗?

4

1 回答 1

0

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

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

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

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

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

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

于 2012-07-12T15:00:15.533 回答