Selects aninhados – fazendo uma busca

Provavelmente já existem muitos tutoriais na net de como fazer uma busca por selects aninhados usando (a metodologia) ajax. Mas, como na web sempre tem gente nova chegando, e novas abordagens são sempre bem-vindas, vou mostrar como fazer uma dessas buscas de uma forma bem simples.

O que é necessário: um banco MYSQL rodando, PHP (versão 4 já da conta) e a biblioteca javascript prototype.

Tendo os ingredientes à mão, vamos criar um banco de dados com duas tabelas:

bandas: campos ID e NOME

discos: campos ID, ID_BANDA, NOME



A idéia é que a tabela bandas liste várias bandas (sendo ID chave primária), e a tabela discos vai guardar uma lista de discos referentes às bandas inseridas na outra tabela (usando ID_BANDA para referenciar a qual a banda o disco pertence).

Segue um dump do banco:

CREATE TABLE `bandas` (
  `id` int(11) NOT NULL auto_increment,
  `nome` varchar(128) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
--
-- Extraindo dados da tabela `bandas`
--
INSERT INTO `bandas` VALUES (1, ´Iron Maiden´);
INSERT INTO `bandas` VALUES (2, ´Metallica´);
INSERT INTO `bandas` VALUES (3, ´Sepultura´);
-- --------------------------------------------------------
--
-- Estrutura da tabela `discos`
--
CREATE TABLE `discos` (
  `id` int(11) NOT NULL auto_increment,
  `id_banda` int(11) NOT NULL,
  `nome` varchar(128) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
--
-- Extraindo dados da tabela `discos`
--
INSERT INTO `discos` VALUES (1, 1, ´Fear of the Dark´);
INSERT INTO `discos` VALUES (2, 1, ´The Number of the Beast´);
INSERT INTO `discos` VALUES (3, 2, ´Load´);
INSERT INTO `discos` VALUES (4, 2, ´Master of Puppets´);
INSERT INTO `discos` VALUES (5, 3, ´Chaos AD´);
INSERT INTO `discos` VALUES (6, 3, ´Arise´);





Tendo feito isso, monta-se uma página com um formulário que possui dois selects. Através de uma consulta SQL feita pelo PHP ,todos os registros da tabela bandas são retornados e o primeiro select é populado, colocando o value de cada option igual ao id da banda (ele será usado para fazer a consulta SQL na tabela discos de uma banda específica).

No onchange desse select, se chama uma função javascript:

– ela vai fazer uma requisição utilizando o objeto Ajax da (biblioteca) prototype, a uma página php chamada discos.php

– discos.php consulta a tabela discos e procura os discos de uma banda específica, retornando uma string no formato registro1|registro2|registro3…

– no retorno da função, por javascript é feito um split na string retornada e, com isso, recupera-se num vetor a lista de discos. Com isso, só é necessário apagar os ítens anteriores da lista, percorrer o vetor gerado pelo split e criar para cada item dessa lista uma option e adicioná-la (appendChild()) ao select.



Segue o código da página principal:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Exemplo de select aninhado</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.2/prototype.js"></script>
<script type="text/javascript">
    function buscadiscos(field){
        //requisita o serviço PHP que vai listar os discos de uma banda, pelo id
        new Ajax.Request(´discos.php?id=´ + $F(field), {
            onSuccess: function(transport) {
                //alert(transport.responseText);
                $("discos").innerHTML = "";
                var discos = transport.responseText.split("|");
                for(var i=0; i<discos.length; i++) {
                    if(discos[i]=="")
                        continue;
                    var li = new Element("li").update(discos[i]);
                    $("discos").appendChild(li);
                }
            }
        });
       
    }
</script>
</head>
<body>
<h1>Exemplo - select aninhado</h1>
<form id="busca_discos" name="busca_discos" method="POST" action="#">
    <label>banda:</label>
    <select id="bandas" onchange="buscadiscos(this);">
        <option value="-1">selecione...</option>
    <?php
        //conecta ao banco
        $link = mysql_connect(´localhost´, ´root´, ´´);
        mysql_select_db(´exemplo_select´, $link);
        //monta string que seleciona todas as bandas
        $sql = "SELECT * FROM bandas";
        $result = mysql_query($sql);
        while ($row = mysql_fetch_array($result)) {
            echo("<option value=´" . $row["id"] . "´>" . $row["nome"] . "</option>");
        }
    ?>
    </select>
    <br /><br /><br />
    <label>discos:<label>
    <select id="discos"></select>
   
</form>
</body>
</html>





Segue o código da página discos.php:

<?php
    //conecta ao banco
    $link = mysql_connect(´localhost´, ´root´, ´´);
    mysql_select_db(´exemplo_select´, $link);
    //monta string que seleciona todos os discos de uma determinada banda
    $sql = "SELECT * FROM discos WHERE id_banda=" . $_GET["id"];
    $result = mysql_query($sql);
    while ($row = mysql_fetch_array($result)) {
        echo($row["nome"] . "|");
    }
?>

 

Vale ressaltar que a maneira de discos.php retirnar os dados foi a mais simples possível – e de menor qualidade. Para melhorar o código, seria interessante retornar um XML ou retornar os dados no formato JSON (tanto o PHP5 tem métodos nativos para codificar dados em formato JSON, quando a biblioteca JSON tem para decodificar os mesmos).

Nerdgirls – reality show para os nerds

Cansado de reality shows com pessoas burras, sem inteligência e sem noção? Ou não acredita que pode haver vida bonita dentro do mundo Geek?
Seus problemas acabaram (okey, não é pra tanto). Um reality show com moças estudantes de engenharia onde o primeiro objetivo é construir um carro movido a energia solar; é o que promete o http://www.nerdgirls.org/

Ainda não se sabe qual será a TV que passará o evento, quais os moldes do programa nem foi divulgado qual será o prêmio final para a vencedora. Mas se sabe que com a exposição que elas terão, os salários quando se graduarem serão altos; independente se trabalharem como engenheiras ou mudem de ramo!

Algumas das moças:

 

Referência: http://uoltecnologia.blog.uol.com.br/arch2008-06-15_2008-06-21.html#2008_06-16_15_16_45-130772099-26

Vício em Internet: uma doença?

Num artigo do American Journal of Psychiatry, o pesquisador Jerald Block sugere que o abuso no uso da internet deverá ser adicionado ao seu livro Diagnostic and Statistical Manual of Mental Disorders (algo como Manual e Estatísticas de Diagnósticos dos Distúrbios Mentais, uma referência muito usada por médicos e afins). Segundo o mesmo, estudos em cidades da Coréia do Sul apontam que quase 170 mil crianças estão fazendo uso de remédios psicotrópicos para tratar efeitos do uso excessivo da Internet.

Segundo ele, os sintomas do vício em internet são os mesmos de qualquer outro vício: irritabilidade, necessidade de estar sempre usando, diminuição da vida social, e todos os outros.

E você, é um viciado em internet? 😛

 

Referência: http://feeds.wired.com/~r/wired/index/~3/310891079/st_wtf

O Cara da Informática

1) O CARA DA INFORMÁTICA dorme. Pode parecer mentira, mas o CARA DA NFORMÁTICA precisa dormir como qualquer outra pessoa. Esqueça que ele tem celular e telefone em casa, ligue só para o escritório;

 

2) O CARA DA INFORMÁTICA come. Parece inacreditável, mas é verdade. O CARA DA INFORMÁTICA também precisa se alimentar e tem hora para isso;

 

