首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用PHP在单个foreach循环中将三个值添加到数据库中?

如何使用PHP在单个foreach循环中将三个值添加到数据库中?
EN

Stack Overflow用户
提问于 2016-07-28 00:57:30
回答 2查看 83关注 0票数 0

我有一个以两个值作为键的输入表单,构造方式如下:

代码语言:javascript
复制
<input name="verificarPago['.$x['pagoID'].'-'.$x['userID'].']" type="text">

例如,HTML看起来如下所示:

代码语言:javascript
复制
<input name="verificarPago[4-10]" type="text">

此外,我还有用户可以输入的值,例如"Juan“。

输入是以编程方式创建的,我希望将每个输入值(在示例中为4、10、Juan)保存到一个数据库中。

因此,当用户提交表单时,我考虑使用foreach来访问该数组中的元素,但我的问题是:如何才能引爆键来分别访问这两个值?

我尝试过这样做(我现在没有考虑安全性,我试图证明这个概念):

代码语言:javascript
复制
              $verificar = $_POST['verificarPago'];
              foreach ($verificar as $pago => $curso) {
//I'm pretty much stuck here. 
                  $verificar= array_flip(explode("-", $verificar));

//I want to insert the three items into the database
                  $verificarPago = "INSERT pagosVerificados SET userID = '$usuario', pagoID = '$pago', cursoID = '$curso'";
                  $cargarPago = mysqli_query($conectar, $verificarPago);

              }

我尝试将另一种输入类型添加到表单中,这样值就不会在一起了,但是这样,我应该在foreach中做一个foreach,这样就会产生重复的结果(同时也会出现错误)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-28 02:10:56

在不解决任何架构问题、添加错误检查或解决安全问题的情况下,下面是如何执行您所要求的

代码语言:javascript
复制
$verificar = $_POST['verificarPago'];
foreach ($verificar as $ids => $text) {
    list($pagoID, $cursoID) = explode("-", $ids);

    $sql = "INSERT INTO pagosVerificados (userID, pagoID, cursoID, someVarcharField)
                      VALUES ($usuario, $pagoID, $cursoID, '$text');";
    $cargarPago = mysqli_query($conectar, $sql);

}

不过,这有点效率低下--每次迭代都执行一个insert。因为mysql支持批量插入,所以可以修改查询的生成以利用这一点。

代码语言:javascript
复制
$verificar = $_POST['verificarPago'];
$rows = array();

foreach ($verificar as $ids => $text) {
    list($pagoID, $cursoID) = explode("-", $ids);
    $rows[] = "($usuario, $pagoID, $cursoID, '$text')";
}

$sql = "INSERT INTO pagosVerificados (userID, pagoID, cursoID, someVarcharField) VALUES "
               . implode(',', $rows)
               . ";";
$cargarPago = mysqli_query($conectar, $sql);

现在只需一次往返到数据库

票数 2
EN

Stack Overflow用户

发布于 2016-07-28 03:00:15

这是一种将价值观传递给POST的奇怪方式。但是,为了扩展Peter的答案并解决突出的安全问题,您也可以使用准备好的语句。它们被设计成准备一次,然后多次执行,因此非常适合这项工作。

代码语言:javascript
复制
$verificar = $_POST['verificarPago'];
$sql = "INSERT INTO pagosVerificados (userID, pagoID, cursoID, someVarcharField) VALUES (?, ?, ?, ?)"
$stmt = $conectar->prepare($sql);

foreach ($verificar as $ids => $text) {
    list($pagoID, $cursoID) = explode("-", $ids);
    $stmt->bindParam("iiis", $usuario, $pagoID, $cursoID, $text);
    $stmt->execute();
}

我已经多年没有和mysqli合作过了,但这应该能起作用。您也需要在其中包含一些错误检查。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38625482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档