sábado, 26 de outubro de 2013

Tratamento de arquivo com PHP

Tratamento de arquivo com PHP


Bom dia, caros amigos e alunos. Hoje vamos falar sobre tratamento de arquivos em PHP. Não é comum em desenvolvimento de páginas termos que ler ou gravar dados em arquivos, mas as vezes precisamos fazê-lo. Por essa razão posto esse assunto.

Posso parecer falar de mais, falando coisas que para uns seriam óbvias, porém a experiência me mostra que o que é óbvio para uns não o é para outros.

Você precisa ter na cabeça que irá precisar realizar três passos para manipular um arquivo, o segundo passo é o que mais trabalho e poderá ser subdividido em outros passos.

Passo 1. Abrir arquivo

Nesse passo você pede para o PHP localizar, disponibilizar o arquivo para ser manipulado e reservar recursos para tal. Nesse momento você precisará informar para quê você deseja abrir esse arquivo, dessa forma ele irá reservar os recursos de máquina necessários para sua operação.

Para abrir o arquivo você usa a função fopen. Veja sua descrição a seguir.

fopen(string <nome do arquivo>, string <modo>)

nome do arquivo - o nome do arquivo com o caminho completo.

modo - mode de abertura do arquivo.


  • 'r' Abre somente para leitura; coloca o ponteiro do arquivo no começo do arquivo.
  • 'r+' Abre para leitura e escrita; coloca o ponteiro do arquivo no começo do arquivo.
  • 'w+' Abre para leitura e escrita; coloca o ponteiro do arquivo no começo do arquivo e reduz o comprimento do arquivo para zero. Se o arquivo não existir, tenta criá-lo.
  • 'a' Abre somente para escrita; coloca o ponteiro do arquivo no final do arquivo. Se o arquivo não existir, tenta criá-lo.
  • 'a+' Abre para leitura e escrita; coloca o ponteiro do arquivo no final do arquivo. Se o arquivo não existir, tenta criá-lo.
  • 'x' Cria e abre o arquivo somente para escrita; coloca o ponteiro no começo do arquivo. Se o arquivo já existir, a chamada a fopen() falhará, retornando FALSE. Se o arquivo não existir, tenta criá-lo.
  • 'x+' Cria e abre o arquivo para leitura e escrita; coloca o ponteiro no começo do arquivo. Se o arquivo já existir, a chamada a fopen() falhará, retornando FALSE. Se o arquivo não existir, tenta criá-lo.


Exemplos

<?php
   $handle = fopen("/home/rasmus/file.txt", "r");
   $handle = fopen("/home/rasmus/file.gif", "w");
   $handle = fopen("http://www.example.com/", "r");
?>



Passo 2. Tratar arquivo

Tratamento do arquivo. Não faz sentido você abrir o arquivo e não fazer nada com ele. Pois bem, você pode ler o mesmo, gravar linhas nele ou os dois, tudo vai depender se você o abriu da forma correta e da sua necessidade.

As funções de leitura e escrita em arquivos estão a seguir.


==== Função fgetc() ====

fgetc(resouce <manipulador>)

manipulador - é retornado pela função fopen().

Essa função obtém um caractere de um dado ponteiro de arquivo. O ponteiro após a leitura se move para o próximo caractere.

Exemplo:

<?php
    $fp = fopen('algumarquivo.txt', 'r');
    if (!$fp) {
        echo 'Não é possivel abrir algumarquivo.txt';
    }
    while (false !== ($char = fgetc($fp))) {
        echo "$char\n";
    }
?>



==== Função fgetcsv() ====

fgetcsv(resource <manipulador> [, int <tamanho> [, string <delimitador> [, string <cercador> [, string <escape> ]]]])

manipulador - É retornado pela função fopen().

tamanho - Deve ser maior do que a maior linha (em caracteres) a ser encontrada no arquivo CSV (permitindo caracteres de fim-de-linha). Se tornou opcional no PHP 5. Omitir este parâmetro (ou defini-lo como 0 no PHP 5.0.4 e posterior) o tamanho da linha não é limitado, o que é levemente mais lento.

delimitador - Define o delimitador de campo (somente um caractere). O padrão é uma vírgula.

