2015-07-14 11 views
1

Я создаю очень простую систему управления запасами. На странице, на которой пользователь сможет делать обновления, я перечисляю все содержимое в таблице и помещаю все в текстовые поля, например изображение. 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 для значений, она работает. Как я могу сделать это правильно?

ответ

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']?>" /> 

Фактически таким образом вам не нужно отправлять идентификатор, но я отправляю для простого объяснения.

Теперь вы размещаете, вы получите массив как:

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, если нет, пожалуйста, убедитесь, что вы проверить свои данные перед передачей запроса к базе данных.

+1

Спасибо другу! Помог мне долгий путь! Кстати, я все еще не знаю, как использовать pdo, но я проверю данные! Большое спасибо ! – anuseranother

+1

рад помочь. :) –

Смежные вопросы