Arquivo

Textos com Etiquetas ‘MySQL’

ScreenCast CrudIgniter – Basics

23, maio, 2010 Thiago Rigo 14 comentários

Eae pessoal!

Hoje vou falar sobre CrudIgniter, esse é o primeiro cast de vários que vou fazer, mostrando desde o básico até o avançado de CrudIgniter.

Nesse cast, ensino como gerar a sua aplicação em minutos, e nos próximos irei ensinar a customizar os templates, criar seus próprios templates e até criar as suas próprias funcionalidades.
Espero que gostem e até a próxima!

PS: Assistam em HD porque aí fica muito mais fácil de entender as letras.

CrudIgniter – Basics from Thiago Rigo on Vimeo.

Manipulando vários registros com PHP e MySQL

28, julho, 2009 Thiago Rigo 1 comentário

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: , ,

MySQL – Event

10, julho, 2009 Thiago Rigo 5 comentários

EVENT é uma nova funcionalidade muito interessante e útil, presente a partir do MySQL 5.1.6. Com os EVENTS você pode por exemplo agendar tarefas para serem executadas toda quarta-feira às 14:00hs, ou também um EVENT único, que será executado somente um vez.

Os EVENTS são utilizados para qualquer tipo de tarefa que envolva, agendamento e diversas operações no banco de dados.

A primeira coisa a fazer para poder utilizar EVENTS, é checar se o seu event_scheduler está habilitado. Para isso rode o seguinte comando:


SHOW PROCESSLIST;

Este comando irá mostrar todos os processos que estão rodando no MySQL. Verifique se existe o processo event_scheduler rodando. Caso não esteja, é necessário habilitá-lo com o seguinte comando:

Obs: Lembrando que como qualquer variável global é necessário ter super privilégios para habilitá-la ou desabilitá-la.


SET GLOBAL event_scheduler = 1;

Após habilitá-lo, execute novamenete:


SHOW PROCESSLIST;

E veja se agora o event_scheduler está habilitado.

A sintaxe de criação de EVENT é muito simples.

CREATE EVENT [ IF NOT EXISTS ] event_name
ON SCHEDULE schedule
[ ON COMPLETION [ NOT ] PRESERVE ]
[ ENABLED | DISABLED ]
[ COMMENT 'comment' ]
DO sql_statement;

Agora vamos começar criando um simples EVENT que á cada segundo irá inserir um novo registro do tipo TIMESTAMP na tabela test.test_event.

Primeiro vamos criar a tabela.

USE test;

CREATE TABLE test.test_event
(agora TIMESTAMP);

Agora vamos ao EVENT.

CREATE EVENT addTime
ON SCHEDULE EVERY 1 SECOND
DO
INSERT INTO test.test_event VALUES(NOW());

Após 5 segundos execute um SELECT:


SELECT * FROM test_event;

Para remover um EVENT utilize o comando DROP:


DROP EVENT addTime;

Neste exemplo vimos que o EVENT continuaria rodando até que fosse desabilitádo o event_scheduler ou fosse utilizado o comando DROP EVENT. Porém, podemos agendar também o horário de início e o horário de término do EVENT.

Vamos apenas modificar o nosso EVENT.

Obs: É importante que você tenha excluído o EVENT através do comando DROP.

CREATE EVENT addTime
ON SCHEDULE EVERY 1 SECOND
STARTS CURRENT_TIMESTAMP + INTERVAL 30 SECOND
ENDS CURRENT_TIMESTAMP + INTERVAL 35 SECOND
ON COMPLETION NOT PRESERVE
DO
INSERT INTO test.test_event VALUES(NOW());

Esse EVENT irá começar 30 segundos após ser criado, e a cada segundo irá adicionar um registro na tabela até que seja tingido o tempo de término, que é exatamente 5 segundos após começar a ser executado. Ao término ele será automaticamente excluído.

Se você quiser ver os EVENTS que estão armazenados no banco, basta utilizar o comando:


SHOW EVENTS;

Esse comando irá retornar todos os EVENTS que já foram criado. Todos os EVENTS criado vão para a tabela mysql.event, logo você também pode utilizar o SELECT.


SELECT * FROM mysql.event;

É isso aí!

Categories: MySQL Tags: ,

Ferramentas para administração do MySQL

9, junho, 2009 Thiago Rigo Sem comentários

Acredito que todos aqui conheçam o MySQL, o banco de dados opensource mais conhecido do mundo. E devido ao grande sucesso ele possui diversas ferramentas para sua administração. Irei apresentar duas delas.

MySQL Administrator

Mysql Gui Tools

Essa ferramenta é desenvolvida pela própria MySQL AB e conta com diversos recursos para te ajudar na administração do MySQL.

  • Backup’s e restore do banco
  • Analisar os logs gerados pelo MySQL
  • Conectar-se a bancos de dados remotos
  • Criar e administrar bancos e tabelas
  • Monitorar a perfomance do banco de dados
  • Criar e administrar usuários para acesso ao banco
  • E muito mais

E tudo isso em uma interface agradável e simples, lembrando que ao baixar MySQL Administrator, um pacote com outras ferramentas também desenvolvidas pela MySQL AB virão junto. Todas elas muito úteis e simples de usar.

Link para download: http://dev.mysql.com/downloads/gui-tools/5.0.html

PhpMyAdmin

PhpMyAdmin

É uma das mais conhecidas e usadas ferramentas para administração de MySQL, ela esta presente em diversos servidores de hospedagem, facilitando a administração via ambiente web.
Ao contrário do MySQL AB que é instalado em seu computador, esta ferramenta roda em ambiente web, e é desenvolvida em PHP, trazendo também uma gama de funcionalidades.

  • É possível exportar os dados da sua tabela ou banco de dados de diversas formas (SQL, Excel, Word, CSV)
  • Criar e administrar bancos e tabelas
  • Criar e administrar usuários para acesso ao banco
  • Realizar consultas
  • Inserir e alterar dados diretamente de um formulário
  • Executar busca de dados em tabelas sem a necessidade de escrever SQL
  • E muito mais

Você também pode usar essa ferramenta para administração do seu banco de dados no seu computador local, basta colocar a pasta do PhpMyAdmin em um lugar acessível pelo seu servidor.

Link para download: http://www.phpmyadmin.net/home_page/downloads.php