我有一个以两个值作为键的输入表单,构造方式如下:
<input name="verificarPago['.$x['pagoID'].'-'.$x['userID'].']" type="text">例如,HTML看起来如下所示:
<input name="verificarPago[4-10]" type="text">此外,我还有用户可以输入的值,例如"Juan“。
输入是以编程方式创建的,我希望将每个输入值(在示例中为4、10、Juan)保存到一个数据库中。
因此,当用户提交表单时,我考虑使用foreach来访问该数组中的元素,但我的问题是:如何才能引爆键来分别访问这两个值?
我尝试过这样做(我现在没有考虑安全性,我试图证明这个概念):
$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,这样就会产生重复的结果(同时也会出现错误)。
发布于 2016-07-28 02:10:56
在不解决任何架构问题、添加错误检查或解决安全问题的情况下,下面是如何执行您所要求的
$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支持批量插入,所以可以修改查询的生成以利用这一点。
$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);现在只需一次往返到数据库
发布于 2016-07-28 03:00:15
这是一种将价值观传递给POST的奇怪方式。但是,为了扩展Peter的答案并解决突出的安全问题,您也可以使用准备好的语句。它们被设计成准备一次,然后多次执行,因此非常适合这项工作。
$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合作过了,但这应该能起作用。您也需要在其中包含一些错误检查。
https://stackoverflow.com/questions/38625482
复制相似问题