我正在制作一个非常简单的库存控制系统。在用户可以进行更新的页面中,我列出了表格中的所有内容,并将所有内容放在文本字段中,如图像。
因此,用户应该只更改他想要的内容,当他点击提交时,它会更新表中的每一行及其各自的值。但我的代码不起作用。我不知道如何进行这种更新,我确定这是错误的,因为它甚至不起作用。我的表格在这里:
<form action="update_pcs.php" method="POST">
<label>Peça</label>
<label for="txtQtd" id="qtd">Qtd.</label>
<br/>
<?php foreach($rtn as $pcs){ ?>
<input type="text" name="txtNome[]" id="txtNome" value="<?=$pcs['pc_nome']?>" />
<input type="text" name="txtQtd[]" id="txtQtd" value="<?=$pcs['num']?>"/>
<input type="hidden" name="txtId[]" id="txtId" value="<?=$pcs['id']?>" />
<br />
<br />
<?php } ?>
<br />
<br />
<input type="submit" value="Enviar" name="btnEnvia" />
</form>
我的文件update_pcs.php
,应该在表格中进行更新。
<?php
include_once 'mdl.php';
$conexao = new modelDB();
$qtd = $_POST['txtQtd'];
$nom = $_POST['txtNome'];
$id = $_POST['txtId'];
/*This makes the $dados array keep in the value ['nome'] another array, the value ['qtd'] another array and ['id'] another array*/
$dados = array('nome'=>$nom,
'qtd'=>$qtd,
'id'=>$id);
foreach($dados as $dado){
/* I'm doing it that way but it isn't working */
$nomeAt = $dado['nome'];
$qtdAt = $dado['qtd'];
$id = $dado['id'];
$conexao->alteraDb("update pcs_estq set pc_nome ='{$nomeAt}', num = '{$qtdAt}' where id = '{$idAt}'");
}
我的功能必须正确,因为当我更改值的php变量时,它可以工作。我怎么能做到这一点?
答案 0 :(得分:3)
通过在html表单中发送数组名称,您将收到数组发布变量。
首先更改您的表单,如下所示,以帮助发布更合适的数据。
<input type="text" name="values[<?=$pcs['id']?>][Nome]" id="txtNome" value="<?=$pcs['pc_nome']?>" />
<input type="text" name="values[<?=$pcs['id']?>][Qtd]" id="txtQtd" value="<?=$pcs['num']?>"/>
<input type="hidden" name="values[<?=$pcs['id']?>][id]" id="txtId" value="<?=$pcs['id']?>" />
实际上这种方式你不需要发送id,但我发送简单的解释。
现在发帖,你会收到一个像:
这样的数组values => array (
1 => array (
'id'=> 1,
'Nome' => 'Some text',
'Qtd' => 1
),
2 => ....
)
现在您可以获取数据并插入数据库。
$values = $_POST['values'];
foreach ($values as $dado) {
$nomeAt = $dado['Nome'];
$qtdAt = $dado['Qtd'];
$id = $dado['id'];
顺便说一下,我强烈建议使用pdo,如果没有,请确保在传递数据库查询之前验证数据。