您好我正在尝试将动态数组从jQuery发布到PHP到mysql 我从jQuery获取数据并能够序列化数据 php接受变量,它出现在和数组中 但是当我尝试为我的插入传递变量并依赖于我将它放在foreach()中的位置时,我只获得插入数据库的最后一个数组或者 所有内容的多个插入(即:name1,prob1,date1 name1,prob1,date2等等)。 $ name,$ problem,$ timedate post from 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;
}
}
}
任何想法?
答案 0 :(得分:0)
这就是foreach
的工作方式。在您的第一个示例中,您的三个嵌套foreach
循环中没有任何内容,因此PHP只循环到这三个数组中每个数组的最后一个元素。然后,当你执行SQL语句时,你只需要执行一次 - 使用这三个数组中每个数组的最后一个元素。
对于您的第二个示例,您将获取$name
的每个元素,将其与$problem
的每个元素相匹配,并将这些组合中的每一个与$timedate
中的每个元素相匹配。因此,假设每个数组中有3个元素,那么您已经从这三个数组中生成了3x3x3 = 27个不同的元素组合(然后将这些组合中的每一个组合到数据库中)。
我假设您有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;
}
这将为您提供所需的正确配对。
编辑编辑:最后一次编辑不起作用。使用前面的代码。