Página Inicial > MySQL, PHP, jQuery > Manipulando vários registros com PHP e MySQL

Manipulando vários registros com PHP e MySQL

Olá, hoje irei mostrar um dica muito simples porém bem bacana e útil.

Como apagar diversos registros de uma vez, e evitar que voce ou no caso quem for utilizar seu sistema tenha que ficar apagando um por um.

Imagine se voce tivesse que apagar os seus emails um a um…
Não seria nada legal hein. Por isso é tão importante essa opção de apagar multíplos registros de uma vez.

A implementação não é nada complicada, então vamos ao que interessa!

Primeiro vamos simular uma lista de usuários com um array.

<?php
$usuarios = array(
                array(01, 'Thiago Rigo', 'thiago@thiagorigo.com'),
                array(02, 'João da Silva', 'joao@gmail.com'),
                array(03, 'Antônio Carlos', 'antonio@gmail.com'));
?>

Agora iremos criar o form e uma tabela onde serão escritos os dados.

<form action="user_actions.php" method="post">
    <div id="options-content">
        <label>Opções:</label>
        <select name="options">
            <option selected="selected" value="">Selecione uma opção</option>
            <option value="delete">Excluir</option>
        </select>
        <input type="submit" name="do_action" value="Aplicar"/>
    </div>
    <table border="1" id="users">
        <thead>
            <tr>
                <th><input type="checkbox" class="all" /></th>
                <th>Nome</th>
                <th>E-mail</th>
            </tr>
        </thead>
        <tbody>
<?php foreach ($usuarios as $usuario) {?>
            <tr class="usuario">
                <td><input type="checkbox" name="usuarios[]" value="<?php echo $usuario[0]; ?>"/></td>
                <td class="user"><?php echo $usuario[1]; ?></td>
                <td><?php echo $usuario[2]; ?></td>
            </tr>
<?php } ?>
        </tbody>
        <tfoot>
            <tr>
                <th><input type="checkbox" class="all" /></th>
                <th>Nome</th>
                <th>E-mail</th>
            </tr>
        </tfoot>
    </table>
</form>

Note que temos duas checkbox que possuem a class="all", essas checkbox serão responsáveis por aplicar a seleção a todas as checkbox com name="usuarios[]" ou
remover a seleção.
As checkbox que possue o name="usuarios[]", serão repetidas pelo foreach, e após o submit serão manipuladas pelo PHP como um array.

Agora iremos criar o comportamento de aplicar a seleção ou remover a seleção das checkbox. Para isso usaremos a jQuery.

Primeiro deverá ser importado o arquivo da jQuery no seu HTML, caso voce ainda não tenha baixado a jQuery acesse o link e faça o download.

<script type="text/javascript" src="jquery/jquery-1.3.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
    // Seleciona todas checkbox
    $('.all').click(function() {
        if (this.checked == true) {
            $('input[name=usuarios[]], input.all').each(function() {
                this.checked = true;
            });
        } else {
            $('input[name=usuarios[]], input.all').each(function() {
                this.checked = false;
            });
        }
    });
});
</script>

Explicação: Ao clicar em qualquer uma das duas checkbox com class="all", verificamos se ela foi selecionada ou não.

Caso tenha sido selecionada, selecionamos todas as checkbox name="usuarios[]" e tambem a outra checkbox class="all" que não foi clicada.

Caso não tenha sido selecionada, removemos a seleção de todas as checkbox name="usuarios[]" e tambem da outra checkbox class="all" que não foi clicada.

Agora iremos criar uma validação no formulário, evitando que ele seja submetido sem que tenha sido selecionado ao menos um usuário, e escolhida uma opção.

// Valida opções
$('input:submit').click(function() {
    var selectedOpt = $('select option:selected').val();
    var checkedBox  = $('input[name=usuarios[]]:checked').length;

    if (selectedOpt == '') {
        alert('Selecione uma opção!');
        return false;
    } else {
        if (checkedBox == 0) {
            alert('Selecione um usuário!');
            return false;
        }
        return confirm('Tem certeza que deseja apagar esse(s) usuário(s)?');
    }
});

Explicação: Ao clicar no botão de submit guardamos em variáveis o value do option selecionado e a quantidade de name="usuarios[]" selecionados.

Primeiro verificamos se foi escolhida uma opção, caso não da um alert().

Se foi selecionado uma opção, esta opção é o excluir, pois é a única que existe. Então verificamos se foi selecionado pelo menos um name="usuarios[]", caso não da um alert(), caso sim pergunta se o voce realmente deseja excluir esse ou esses usuários.

Com a parte de validação JavaScript pronta, agora só falta a página user_actions.php, que será responsável por receber as requisições e realizar as devidas ações.

<?php
if (isset($_POST['do_action']) && isset($_POST['usuarios']) && ($_POST['options'] != null)) {

    switch ($_POST['options']) {
        case 'delete':
            $sql = 'DELETE FROM tabela WHERE ';
        break;
    }

    foreach ( $_POST['usuarios'] as $usuario ) {
        $sql .= "(id = {$usuario}) OR ";
    }

    echo substr($sql, 0, -4);
}

Está pronto!

Aqui como é apenas um exemplo eu só estou escrevendo a query, mas depois voce pode conectar no seu banco de dados e executar a query sem problemas.
Como voce pode ver, não é nada complicado, e ajuda bastante para quem for utilizar o sistema.

Para adicionar outras opções é bem simples! Por exemplo, uma ação de editar.

Primeiro: Voce teria que adicionar mais um option no seu select.

<div id="options-content">
    <label>Opções:</label>
    <select name="options">
        <option selected="selected" value="">Selecione uma opção</option>
        <option value="delete">Excluir</option>
        <option value="edit">Editar</option>
    </select>
    <input type="submit" name="do_action" value="Aplicar"/>
</div>

Segundo: Adicionar um elseif na validação JavaScript

// Valida opções
$('input:submit').click(function() {
    var selectedOpt = $('select option:selected').val();
    var checkedBox  = $('input[name=usuarios[]]:checked').length;

    if (selectedOpt == '') {
        alert('Selecione uma opção!');
        return false;
    } else if (selectedOpt == 'edit') {
        if (checkedBox == 0) {
            alert('Selecione um usuário!');
            return false;
        }
    } else {
        if (checkedBox == 0) {
            alert('Selecione um usuário!');
            return false;
        }
    return confirm('Tem certeza que deseja apagar esse(s) usuário(s)?');
    }
});

Terceiro: Adicionar mais um case no switch. Mas no caso de editar, voce teria que escrever o form para o usuario do sistema poder editar o registro.

Como seria muito extenso criar a parte de editar nesse mesmo post, quem sabe num próximo :P

Espero que seja útil para voce!

Categories: MySQL, PHP, jQuery Tags: , ,
  1. Betogroo
    18, fevereiro, 2010 em 15:37 | #1

    Muito bom, parabéns.

  1. Nenhum trackback ainda.

Spam Protection by WP-SpamFree