1
resposta

Criar nova function???

Estou tentando aplicar o conhecimento mas estou tendo uma dificuldade

fiz uma lista de "acessos" (nome varchar , usado boolean) quero que quando o usuario clique em alterar ele mude o usado ( inverta) se esta true vire False. fiz a lista ok... mas não estou conseguindo criar a função que inverte o valor e salva no banco

lista_acessos.php

<?php include("cabecalho.php");
      include("conecta.php");
      include("banco_produtos.php"); 
      include("banco_acesso.php");

      $produtos = listaAcessos($conexao);
       $usado = $produto['usado'] ? "checked ='checked'" : "";
      ?>
      <h1>Acessos</h1>
      <table class="table table-striped table-bordered" id="tabela">
        <?php
            foreach($produtos as $produto) {
        ?>
            <tr>
                <td><?= $produto['nome'] ?></td>
                <td><?= $produto['usado'] ? "Disponivel" : "Indisponivel" ?></td>
                <td>
                <form action="disp.php" method="post">
                <input type="hidden" name="id" value="<?= $produto['id'] ?>">
                <button class="btn btn-primary" method="post">Alterar</button>
                </form></td>
            </tr>

        <?php
            }
        ?>
    </table>


<?php include("rodape.php");?>

disp.php

<?php include("cabecalho.php");
      include("conecta.php");
      include("banco_acesso.php"); 

      $id = $_POST["id"];
      altera_acesso($conexao, $id);
      header("Location: lista_acessos.php");
      die();
      ?>

banco_acessos.php

<?php

function listaAcessos($conexao) {
    $acessos = array();
    $query = "SELECT * FROM `acessos`";
    $resultado = mysqli_query($conexao, $query);
    while($acesso = mysqli_fetch_assoc($resultado)) {
        array_push($acessos, $acesso);
    }
    return $acessos;
}
1 resposta

Olá Raphael, tudo bem?

Realizei uma análise em seu código. No formulário presente no script lista_acessos.php você está enviando somente o código do produto para o script disp.php. Minha sugestão é adicionarmos um segundo campo do tipo hidden para enviarmos $produto['usado']. Segue código relacionado ao script lista_acessos.php:

<?php

    include("cabecalho.php");
    include("conecta.php");
    include("banco_produtos.php"); 
    include("banco_acesso.php");

    $produtos = listaAcessos($conexao);

?>

    <h1>Acessos</h1>
    <table class="table table-striped table-bordered" id="tabela">

    <?php

        foreach($produtos as $produto) {

    ?>

        <tr>
            <td><?= $produto['nome'] ?></td>
            <td><?= $produto['usado'] ? "Indisponivel" : "Disponivel" ?></td>
            <td>
                <form action="disp.php" method="post">
                    <input type="hidden" name="id" value="<?= $produto['id'] ?>">
                    <input type="hidden" name="usado" value="<?= $produto['usado'] ? 1 : 0 ?>">
                    <button class="btn btn-primary" method="post">Alterar</button>
                </form>
            </td>
        </tr>

    <?php

        }

    ?>

    </table>

<?php

    include("rodape.php");

?>

Agora, quando clicar em Alterar estará enviando para o script disp.php o código do produto, bem como se o produto está indisponível 1 ou disponível 0. Segue código relacionado ao script disp.php:

<?php

    include("cabecalho.php");
    include("conecta.php");
    include("banco_acesso.php"); 

    $id = $_POST["id"];
    $usado = ($_POST["usado"] === '0') ? 1 : 0;

    altera_acesso($conexao, $id, $usado);

    header("Location: lista_acessos.php");
    die();

?>

Para concluir, acrescente em seu script banco_acessos.php a função altera_acesso. Segue código da função:

<?php

    function altera_acesso($conexao, $id, $usado) {
        $query = "update acessos set usado = {$usado} where id = {$id}";
        return mysqli_query($conexao, $query);
    }

?>