cercador - Define o caractere que cerca um campo (somente um caractere). O padrão é aspas duplas.

escape - Define o caractere de escape (somente um caractere). O padrão é barra invertida (\)


Exemplo:

<?php
$row = 1;
$handle = fopen ("teste.csv","r");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
    $num = count ($data);
    echo "<p> $num campos na linha $row: <br /></p>\n";
    $row++;
    for ($c=0; $c < $num; $c++) {
        echo $data[$c] . "<br />\n";
    }
}
fclose ($handle);
?>




==== Função fgetcsv() ====

fgets(resource <manipulador> [, int <tamanho> ])

manipulador - É retornado pela função fopen().

tamanho - A quantidade de bytes a serem lidos. É importante frisar que os caracteres de mudança de lina e retorno são considerados para essa contagem. Se esse parâmetro não for informado será lida a linha inteira, incluindo os caracteres de retorno e mudança de linha.


Exemplo:

<?php
$handle = fopen ("teste.txt","r");
while (($data = fgets($handle)) !== FALSE) {
    $row++;
    echo $data[$c] . "<br />\n";
}
fclose ($handle);
?>



==== Função split() ====

split(string <separador> , string <texto>  [, int <quantidade> ])

Essa função não exatamente para ser usada para se tratar arquivo, mas dependendo da situação precisamos separa informações que foram lidas previamente.

separador - é o caractere que está separando as informações. Ele é utilizado para identificar quando um dado começa e outro termina.

texto - É o texto que contem as informações que precisam ser separadas.

quantidade - determina a quantidade de campos que serão separados. É importante quando existem muitos dados no texto separados mas se deseja apenas os primeiros dados.



Exemplo:

<?php
   $data = "2013-12-21";
   list ($mes, $dia, $ano) = split ('-', $data);
   echo "Dia: $dia; Mês: $mes; Ano: $ano<br />\n";
?>



Passo 3. Fechar arquivo

Após realizar todas as operações com o arquivo precisamos fecha-lo. Para isso usamos a função close, já usado nos exemplos anteriores.

fclose(resource <manipulador>)

