PHP does not consider listing when it has filter

0

Top of page:

<?php 
include "funcoes.php";
session_start();
$grupo_produto = $_SESSION['grupo_produto'];
?>
<!DOCTYPE html>
<html>
    <head>
        <title></title>
        <meta charset="utf-8">
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js"></script><scripttype="text/javascript" language="javascript" src="Scripts/jquery.dataTables.js"></script>
        <script type="text/javascript" charset="utf-8">
            $(document).ready(function() {
            $('#tabela_produtos').dataTable();
            } );
        </script>

I am making a system for ordering and am having a problem with dataTable and PHP. I have a listing of all products.

I search for a product and place the desired quantity, as shown below:

Sofar,nobigproblems.Ilookforanotherproduct,IputthequantityandIfinishtheorder.

Theproblemisthat,attheendoftheorder,theonlyproductsthatheputsinthearrayarethelastonesIchose(inthiscase,the2GuaranáLata).HedoesnotconsiderthoseCocasIchoseinthebeginning.

IfImaketherequestwithoutusingthesearchfieldorifIsearch,IputtheamountanddeletewhatIresearched(returningtotheformwithallproducts),itinsertsnormal.

I'mnotgoingtoputtheDataTablecodeherebecauseit'stoolong.

Couldyouhelpme,please?Thanksinadvance.

Codetochooseproduct:

<body><formmethod="post" action="?acao=escolher_produto">
        <table id="tabela_produtos"  >
            <thead>
                <tr>   
                    <td>
                        Cod.
                    </td>
                    <td>
                        Nome
                    </td>
                    <td>
                        Preço
                    </td>
                    <?php 
                    if($grupo_produto == '0'){
                        ?>
                        <td>
                            Preço Broto
                        </td>
                        <td>
                            Preço Média
                        </td>
                        <td>
                            Preço Giga
                        </td>
                        <?php
                    }
                    ?>
                    <td>
                        Quantidade
                    </td>
                </tr>
            </thead>
            <?php 
            $array_produtos = mostrarProdutos($grupo_produto);
            ?>
            <tbody>
                <?php
                for($i=0; $i< count($array_produtos);$i++){
                    ?>
                    <tr>
                        <td>
                            <?php echo $array_produtos[$i][0]; ?>
                        </td>
                        <td>
                            <?php echo $array_produtos[$i][1]; ?>
                        </td>
                        <td>
                            <?php echo formataValor($array_produtos[$i][2]); ?>
                        </td>
                        <?php 
                        if($grupo_produto == '0'){
                            ?>
                            <td>
                                <?php echo formataValor($array_produtos[$i][3]);?>
                            </td>
                            <td>
                                <?php echo formataValor($array_produtos[$i][4]);?>
                            </td>
                            <td>
                                <?php echo formataValor($array_produtos[$i][5]);?>
                            </td>
                        <?php 
                        } 
                        ?>
                        <td> 
                            <input type="button" value="+" onclick="mais('<?php echo $i;?>')"/> <input type="number" id="<?php echo $i?>" name="<?php echo $i?>" /> 
                            <input type="button" value="-" onclick="menos('<?php echo $i;?>')"/>
                        </td>
                    </tr>
               <?php
                }
            ?>
            </tbody>
        </table>
        <input type="submit" value="Escolher">
    </form> 
</body>

Action by clicking Choose:

if(@$_GET['acao'] == 'escolher_produto'){
$array_produtos = mostrarProdutos($_SESSION['grupo_produto']);
if(isset($_SESSION['array_pedido'])){
    $array_pedido = $_SESSION['array_pedido'];    
}else{
    $array_pedido = array();
}
$nenhum_produto = 0;
for($i=0; $i< count($array_produtos);$i++){
    if($_POST[$i] != 0){
        $codigo_produto = $array_produtos[$i][0];
        $descricao = $array_produtos[$i][1];
        $valor_unitario = $array_produtos[$i][2];
        $quantidade = $_POST[$i];
        while($quantidade > 0){
            array_push($array_pedido, array($codigo_produto,$descricao, $valor_unitario));
            $quantidade--;
        }
    }
    $nenhum_produto++;
}
if($nenhum_produto == 0){
    echo "<script> alert('Escolha algum produto'); history.back(); </script>";
}else{

    $_SESSION['array_pedido'] = $array_pedido;
    echo "<script> location.href ='grupo_produtos.php'; </script>";
}

}

    
asked by anonymous 05.12.2016 / 20:06

1 answer

0

This dataTable is a bit nauseated, it works that way, it only sends the form of what's on the screen. In order to send other fields, you need to do a bit of manual work rs.

What you need to do is, when submitting the form, look for the form fields that are not being displayed on screen and add them as hidden before sending, or within some equally invisible element.

The following code does this, look in lines for everything input that is not visible in the dataTable and adds a hidden div . Also change the part of adding libraries to use more updated versions, and added there in the middle to use the style of:

HTML

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jqu‌​ery.min.js"></script‌​><linkrel="stylesheet" type="text/css" href="https://cdn.datatables.net/v/dt/jqc-1.12.4/dt-1.10.13/datatables.min.css"/>
<script type="text/javascript" src="https://cdn.datatables.net/v/dt/jqc-1.12.4/dt-1.10.13/datatables.min.js"></script>

JS

$(document).ready(function() {
  $('#tabela_produtos').dataTable();

  $('form').on('submit', function (e) {
    var seletor = 'input';
    var oForm = $(this);
    oForm.find('.dataTable').each(function () {
      var oTable = $(this).DataTable();
      var todos = $(oTable.rows().nodes()).find(seletor);
      var atual = $(oTable.rows({page:'current'}).nodes()).find(seletor);
      // adiciona os inputs que não estão visíveis ao form, escondendo eles
      var oDivOculto = $('<div>').attr('style', 'display: none');
      oDivOculto.append(todos.not(atual));
      oForm.append(oDivOculto);
    });
  });

} );
    
08.12.2016 / 13:55