以多行更新形式更改输入单选值
Change input radio value in multiple row update form
当我 select 更新表单中检查的另一个无线电不同时,我无法在我的数据库中连续更改值...总是 returns 以前的状态。 .. 我怎样才能让它发挥作用?
以下是截图:
- 如何检查收音机
- 成功消息
但是当我刷新 window 时,选中的输入始终是前一个。
代码如下:
//form:
.....
<td>
<input type="text" value="<?php echo $venta; ?>" name="venta[]" id="venta_<?php echo $i; ?>" class="form-control" autocomplete="off" placeholder="Precio de venta" required="required"/>
</td>
<td>
<input type="radio" name="principal[]" id="principal_<?php echo $i; ?>" <?php if($principal == 1){ echo 'value="0" checked="checked"';} else { echo 'value="1"';}; ?>>
</td>
.....
</tr>
//the insert/update code:
$sql = "INSERT INTO MEDIDAS (idMed, principal, cod, presentacion, cantidad, compra, venta, id_user)
VALUES ";
$insertQuery = array();
$insertData = array();
foreach ($_POST['venta'] as $i => $venta) {
$insertQuery[] = '(?, ?, ?, ?, ?, ?, ?, ?)';
$insertData[] = $_POST['idMed'][$i] == '' ? null : $_POST['idMed'][$i];
$insertData[] = $_POST['principal'][$i] == '' ? 0 : $_POST['principal'][$i]; //this is the row with the input radio
$insertData[] = $code;
$insertData[] = $_POST['presentacion'][$i];
$insertData[] = $_POST['existencia1'][$i];
$insertData[] = $_POST['compra'][$i];
$insertData[] = $_POST['venta'][$i];
$insertData[] = $id_user;
}
if (!empty($insertQuery)) {
$sql .= implode(', ', $insertQuery);
$sql .= " ON DUPLICATE KEY UPDATE
principal = VALUES (principal), cod = VALUES (cod), presentacion = VALUES (presentacion), cantidad = VALUES (cantidad),
compra = VALUES (compra), venta = VALUES (venta), id_user = VALUES (id_user)
";
$stmt = $conn->prepare($sql);
$stmt->execute($insertData);
}
只有选中的单选按钮才会发送到服务器。所以你不会为每一行获取一个参数,整个表单只有一个值。所以它不应该使用 []
名称。
相反,给每个按钮一个带有行索引的值。
<td>
<input type="radio" name="principal" id="principal_<?php echo $i; ?>" value="<?php echo $i; ?>" <?php if($principal == 1){ echo 'checked="checked"';} ?>>
</td>
然后在处理表单时的循环中,您可以检查单选按钮的值是否与循环的索引匹配。
foreach ($_POST['venta'] as $i => $venta) {
$insertQuery[] = '(?, ?, ?, ?, ?, ?, ?, ?)';
$insertData[] = $_POST['idMed'][$i] == '' ? null : $_POST['idMed'][$i];
$insertData[] = $_POST['principal'] == $i ? 1 : 0;
$insertData[] = $code;
$insertData[] = $_POST['presentacion'][$i];
$insertData[] = $_POST['existencia1'][$i];
$insertData[] = $_POST['compra'][$i];
$insertData[] = $_POST['venta'][$i];
$insertData[] = $id_user;
}
当我 select 更新表单中检查的另一个无线电不同时,我无法在我的数据库中连续更改值...总是 returns 以前的状态。 .. 我怎样才能让它发挥作用?
以下是截图:
- 如何检查收音机
- 成功消息
但是当我刷新 window 时,选中的输入始终是前一个。
代码如下:
//form:
.....
<td>
<input type="text" value="<?php echo $venta; ?>" name="venta[]" id="venta_<?php echo $i; ?>" class="form-control" autocomplete="off" placeholder="Precio de venta" required="required"/>
</td>
<td>
<input type="radio" name="principal[]" id="principal_<?php echo $i; ?>" <?php if($principal == 1){ echo 'value="0" checked="checked"';} else { echo 'value="1"';}; ?>>
</td>
.....
</tr>
//the insert/update code:
$sql = "INSERT INTO MEDIDAS (idMed, principal, cod, presentacion, cantidad, compra, venta, id_user)
VALUES ";
$insertQuery = array();
$insertData = array();
foreach ($_POST['venta'] as $i => $venta) {
$insertQuery[] = '(?, ?, ?, ?, ?, ?, ?, ?)';
$insertData[] = $_POST['idMed'][$i] == '' ? null : $_POST['idMed'][$i];
$insertData[] = $_POST['principal'][$i] == '' ? 0 : $_POST['principal'][$i]; //this is the row with the input radio
$insertData[] = $code;
$insertData[] = $_POST['presentacion'][$i];
$insertData[] = $_POST['existencia1'][$i];
$insertData[] = $_POST['compra'][$i];
$insertData[] = $_POST['venta'][$i];
$insertData[] = $id_user;
}
if (!empty($insertQuery)) {
$sql .= implode(', ', $insertQuery);
$sql .= " ON DUPLICATE KEY UPDATE
principal = VALUES (principal), cod = VALUES (cod), presentacion = VALUES (presentacion), cantidad = VALUES (cantidad),
compra = VALUES (compra), venta = VALUES (venta), id_user = VALUES (id_user)
";
$stmt = $conn->prepare($sql);
$stmt->execute($insertData);
}
只有选中的单选按钮才会发送到服务器。所以你不会为每一行获取一个参数,整个表单只有一个值。所以它不应该使用 []
名称。
相反,给每个按钮一个带有行索引的值。
<td>
<input type="radio" name="principal" id="principal_<?php echo $i; ?>" value="<?php echo $i; ?>" <?php if($principal == 1){ echo 'checked="checked"';} ?>>
</td>
然后在处理表单时的循环中,您可以检查单选按钮的值是否与循环的索引匹配。
foreach ($_POST['venta'] as $i => $venta) {
$insertQuery[] = '(?, ?, ?, ?, ?, ?, ?, ?)';
$insertData[] = $_POST['idMed'][$i] == '' ? null : $_POST['idMed'][$i];
$insertData[] = $_POST['principal'] == $i ? 1 : 0;
$insertData[] = $code;
$insertData[] = $_POST['presentacion'][$i];
$insertData[] = $_POST['existencia1'][$i];
$insertData[] = $_POST['compra'][$i];
$insertData[] = $_POST['venta'][$i];
$insertData[] = $id_user;
}