manipulador - é criado no momento da abertura do arquivo.




    É isso aí amigos, espero ter ajudado mais uma vez.




    sexta-feira, 11 de outubro de 2013

    Envio de Arquivo com PHP

    Envio de Arquivo com PHP


    Bom dia, caros amigos e alunos.

    Ontem o Julian pediu uma ajuda de como fazer upload de arquivo para o site. Bem, estarei mostrando aqui como fazer isso.

    No lado do cliente

    No navegador teremos que ter na página web um form com um campo que especifique que se trata de um arquivo. Isso é feito com uma tag input com tipo file. Veja o exemplo.


    <form id="frmEnviaArq" name="frmEnviaArq" method="post" action="gravaarq.php" enctype="multipart/form-data" >
        <input id="nmArq" name="nmArq" type="file" size="25" maxlength="150"/>
        <input id="btnEnviar" name="btnEnviar" type="Submit" value="Enviar"/>
    <form>

    O nome do objeto é nmArq com tamanho 25 e o limite de caracteres é 150.

    Ao se clicar no botão o navegador irá requisitar o documento gravaarq.php ao servidor e enviará o arquivo para o mesmo quando ele disser que está pronto para receber.


    No lado do servidor

    Antes de tudo é muito importante vocês saberem que o PHP limita o tamanho do arquivo permitido para upload. Verifique no arquivo PHP.INI, que está no local onde o PHP foi instalado. Procure por UPLOAD_MAX_FILESIZE e altere o tamanho máximo para sua conviniência, ou se preferir você poderá alterar pelo seu código PHP com a função ini_set.

    A função ini_set substitui os valores padrões das variáveis definidas no arquivo PHP.ini para seu programa.

    Veja o exemplo abaixo.

    <?php

        // Alterando o tamanho máximo do arquivo para 5Megabytes
        ini_set('upload_max_filesize','5MB');

    ?>

    Agora precisamos receber o arquivo.

    Nós usaremos o array global $_FILES para pegar o nome do arquivo. Para isso precisamos passar duas chaves para o array, uma é o nome do objeto do form que tem o nome do arquivo, a segunda é o que queremos saber do arquivo.

    Assim:

    $arquivo = $_FILES['nmArq']['name'];

    A string 'nmArq' é o nome do objeto no form e string 'name' indica que você quer saber o nome, não passe para o português.

    Após a execução da linha acima a variável $arquivo terá o nome do arquivo que foi enviado. Se existirem vários campos do tipo arquivo no form $_FILES terá várias linhas com nomes diferentes dos arquivos. Eles poderão ser lidos com um loop foreach.

    Você também poderá pegar o tipo de arquivo que foi enviado para fazer testes com:

    $tipo = $_FILES['nmArq']['type'];

    A string 'nmArq' é o nome do objeto no form e string 'type' indica que você quer saber o tipo, não passe para o português.

    Agora teremos que usar a função move_uploaded_file para colocarmos nosso arquivo no lugar certo. Essa função retorna false caso falhe.

    Essa função usa dois parâmetros. O primeiro é o nome temporário que foi usado para a realização do upload. Isso porque quando o arquivo é enviado para o servidor ele não fica com o nome original. O segundo é o diretório com nome que desejamos.

    É de boa prática não deixarmos qualquer arquivo ir para o servidor. Sempre devemos verificar se o tipo do arquivo é um dos tipos permitidos. Para fim de didática não irei fazer essa crítica, mas em uma postagem próxima eu farei isso com vocês.

    $nome_temp = $_FILES['nmArq']['tmp_name'];

    A string 'nmArq' é o nome do objeto no form e string 'tmp_file' indica que você quer saber o nome do arquivo temporário, não passe para o português.

    A única coisa que faremos mesmo é passar o nome do arquivo para minúsculo e acrescentar o diretório para onde queremos que o arquivo vá no nosso servidor. Vale lembrar que esse diretório precisa ter o atributo de escrita permitido.

    $arqDestinostrtolower('/diretorio_de_arquivos/'.$arquivo);

    Agora fazemos a movimentação do arquivo recebido.

    move_uploaded_file($nome_temp$arqDestino);

    O código completo está abaixo, volto a lembrar que ele é muito básico por questões didáticas, em um outro exemplo farei o código mais detalhado.


    <?php

        // Alterando o tamanho máximo do arquivo para 5Megabytes
        ini_set('upload_max_filesize','5MB');

        // Pega o nome do aqruivo
        $arquivo = $_FILES['nmArq']['name'];

        // Define diretório e nome final do arquivo servidor
        // strtolower coloca em minúsculo
        $arqDestino = strtolower('/diretorio_de_arquivos/'.$arquivo);

        // Pega o nome do arquivo temporário usado no servidor
        $nome_temp = $_FILES['nmArq']['tmp_name'];

        // Move arquivo temporário para o diretório e nome corretos
        if (!move_uploaded_file($nome_temp$arqDestino) ) {
           // Erro ao mover arquivo
           echo ("<b>Erro de upload do arquivo.</b>");
        }

    ?>

    Por enquanto é só pessoal, já dizia o Pernalonga.

    Abraço.

    Joselmo Carvalho








    quinta-feira, 10 de outubro de 2013

    AJAX em PHP

    Faça páginas dinâmicas elegantes com AJAX em PHP


    Fazer páginas dinâmicas não é suficiente, é necessário fazê-las com elegância.

    Pois é, quando clicamos em item da página e ela simplesmente se recarrega por completo não tem a mesma boa impressão que uma página atualiza somente um certo local que precisa ser atualizado.

    Existem exemplos bem bacanas que poderia mostrar aqui, porém eu irei falar somente de como funciona e como fazer requisições em AJAX com PHP para vocês entenderem, e em outros posts eu darei alguns exemplos bacanas.

    Vamos lá.

    Algumas pessoas acham que AJAX é uma linguagem de programação. Essa ideia é errada, o fato é que AJAX não é uma linguagem de programação mas sim uma técnica utilizada para se realizar solicitações ao servidor a partir de um navegador de internet.

    Essa técnica basicamente tem como ator principal a linguagem utilizada na máquina cliente. No caso essa linguagem é javascript. No lado do servidor o documento requisitado será processado do mesmo jeito que seria se fosse uma solicitação normal.

    Afinal, o que significa AJAX? Ajax vem de "Asynchronous Javascript and XML" isso quer dizer "Javascript e XML Assíncrono". A comunicação realizada entre seu navegador e o servidor é feita de forma assíncrona, ou seja passa a ser possível se fazer uma ou mais solicitações independentes, que não seja de uma página inteira.

    O seu navegador para mostrar um conteúdo qualquer que está na internet precisa, na verdade, requisitar ao servidor onde esse conteúdo se encontra que lhe envie o mesmo.

    Para que isso aconteça o seu navegador se conecta ao servidor e faz uma solicitação de documento, se o servidor tiver condições de atender à solicitação irá devolver o documento, ou resultado do processamento do mesmo, e ao final essa conexão entre o navegador e o servidor é desfeita.

    Algo similar acontece com AJAX, a diferença é que você não busca um conteúdo inteiro para uma página, o documento que você requisita será colocado em uma área específica no seu navegador, dando um ar profissional em aplicações executadas nos navegadores.


    No lado da máquina cliente

    Tudo começa no javascript, onde temos que criar um objeto para realizar a comunicação com o servidor, veja o comando em javascript abaixo.

    minhaRequisicao = new XMLHttpRequest();

    O comando new vai instanciar uma objeto cuja classe é XMLHttpRequest. O objeto criado é colocado em minhaRequisicao. A partir daí tudo o que precisarmos fazer no servidor deverá usar minhaRequisicao.

    Bem, como os navegadores antigos usam um outro objeto para trabalhar com AJAX teremos que testar se o comando foi bem executado. Caso ele não tenha sido bem executado então o navegador que está sendo usado usa outro objeto, e então teremos que testar um outro objeto de conexão. Se o comando acima falhar, então precisamos tentar o seguinte:

    minhaRequisicao = new ActiveXObject("Msxml2.XMLHTTP");

    Se o camando acima também não funcionar, então faremos uma última tentativa com:


    falhar, então precisamos tentar o seguinte:

    minhaRequisicao = new ActiveXObject("Microsoft.XMLHTTP");

    Se esse também não funcionar, então não podemos trabalhar com AJAX nesse navegador, e devemos informar ao usuário que ele precisa atualizar o mesmo para acessar o site.

    Um código mais completo seria assim:

    try {
      // Para IE7+, Firefox, Chrome, Opera e Safari
      minhaRequisicao = new XMLHttpRequest();  
    } catch (tentaIEantigo) {  
        try {
           // Para IE6 e IE5 
           minhaRequisicao = new ActiveXObject("Msxml2.XMLHTTP");  
        } catch (tentaOutros) {  
          try {
            // Qualquer coisa diferete
            minhaRequisicao = new ActiveXObject("Microsoft.XMLHTTP");
          } catch (falhou) {
            // Nada funcionou
            minhaRequisicao = false;  
          }  
       }  
    }


    Depois da criação do objeto de conexão precisamos informar qual documento abrir bem como o método que deverá ser utilizado e se deseja usar uma conexão assíncrona ou não. O navegador faz requisições com GET ou POST, um deles deverá ser o método a ser utilizado. Veja.

    minhaRequisicao.open("GET","meunome.php",true);

    O primeiro parâmetro passado na função acima informa o método a ser utilizado, o segundo parâmetro informa o documento que se deseja, o terceiro parâmetro informa se deseja comunicação assíncrona.

    Agora é necessário informar qual função do javascript precisa ser executada quando o estado de recebimento se alterar.

    A linha de comando abaixo informa ao objeto de conexão para executar a função javascript de nome recebeDados quando o estado de recebimento for alterada.

    minhaRequisicao.onreadystatechange = recebeDados;


    A função recebeDados será descrita mais abaixo.

    Bem, até aqui nada aconteceu. Agora precisamos fazer com que nosso objeto de conexão seja executado. Usaremos o comando mostrado a seguir.

     minhaRequisicao.send();

    Quando o objeto minhaRequisicao tiver seu estado alterado irá executar a função recebeDados.

    Lá precisaremos testar se o estado é de completo, o atributo readyState do objeto de conexão precisa ser igual a 4 indicando que o recebimento foi realizado. O da conexão estar terminada não quer dizer que o recebimento tenha sido realizado com sucesso, por isso também temos que testar se o status é igual a 200.

    Veja o código abaixo.

    function recebeDados(){  
    //Verificar pelo estado "4" de pronto  
      if (minhaRequisicao.readyState == '4'){  
      // Verifica se o documento encontrado com sucesso
        if (minhaRequisicao.status == 200) {
          //Pegar dados da resposta XML  
          var resultado = minhaRequisicao.responseText;
          minhaDiv.innerHTML = resultado;     
        }
        else {
          minhaDiv.innerHTML = "Erro: " + minhaRequisicao.statusText;
        }
       }  



    O que essa função faz?

    O fato do documento ter alterado o seu estado de recebimento não significa que ele tenha sido carregado com sucesso. Por isso precisamos verificar se o estado é igual a 4. Os estados possíveis são:

    0 = uninitialized (não inicializado)
    1 = loading (carregando)
    2 = loaded (carregado)
    3 = interactive (interagindo)
    4 = complete (pronto)

    Esses estados são úteis para nos ajudar a colocar aquela imagem animada na tela informando que está processando. Ao final, se retira aquela imagem e mostra o resultado do documento recebido.

    O comando a seguir pega o resultado enviado pelo servidor.

    var resultado = minhaRequisicao.responseText;

    E finalmente colocamos o resultado na nossa página, no exemplo dado colocamos na DIV de nome minhaDIV. O atributo innerHTML é quem é responsável para conter o texto HTML.

    O nosso código completo poderia ficar assim:


    funcion pegaMeuNome() {
      minhaRequisicao = criaRequisicao();

      if(minhaRequisicao != false) {
        minhaRequisicao.open("GET","meunome.php",true);
        minhaRequisicao.onreadystatechange = recebeDados;
        minhaRequisicao.send();
      }
    }


    funciotn criaRequisicao () {
      try {
      // Para IE7+, Firefox, Chrome, Opera e Safari
        XmlReqnew XMLHttpRequest();  
      }
      catch (tentaIEantigo) {  
        try {
           // Para IE6 e IE5 
           XmlReq new ActiveXObject("Msxml2.XMLHTTP");  
        }
        catch (tentaOutros) {  
          try {
            // Qualquer coisa diferete
            XmlReq new ActiveXObject("Microsoft.XMLHTTP");
          }
          catch (falhou) {
            // Nada funcionou
            XmlReq = false;  
          }  
        }  
      }
      return(XmlReq);
    }


    function recebeDados(){  
    //Verificar pelo estado "4" de pronto  
      if (minhaRequisicao.readyState == '4'){  
      // Verifica se o documento encontrado com sucesso
        if (minhaRequisicao.status == 200) {
          //Pegar dados da resposta XML  
          var resultado = minhaRequisicao.responseText;
          minhaDiv.innerHTML = resultado;     
        }
        else {
          minhaDiv.innerHTML = "Erro: " + minhaRequisicao.statusText;
        }
       }  



    Se você estiver passando um formulário para o servidor há a necessidade de se colocar mais uma linha informando que se trata de um formulário e alterar o método send colocando os dados do form como parâmetro. Veja a alteração necessária apenas na função pegaMeuNome. Assuma que o formulario só tenha um campo de id = matricula.

    funcion pegaMeuNome() {
      minhaRequisicao = criaRequisicao();
      matr = documment.getElementById("matricula");

      if(minhaRequisicao != false) {
        minhaRequisicao.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
        minhaRequisicao.open("GET","meunome.php",true);
        minhaRequisicao.onreadystatechange = recebeDados;
        minhaRequisicao.send("matricula="+matr);
      }
    }


    No lado do servidor

    No lado do servidor estão os documentos html, Perl, PHP e etc. No nosso caso vamos falar do PHP.

    O PHP deverá devolver o HTML para o navegador que fez a solicitação. O navegador então, como visto anteriormente irá pegar o código HTML e colocá-lo na área devida da página web.

    Vamos lá.

    O código PHP deverá receber os parâmetros passados pelo navegador, se não há parâmetros para serem recebidos basta, então, desprezar essa parte.

    Nós usamos uma das seguintes GLOBALS Arrays para coletar as informações passadas.

    $_GET[] ou $_POST[]

    Usaremos os nomes nas variáveis passadas como parâmetro no método send lá do javascript.

    $matriculaFunc = $_GET['matricula'];

    Supondo que se faça uma comunicação com o banco de dados MySql para coletar o nome do funcionário teremos o seguinte:

    Obs. Não comentarei sobre essa parte, se desejar saber mais acesse o tópico Conexão MySql PHP.

    O código seria algo assim:

    <?php

    // Pegando parâmetros
    $matriculaFunc = $_GET['matricula'];

    // Abrindo a conexão com o MySql
    $con = mysql_connect("localhost", "userdb", "123456");

    // Verificando se a conexão foi bem sucedida
    if (!$con) {
      // A conexão falhou
      echo ('Não foi possível conectar: ' . mysql_error());
      exit(-1);
    }

    // Selecionando o banco de dados
    if (!mysql_select_db("meudb")) {
       // A seleção de banco de dados falhou 
       echo ("Não foi possível selecionar o banco dados\n");
       exit (-2);
    }

    // Executando a query de consulta
    $meuresultado = mysql_query("Select nome_func from FUNCIONARIO Where matr_func = $matriculaFunc");

    // Verificando se a consulta foi executada sem erro
    if (!$meuresultado ) {
      // A consulta falhou
      echo ('A consulta falhou: ' . mysql_error());
      exit(-3);
    }

    // Passando o resultado para um array
    $linha= mysql_fetch_row($meuresultado);

    // Mostrando o resultado
    echo ($linha[0);

    // Fechando a conexão com o MySql
    mysql_close($con);


    ?>

    É isso aí, pessoal. Espero trer ajudado mais uma vez.

    Um grande abraço.

    Joselmo Carvalho


    quarta-feira, 9 de outubro de 2013

    Extraindo múltiplas linhas MySql PHP

    Veja como é fácil extrair várias linhas do MySql com o PHP.


    Pessoal, a gente já viu como fazer uma conexão com banco de dados MySql, e naquele exemplo fizemos uma pesquisa na base de dados trazendo apenas uma única informação. Pois bem, agora vamos ver como selecionar múltiplas linhas da base de dados.

    Não vou detalhar a explicação da realização da conexão, se desejar mais explicações click aqui.

    Vamos começar, então.

    Os comandos são basicamente os mesmos do exemplo anterior a diferença está na forma da realização do fetch e do acesso ao array. Vejamos.

    O fato é que qualquer função fetch da biblioteca para MySql funcionaria. O que muda seria a forma como você acessaria cada coluna.

    Quando você executa o SQL com mysql_query você tem como retorno um array de linhas que foram retornadas do banco de dados. Porém, na grande maioria dos casos, quase 100% deles, você quer ter acesso às colunas individualmente. Por esse motivo precisamos quebrar cada linha recebida em colunas. Quem faz essa separação das colunas é o próprio comando fetch que você usar.

    Os comandos fetch realizam uma leitura do array devolvido pelo comando mysql_query e separa as colunas em forma de array. Essa leitura pega a linha atual e logo em seguida se posiciona na linha seguinte para que essa, então, possa ser lida no próximo comando fetch.

    Por exemplo se eu precisar realizar a leitura das três primeiras linhas eu terei que realizar três comando fetch, uma para cada linha, logo após a execução da query. Cada uma das leituras me devolveria um array contendo os dados contidos em cada uma das colunas.


    mysql_fetch_row

    Essa função devolve um array contendo os dados das colunas da linha atual. Como em PHP os arrays são um conjunto de chave/valor, para que eu possa ter acesso ao valor de cada coluna terei que usar uma chave. A chave de pesquisa para mysql_detch_row é um inteiro começando de 0, indo até ao número de colunas devolvidas menos um. Por exemplo, $colunas[0] para a primeira coluna, $minhascols[5] para a sexta coluna da minha query.

    <?php
    $resultado 
    mysql_query("SELECT matr, email FROM func WHERE matr = '1456'");
    if (!
    $resultado) {
        echo 
    'Não foi possível executar a consulta: ' mysql_error();
        exit;
    }


    $colunas mysql_fetch_row($resultado);

    echo 
    $colunas[0]; // 1456echo $colunas[1]; // o endereço de email?>


    mysql_fetch_assoc

    Essa função devolve um array contendo os dados das colunas da linha atual. Como em PHP os arrays são um conjunto de chave/valor, para que eu possa ter acesso ao valor de cada coluna terei que usar uma chave. A chave de pesquisa para mysql_detch_assoc é o nome da coluna presente na query.

    Veja um exemplo.

    <?php

    $con 
    mysql_connect("localhost""usariodb""senha123");

    if (!
    $con) {
        echo 
    "Não foi possível conectar ao banco de dados: " mysql_error();
        exit;
    }

    if (!
    mysql_select_db("nomedb")) {
        echo 
    "Não foi possível selecionar nomedb: " mysql_error();
        exit;
    }
    $sql "SELECT matr as id, nome, salario
            FROM   func
            WHERE  ativo = 1"
    ;$resultado mysql_query($sql);

    if (!
    $resultado) {
        echo 
    "Não foi possível executar a consulta ($sql) no banco de dados: " mysql_error();
        exit;
    }

    if (
    mysql_num_rows($resultado) == 0) { // Quantidade de linhas retornadas
        echo 
    "Não foram encontradas linhas, nada para mostrar, assim eu estou saindo";
        exit;
    }
    // Enquanto uma linha de dados existir, coloca esta linha em $colunas como uma matriz associativa
    // Nota: se você esta esperando apenas uma linha, não é necessário usar um loop
    while ($colunas mysql_fetch_assoc($result)) {
        echo 
    $colunas["id"]; // Repare que n select determina que matr seja chamada por id.
        echo 
    $colunas["nome"];
        echo 
    $colunas["salario"];
    }


    ?>


    mysql_fetch_array

    Essa função devolve um array contendo os dados das colunas da linha atual. Como em PHP os arrays são um conjunto de chave/valor, para que eu possa ter acesso ao valor de cada coluna terei que usar uma chave. A chave de pesquisa para mysql_detch_assoc tanto pode ser um valor numérico a partir de 0 até a quantidade de colunas menos 1, como pode ser o nome da coluna presente na query. Existe um parâmetro nessa função que informa como você deseja receber o array, se é por número, nome da coluna ou ambos.

    Os exemplos a seguir foram tirados do site oficial do PHP.

    Usando posicionamento para buscar o valor da coluna.

    <?php
    mysql_connect
    ("localhost""mysql_user""mysql_password") or
        die(
    "Não foi possível conectar: " mysql_error());mysql_select_db("mydb");$result mysql_query("SELECT id, name FROM mytable");

    // MYSQL_NUM na linha abaixo diz que a busca será por posicionamento.

    while ($row mysql_fetch_array($resultMYSQL_NUM)) {
        
    printf("ID: %s  Name: %s"$row[0], $row[1]);
    }
    mysql_free_result($result);?>


    Usando nome da coluna para buscar o valor da mesma.

    <?php
    mysql_connect
    ("localhost""mysql_user""mysql_password") or
        die(
    "Não foi possível conectar: " mysql_error());mysql_select_db("mydb");$result mysql_query("SELECT id, name FROM mytable");
    // MYSQL_ASSOC na linha abaixo diz que a busca será por nome.

    while ($row mysql_fetch_array($resultMYSQL_ASSOC)) {
        
    printf("ID: %s  Name: %s"$row["id"], $row["name"]);
    }
    mysql_free_result($result);?>


    Usando nome da coluna ou posicionamento para buscar o valor da da coluna.


    <?php
    mysql_connect
    ("localhost""mysql_user""mysql_password") or
        die(
    "Não foi possível conectar: " mysql_error());mysql_select_db("mydb");$result mysql_query("SELECT id, name FROM mytable");
    // MYSQL_BOTH na linha abaixo diz que a busca será por ambos.

    while ($row mysql_fetch_array($resultMYSQL_BOTH)) {
        
    printf ("ID: %s  Name: %s"$row[0], $row["name"]);
    }
    mysql_free_result($result);?>

    Bem pessoal, é isso aí espero ter ajudado mais uma vez.

    Um grande abraço.

    Joselmo Carvalho