Insert only filled data from the PHP array

2

I have a table, and I looped for it to receive input and also to do insert, however I'm having problems in INSERT and UPDATE . Where I have two codigo_tipo , descricao fields that are always inserted together into the codigo_produto field, but a product code can have N types and descriptions as it can only have 1.

So if I fill in only the first line, the rest are sent blank to the database, how do I send only the filled rows to the database and then have them updated afterwards if I want to change them.

index.php

<form action='salvar.php' method='POST'>
    <?php 
        $sql = "SELECT * FROM tipoprod"; 
        $resulta = $conn->query($sql);
        $row = $resulta->fetch_assoc();
    ?>
    <div class='form-group col-lg-4'>
        <label>  <b>Código do Produto:</b> </label>
        <input type="text" maxlength="6"  name="codigo_produto" value="<?php $row['codigo_produto'] ?>"><br><br>
    </div>

    <table border="2"><!-- Iniciando a Tabela -->

        <thead>
            <tr><!-- Início dos Títulos da Tabela / Cabeçalho -->
                <th>Código</th>
                <th>Descrição</th>                                                                                                              
            </tr><!-- Fim dos Títulos da Tabela / Cabeçalho -->
        </thead>

        <tbody>
        <?php
            include("conn.php");

            for($i = 1; $i <= 5; $i++){ //coloquei este valor para testar                  

                echo "<tr>";
                echo "<td><input type='text' name='codigo_tipo[]' id='codigo_tipo[]' style='border:none; width:100%; background-color: transparent;'</td>";
                echo "<td><input type='text' name='descricao[]' id='descricao[]' value='' style='border:none; width:100%; background-color: transparent;'</td>";
                echo "</tr>";
            }
        ?>
        </tbody>

    </table><br>

    <div class='form-group col-lg-3'><!-- Inicio Botão para efetuar registro no Banco de Dados -->
        <input type="submit" class="btn btn-success btn-lg btn-block" name="enviar_tipo" value="Salvar Informações">
    </div>

</form>

save.php

<?php
include("conn.php");

if(isset($_POST['enviar_tipo'])){

    $codigo_produto = $_POST['codigo_produto'];
    $codigo_tipo = $_REQUEST['codigo_tipo'];
    $descricao = $_REQUEST['descricao'];

    $sql_tipo = "SELECT * FROM tipoprod WHERE codigo_produto = '$codigo_produto' ";
    $resulta = $conn->query($sql_tipo);
    $row = $resulta->fetch_assoc();

for($i = 0; $i<count($_POST['codigo_tipo'])AND($_POST['descricao']); $i++) {

if ($resulta->num_rows > 0) {
    $result_produto = "UPDATE tipoprod SET codigo_tipo = '$codigo_tipo[$i]', descricao = '$descricao[$i]' WHERE codigo_produto = '$codigo_produto' ";
} else {
    $result_produto = "INSERT INTO tipoprod (codigo_produto, codigo_tipo, descricao) VALUES ('$codigo_produto', '$codigo_tipo[$i]', '$descricao[$i]')";
}

    $resultado_produto = mysqli_query($conn, $result_produto);
    echo "$result_produto <br>";
}
}
?>
    
asked by anonymous 30.09.2017 / 15:30

1 answer

2

To avoid nulls, that's how

 $codigo_tipo = array_filter($_REQUEST['codigo_tipo']); 
 .........
 .........
 for($i = 0; $i<count($codigo_tipo)AND($_POST['descricao']); $i++) {
 .........
  

array_filter - Filters elements of an array using a callback function, if no callback is provided, all array entries equal to FALSE will be removed.

Example array_filter () without callback

$entry = array(
         0 => 'foo',
         1 => false,
         2 => -1,
         3 => null,
         4 => ''
      );

print_r(array_filter($entry));

The above example will print:

Array
(
  [0] => foo
  [2] => -1
}
    
30.09.2017 / 16:55