同时插入多行

时间:2011-09-22 16:29:11

标签: php mysql insert

PHP脚本根据mysql DB中的数据生成以下表格面板。表格的每个单元格都包含一个复选框,用于设置对某些“区域”的访问权限。我的复选框的名称遵循一定的规则:u [user_id] a [area_name]我想要获取所有设置的$ _POST并将它们的值保存在数据库中。

区域数量是固定的,但用户数量以天为单位。我必须保存表状态的表是:user_id,current_date,area1,area2,area3,area4,area5,.. area25。

问题是我不知道如何将此表保存到数据库中。此时我为每个用户插入一个插件,我认为它需要更好的解决方案,因为这需要花费太多时间。

<form name="foo" method="post" action="saveme.php" />    
<table><tr>
    <td>name</td><td>area1</td><td>area2</td><td>area3</td><td>area4</td>
</tr>
<tr>
    <td>John Smith</td>
    <td><input type="checkbox" value="12" name="u1a1" checked /></td>
    <td><input type="checkbox" value="13" name="u1a2" /></td>
    <td><input type="checkbox" value="16" name="u1a3" /></td>
    <td><input type="checkbox" value="21" name="u1a4" checked /></td>
</tr>
</table><input type="submit" value="Save" /> </form>

2 个答案:

答案 0 :(得分:2)

我认为这应该可以解决问题。但是,当我看到像'area1,area2,... area25'这样的字段时 - 我倾向于认为可能有更好的解决方案。也许该表应该包含字段'user_id,current_date,area_id,area'而不是?

$users = array();
foreach ($_POST as $key => $value) {
    $matches = null;
    if (preg_match('/^u(\d+)a(\d+)$/', $key, $matches)) {
        $user_id = $matches[1];
        $area_id = $matches[2];
        if (!isset($users[$user_id))) {
            $users[$user_id] = array_fill(1, 25, 0);
        }
        $users[$user_id][$area_id] = mysql_real_escape_string($value);
    }
}
$values = array();

foreach ($users as $user_id => $areas) {
    $values[] = '(' . $user_id .', now(), '. implode(', ', $areas) .')';
}

if ($values) {
    $sql = 'INSERT INTO user_areas (user_id, current_date, area1, area2, area3, area4, area5, area6, area7, area8, area9, area10, area11, area12, area13, area14, area15, area16, area17, area18, area19, area20, area21, area22, area23, area24, area25) VALUES ' . implode(', ', $values);

    // execute $sql query
}

答案 1 :(得分:1)

可能你需要mysqli multiquery。动态构建查询。这里有一个直接来自PHP手册的例子。 http://php.net/manual/en/mysqli.multi-query.php

<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$query  = "SELECT CURRENT_USER();";
$query .= "SELECT Name FROM City ORDER BY ID LIMIT 20, 5";

/* execute multi query */
if ($mysqli->multi_query($query)) {
    do {
        /* store first result set */
        if ($result = $mysqli->store_result()) {
            while ($row = $result->fetch_row()) {
                printf("%s\n", $row[0]);
            }
            $result->free();
        }
        /* print divider */
        if ($mysqli->more_results()) {
            printf("-----------------\n");
        }
    } while ($mysqli->next_result());
}

/* close connection */
$mysqli->close();
?>