3) CARA DA INFORMÁTICA pode ter família. Essa é a mais incrível de todas: Mesmo sendo um CARA DA INFORMÁTICA, a pessoa precisa descansar no final de semana para poder dar atenção à família, aos amigos e a si próprio, sem pensar ou falar em informática, impostos, formulários,  concertos e demonstrações, manutenção, vírus e etc.;

 

4) CARA DA INFORMÁTICA, como qualquer cidadão, precisa de dinheiro. Por essa você não esperava, né? É surpreendente, mas o CARA DA INFORMÁTICA também paga impostos, compra comida, precisa de combustível, roupas e sapatos, e ainda consome Lexotan para conseguir relaxar… Não peça aquilo pelo que não pode pagar ao CARA DA INFORMÁTICA;

 

5) Ler, estudar também é trabalho. E trabalho sério. Pode parar de rir. Não é piada. Quando um CARA DA INFORMÁTICA está concentrado num livro ou publicação especializada ele está se aprimorando como profissional, logo trabalhando;

 

6) De uma vez por todas, vale reforçar: O CARA DA INFORMÁTICA não é vidente, não joga tarô e nem tem bola de cristal, pois se você achou isto demita-o e contrate um PARANORMAL OU DETETIVE. Ele precisa planejar, se organizar e assim ter condições de fazer um bom trabalho, seja de que tamanho for. Prazos são essenciais e não um luxo… Se você quer um milagre, ore bastante, faça jejum, e deixe o pobre do CARA DA INFORMÁTICA em paz;

 

