在一个表中更新具有多个值的多个列

时间:2015-07-14 23:10:53

标签: php mysql mysqli sql-update

我正在制作一个非常简单的库存控制系统。在用户可以进行更新的页面中,我列出了表格中的所有内容,并将所有内容放在文本字段中,如图像。Stock control example

因此,用户应该只更改他想要的内容,当他点击提交时,它会更新表中的每一行及其各自的值。但我的代码不起作用。我不知道如何进行这种更新,我确定这是错误的,因为它甚至不起作用。我的表格在这里:

<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变量时,它可以工作。我怎么能做到这一点?

1 个答案:

答案 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,如果没有,请确保在传递数据库查询之前验证数据。