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
Espero que seja útil para voce!