7) Em reuniões de amigos ou festas de família, o CARA DA INFORMÁTICA deixa de ser o CARA DA INFORMÁTICA e reassume seu posto de amigo ou parente, exatamente como era antes dele ingressar nesta profissão. Não peça conselhos, dicas… ele tem direito de se divertir;

 

8) Não existe apenas um "levantamentozinho" , uma "pesquisazinha" , nem um "resuminho", um "programinha pra controlar minha loja", um "probleminha que a maquina não liga", um "sisteminha" , uma "passadinha rápida(ALIAS CONTA-SE DE ONDE SAIMOS E ATÉ CHEGARMOS)", pois esqueça os "inha e os inho (programinha, sisteminha, olhadinha, )" pois OS CARAS DA INFORMATICA não resolvem este tipo de problema. Levantamentos, pesquisas e resumos são frutos de análises cuidadosas e requerem atenção, dedicação. Esses tópicos podem parecer inconcebíveis a uma boa parte da população, mas servem para tornar a vida do CARA DA INFORMATICA mais suportável;

 

9) Quanto ao uso do celular: celular é ferramenta de trabalho. Por favor, ligue, apenas, quando necessário. Fora do horário de expediente, mesmo que você ainda duvide, o CARA DA INFORMATICA pode estar fazendo algumas coisas que você nem pensou que ele fazia, como dormir ou namorar, por exemplo;

 

10) Pedir a mesma coisa várias vezes não faz o CARA DA INFORMATICA trabalhar mais rápido. Solicite, depois aguarde o prazo dado pelo CARA DA INFORMATICA;

 

11) Quando o horário de trabalho do período da manhã vai até 12h, não significa que você pode ligar às 11:58 horas. Se você pretendia cometer essa gafe, vá e ligue após o horário do almo&cccedil;o (relembre o item 2). O mesmo vale para a parte da tarde: ligue no dia seguinte;

 

12) Quando CARA DA INFORMATICA estiver apresentando um projeto, por favor, não fique bombardeando com milhares de perguntas durante o atendimento. Isso tira a concentração, além de torrar a paciência. ATENÇÃO: Evite perguntas que não tenham relação com o projeto, tipo como…. vocês entendem é claro….;

 

13) O CARA DA INFORMATICA não inventa problemas, não muda versão de WINDOWS, não tem relação com vírus, NÃO É CULPADO PELO MAL USO DE EQUIPAMENTOS, INTERNET E AFINS. Não reclame! O CARA DA INFORMATICA com certeza fez o possível para você pagar menos. Se quer EMENDAR, EMENDE, mas antes demita o CARA DA INFORMATICA e contrate um QUEBRA GALHO;

 

14) Os CARAS DA INFORMATICA não são os criadores dos ditados "o barato sai caro" e "quem paga mal paga em dobro". Mas eles concordam… ;

 

15) E, finalmente, o CARA DA INFORMATICA também é filho de DEUS e não

 

filho disso que você pensou…

 

O CARA DA INFORMATICA agradece.

Adobe Acrobat online

A Adobe lançou hoje um serviço online de processamento de texto, armazenagem e compartilhamento de documento. É basicamente o que o Google Docs se propõe a fazer, mas com um grande diferencial: integração com a tecnologia Flash – usuário poderá, por exemplo utilizar flash vídeos nos arquivos PDF gerados pelo serviço –  e trocar mensagens via texto ou vídeo através da plataforma.

O lançamento desse serviço chega ao mesmo tempo em que a versão desktop do Adobe Acrobat, a 9, chega ao mercado.

Tela inicial
Tela inicial



Nesse artigo, fala-se um pouco mais da versão nova para desktop da ferramente, caso lhe interesse.

Por hora, vale a pena usar o serviço novo da Adobe e ver se é uma boa 🙂