PHP 提取变量中的每条记录进行插入


PHP extract each record in variable for insert

这是我的PHP变量:

 $container = $_POST['containerNumber'];

在 $_POST['containerNumber'] 中,当用户从表单中选中复选框时,会检索多个容器编号。不需要显示该代码。 只要知道 $_POST['containerNumber'] 可以分配多个集装箱编号即可。

我需要做的是从 POST 中提取每个容器号,以便我可以为每个容器号运行 mysql INSERT 语句。

在数据库表中,有多个列,container_num列是我尝试更新的列(目前)。

如何将$container转换为数组并检索已分配给变量的每个容器编号?

我知道我需要利用FOREACH回路。 话虽如此,很可能会有多个 INSERT 语句将自动通过循环创建。

 $SQL = "INSERT INTO myTable (container_num) VALUES ('$container')";
 // times however many containers the variable $container had stored in it

请帮忙。

编辑**

一旦用户选中了任意数量的复选框,我就可以像这样显示每个容器:

 <INPUT name="containerNumber" id="containerNumber" class="containerNumber" />

当我这样做时,它可以像这样显示在屏幕上:

 CONT_ID001, CONT_ID002, CONT_ID003...

我希望这有所帮助。

有多种方法可以做到这一点。

1) 为您发送的 POST 参数指定一个以 [] 结尾的名称,PHP 在解析 POST 数据时会自动将它们分配给数组。如果您从 HTML 表单发送数据,下面是如何执行此操作的示例:

<form action="" method="POST">
    <label>
        First container number:
        <input type="text" name="containerNumber[]" />
    </label>
    <label>
        Second container number:
        <input type="text" name="containerNumber[]" />
    </label>
    <input type="submit" />

在PHP中,你可以只做

foreach($_POST["containerNumber"] as $container) {
    ...
}

(请注意,这是 PHP 的一个功能,不能移植到其他服务器端语言。这不是 HTTP 规范的一部分。

2)使用一些分隔符分隔值,在PHP中使用explode()来拆分它。

3)将表单作为JSON发送或将该字段编码为JSON(如果从HTML发送,我建议使用jQUery来执行任一选项,因为这是最简单的方法)并在PHP中使用json_decode()提取内容。

4)Sevaral其他可能合适的选择,具体取决于您正在做什么。

如果我得到你,你有一个_POST美元的变量,有多个值。

如果$_POST['containerNumber']的内容CONT_ID001, CONT_ID002, CONT_ID003

您可以这样做:

$result = preg_split("/, /", $_POST['containerNumber']);
//the result dump will be:
//$result[0] = "CONT_ID001";
//$result[1] = "CONT_ID002";
//$result[2] = "CONT_ID003";

插入代码应如下所示(假设每个数字有一列):

$SQL = "INSERT INTO myTable ";
$columns = "";
$values = "";
foreach (result as $id=>$out){
    $columns .= "container_$id";
    $values .= "'$out'";
    if (count($result) < $id+1){
        $columns .= ", ";
        $values .= ", ";
    }
}
$SQL .= "($columns) VALUES ($values)";

如果您只有container_num列,它应如下所示:

$SQL = "INSERT INTO myTable (container_num) VALUES ('";
$columns = "";
$values = "";
foreach (result as $id=>$out){
    $values .= $out;
    if (count($result) < $id+1){
        $values .= ", ";
    }
}
$SQL .= "$values')";