0

これは、からの配列ですprint_r($_POST)

Array
(
    [january] => Array
        (
            [0] => 10
            [1] => 20
            [2] => 5
        )

    [february] => Array
        (
            [0] => 9
            [1] => 8
            [2] => 10
        )

    [march] => Array
        (
            [0] => 2
            [1] => 5
            [2] => 6
        )

)

のループ$_POST

$data = array();
foreach ($_POST as $key => $value) {
   $data[] = $value;
}

声明

INSERT INTO table (january,february,march) VALUES (".implode(", ", $data).")

この現在の配列を使用して、正しいステートメントを作成するにはどうすればよいですか? このようなデータを保存したい

id january february march
--------------------------
1  10      9        2
2  20      8        5
3  5       10       6
4

2 に答える 2

3

次のようにします。

$month = array("january" => array(10, 20, 5), "february" => array(1,2,3), "march" => array(3,4,5));

$datasets = array();

foreach ($month as $monthname => $monthdata)
{
    foreach ($monthdata as $i => $data)
    {
        $datasets[$i][] = intval($data);
    }
}

$values = array();

foreach ($datasets as $dataset)
{
    $values[] = "(" . implode(", ", $dataset) . ")";
}


echo "INSERT INTO table (january,february,march) VALUES " . implode(", ", $values);

intvalデータベースにフィルタリングされていないユーザーデータを挿入してはならないため、「基本的なセキュリティ」を適用するコードをコードに入れました。準備されたステートメントと mysql のエスケープについて自分自身に知らせてください;)。

于 2012-11-14T00:18:52.867 に答える
-1

これは私がすることです:

$rows=sizeof($_POST['january']);#find how many rows we want to add
for($i=0;$i<$rows;$i++){
  $columns=array();
  $values=array();
  foreach ($_POST as $key => $value) {
    $columns[]=$key;
    $values[]=$value;
  }
  $sql="INSERT INTO table (".implode(",",$columns).") VALUES (".implode(",",$values).")"
  mysql_query($sql)
}
于 2012-11-14T00:21:30.770 に答える