我正在制作一个非常简单的库存控制系统。在用户将能够进行更新的页面中,我列出了表中的所有内容并将所有内容都放在文本字段中,例如图像。
因此,用户只需更改他想要的内容,当他点击提交时,它会更新表中的每一行,并显示其各自的值。但是我的代码不起作用。我不知道如何进行这种更新,而且我确定它是错误的,因为它甚至不起作用。这是我的表格:
<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 变量时,它起作用了。我怎样才能做到这一点?
最佳答案
通过在您的 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,如果不是,请确保在通过数据库查询之前验证您的数据。
关于php - 在一个表中更新具有多个值的多个列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31418938/