0

我有一个表单,用户可以在其中添加多达 5 个具有不同值的计数器,除了通过输入和选择的许多不同的其他值。

大多数数据应写入不同的现有数据库表,到目前为止,每个表都可以正常工作。

到目前为止,我使用了一个现有脚本,该脚本能够在提交表单后将一行添加到不同的现有数据库表中。

其中一个表称为“zaehler_test”,它需要从用户可以在表单中添加的 $_POST 值中为每个计数器插入一行。这个编辑后的脚本能够做到这一点:

 $sql_str = $xpdo->prepare("INSERT INTO zaehler_test (id, k_id, z_id, zaehlertyp, befestigung, messung, wandlerfaktor, eigentumwandler, zaehlerart, spannungsebene, zugang, anmerkungen) VALUES (:id, :k_id, :z_id, :zaehlertyp, :befestigung, :messung, :wandlerfaktor, :eigentumwandler, :zaehlerart, :spannungsebene, :zugang, :anmerkungen)");

  $sql_str->bindParam (":id", $id);
  $sql_str->bindParam (":k_id", $id);
  $sql_str->bindParam (":z_id", $_POST['zaehlernummer']);
  $sql_str->bindParam (":zaehlertyp", $_POST['zaehlertyp']);
  $sql_str->bindParam (":befestigung", $_POST['befestigung']);
  $sql_str->bindParam (":messung", $_POST['messung']);
  $sql_str->bindParam (":wandlerfaktor", $_POST['wandlerfaktor']);
  $sql_str->bindParam (":eigentumwandler", $_POST['eigentumwandler']);
  $sql_str->bindParam (":zaehlerart", $_POST['zaehlerart']);
  $sql_str->bindParam (":spannungsebene", $_POST['spannungsebene']);
  $sql_str->bindParam (":zugang", $_POST['zugang']);
  $sql_str->bindParam (":anmerkungen", $_POST['anmerkungen']);

  try{
      $sql_str->execute();
  }

表“zaehler_test”如下所示:

+----+------+------+------------+-------------+---------+---------------+-----------------+------------+----------------+--------+-------------+
| id | k_id | z_id | zaehlertyp | befestigung | messung | wandlerfaktor | eigentumwandler | zaehlerart | spannungsebene | zugang | anmerkungen |
+----+------+------+------------+-------------+---------+---------------+-----------------+------------+----------------+--------+-------------+
| 1  | 1234 | 1234 |     1      |      2      |    3    |      25       |        4        |     2      |     0          |   1    |      3      |
+----+------+------+------------+-------------+---------+---------------+-----------------+------------+----------------+--------+-------------+

所以到目前为止这工作正常。但是现在我需要从用户可能在表单中添加的其他可能的计数器中获取数据。

我首先尝试通过简单地复制脚本并编辑相关的 $_POST 变量来为每个计数器一个一个地插入数据,但这不起作用。

经过大量研究后,我偶然发现了一个脚本,它可能能够一次将所有数据插入到数据库表中,但它使用数组来执行此操作。

所以现在在提交表单后,我从发布的值创建了几个数组。数组如下所示:

数组“zaehler1”

Array
(
    [id] => db6aac9dbe239c0e0095afee9d74cab4_879012
    [k_id] => db6aac9dbe239c0e0095afee9d74cab4_879012
    [z_id] => 111
    [zaehlertyp] => 1
    [befestigung] => 1
    [messung] => 1
    [wandlerfaktor] => 
    [eigentumwandler] => 0
    [zaehlerart] => 1
    [spannungsebene] => 1
    [zugang] => 2
    [anmerkungen] => 
)

数组“zaehler2”

Array
(
    [id] => db6aac9dbe239c0e0095afee9d74cab4_879012
    [k_id] => db6aac9dbe239c0e0095afee9d74cab4_879012
    [z_id] => 222
    [zaehlertyp] => 2
    [befestigung] => 1
    [messung] => 1
    [wandlerfaktor] => 
    [eigentumwandler] => 0
    [zaehlerart] => 1
    [spannungsebene] => 1
    [zugang] => 2
    [anmerkungen] => 
)

数组 3 到 5 看起来一样,都可以有不同的(键)值(数字)。

我在前面提到的链接中找到的脚本如下所示:

// multiple queries
$stmt = $pdo->prepare('INSERT INTO table SET memberID=:memberID, programID=:programID, date_added=NOW()');
$data = array(155, 165, 175, 185);
foreach($data as $d) {
    $stmt->execute(array(':memberID' => $memberid, ':programID' => $d));
}

我试图让它适应我的需要,并想首先只用第一个数组尝试它,也只用一些数据,但我失败了。这是我到目前为止所得到的:

// multiple queries
$stmt = $xpdo->prepare('INSERT INTO zaehler_test SET id=:id, k_id=:k_id, z_id=:z_id');
$data = $zaehler1;
foreach($data as $d) {
    $stmt->execute(array(':id' => $id, ':k_id' => $id, ':z_id' => $d));
}

通过使用这个脚本,我添加了 12 行(每个数组键一个),这显然是错误的。我希望将相关值添加到每个键的一行。之后,我想尝试如何让它与我上面提到的最多 5 个数组一起工作。

有人可以指导我正确的方向吗,经过几个小时的尝试和研究,我有点迷失了。

感谢您的时间!

4

1 回答 1

0

Modx - xPDO 是我们对 PDO 的开放扩展的名称。它是一个直接建立在 PDO 之上的轻量级 ORB(对象关系桥)库。它为数据访问实现了非常简单但有效的 Active Record 模式

尝试这个:

//express each set of values in to a separate array
$data = array(
      [155, 165, 175],
      [155, 165, 175] 
   );
$stmt = $xpdo->prepare('INSERT INTO zaehler_test SET id=?, k_id=?, z_id=?');
foreach($data as $d) {
    $stmt->execute($d);
}
于 2019-12-03T04:59:17.960 回答