0

こんにちは、動的配列を jQuery から PHP に mysql に投稿しようとしています。jQuery からデータを取得し、データをシリアル化することができます。 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です。最初の例では、ネストされた 3 つのforeachループには何も含まれていないため、PHP はこれら 3 つの配列のそれぞれの最後の要素にループするだけです。次に、SQL ステートメントを実行するときは、これら 3 つの配列のそれぞれの最後の要素を使用して、一度だけ実行します。

2 番目の例では、 の各要素を取得し$name、それを の各要素$problemと照合し、それらの各組み合わせを の各要素と照合し$timedateます。したがって、各配列に 3 つの要素があると仮定すると、これら 3 つの配列から要素の 3x3x3 = 27 の異なる組み合わせを作成したことになります (そして、これらの組み合わせのそれぞれをデータベースに SQL します)。

同じサイズの 3 つの配列があり、 with 、$name[0]withなどと組み合わせたいと仮定しています。配列に自動インクリメント キーがあると仮定すると(前の文のように)、以下を使用できます。$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;
}

これにより、必要な適切なペアリングが得られます。

EDIT EDIT: 最後の EDIT が機能しません。前のコードを使用します。

于 2012-07-12T15:00:15.533 に答える