Mostrando postagens com marcador php. Mostrar todas as postagens
Mostrando postagens com marcador php. Mostrar todas as postagens

quinta-feira, 24 de fevereiro de 2011

Fichas de membros em MySQL

Já foi falado sobre Banco de Dados MySQL e Campos Interessantes em um banco MySQL. Agora será mostrado com criar uma ficha genérica para cadastro de membros. No caso em particular como já foi mencionado em postagens anteriores é interessante iniciar a ficha com um ID, no caso específico, um user_id como "bigint", "auto increment". Assim, pode se indexar tudo com esse ID e usar em comandos de REPLACE, para atualizar qualquer ficha do banco de dados.

Outros campos óbvios, para acesso a um site restrito, são os de login e senha. Além destes, poderá ter o nome completo (full_name), a data do aniversário do usuário, e seu respectivo nível (user_level).

Dependendo da situação poderá ter campos para datas importantes, tais como, criação da conta, expiração da conta e último login. Se o site for multilíngue, poderá ser necessário um campo para a língua preferida do usuário.

Poderá ter campo para status do usuário, ou atividade do usuário, conforme o caso. Pode ser útil ter campos para RG, expedidor, data de expedição, CPF, filiação, tipo sanguíneo, naturalidade, nacionalidade, título de eleitor, etc. E por fim poderá ser acrescentado um campo para comentários sobre o usuário.

Existem outros campos que são importantes, mas talvez não para a ficha do usuário. Por exemplo, é importante ter o email do usuário. Mas se colocar uma tabela adicional com os seguintes campos: email_ID, user_ID, user_email, email_status, então cada usuário poderá ter inúmeros emails cadastrados no site. O user_ID é o ID do usuário na tabela de membros. O administrador poderá saber pelo status se o email foi confirmado (clique no link no email, caso receba o email) ou não. Poderá até acrescentar um campo para indicar o email primário, ou a ordem de preferência dos emails, conforme o caso.

O número telefônico também é bastante interessante o administrador poder lançar mão, mas segue o mesmo raciocínio da tabela de email, uma tabela em separado, só para fones, contendo: fone_ID, user_ID, fone, fone_tipo (cel, fixo, etc.). Assim poderão ser cadastrados quantos fones quiser para cada usuário.

O endereço segue a mesma lógica. Inclui-se o endereço_ID, o user_ID, endereço, e o tipo (residencial, comercial, caixa postal, contato, etc.). No caso o endereço pode ser dividido em vários campos: end_1, end_2, numero, CEP, cidade, UF, país, obs., status, etc. Então cada cliente pode ter vários endereços cadastrados.

Para incluir outras informações, pode ser interessante criar uma tabela para cada coisa. Assim os usuários não ficam limitados a ter apenas um de cada coisa.

Caso seja previsto que haverá muita mudança nos dados em uma determinada tabela, poderá ser acrescentado um campo de "em uso". Assim, para deletar uma ficha, basta zerar o campo de "em uso". Na próxima vez que for escrever um novo dado, procura-se pela ficha com o campo zerado. Assim não ficam "buracos" no banco de dados, e não se esgotam os IDs tão rapidamente.

quinta-feira, 13 de janeiro de 2011

PHP criando gráficos .png

Como já mencionamos em post anterior, PHP é uma linguagem de programação genérico, muito parecido com a linguagem C. Mas também tem muitas facilidades para utilizar na criação de páginas web.

Aqui vamos mostrar a facilidade de se utilizar o PHP para criação de gráficos, ou seja criação de imagem tipo PNG.

A primeira rotina a ser utilizada é a seguinte:
$im = imagecreatetruecolor ( int $width , int $height );
Esta rotina cria um apontador para uma imagem ($im) com largura ($width) e altura ($height); Não se esqueça de definir $width e $height antes de utilizá-los.

A segunda  rotina a ser utilizada define as cores que pretendemos utilizar no nosso gráfico:
$background = imagecolorallocate($im, 0, 0, 0);
Os parâmetros para esta rotina são o ponteiro que criamos na primeira rotina ($im) e os níveis de cada cor R, G, B ou seja Vermelho, Verde, e Azul. A primeira vez que esta rotina é chamada, define a cor do fundo da imagem. Neste exemplo, criei um fundo preto (zero vermelho, zero verde, e zero azul). A rotina retorna um ponteiro para a cor na palete de cores do gráfico. Esta rotina deve ser chamada diversas vezes para a definição das cores que pretendemos utilizar.
 $text_color = imagecolorallocate($im, 255, 255, 255);
 $line_color = imagecolorallocate($im, 0, 0, 255);
 $bar_color = imagecolorallocate($im, 0, 255, 0);
Assim criamos um gráfico com fundo preto, texto branco, cor da linha azul e cor da barra verde.

Após criarmos o ponteiro para a imagem e definirmos as cores que pretendemos utilizar, podemos desenhar segmentos de retas entre dois pontos utilizando a função:
imageline($im, $x1, $y1, $x2, $y2, $line_color);
onde $im é o ponteiro para o nosso gráfico, criado pela primeira rotina; $x1 e $y1 definem o ponto inicial da reta; $x2 e $y2 definem o ponto final da reta; e a variável $line_color aponta para a cor que desejamos na palete de cores que criamos com o segundo comando (neste exemplo, o azul).

O comando para acrescentar texto no nosso gráfico é a função:
 imagestring($im, $font_size, $x, $y, $text, $text_color);
onde $im é o ponteiro para o nosso gráfico; $font_size indica o tamanho da fonte de caracteres (pode variar de 1 a 5 para as fontes pre-definidas); $x e $y são as coordenadas onde o texto deve ser escrito; $text é a string de texto a ser escrito; e $text_color aponta para a cor que desejamos na palete de cores que criamos com o segundo comando (neste exemplo, o branco).

Tendo finalizado o nosso gráfico, utilizamos a rotina
imagepng($im);
para enviar a imagem pela saída padrão. Ou seja, este comando (se usado em uma página web) envia a imagem criada para o navegador do visitante.

A última rotina que devemos utilizar é:
imagedestroy($im);
que libera a memória reservada para o ponteiro pelo primeiro comando que mencionamos.

Observações importantes:
1) Para visualizar a imagem em uma página web, é necessário colocar
<img src="image.php" >
dentro do código HTML da página.

2) O arquivo image.php deve gerar a imagem desejada.

3) O arquivo image.php deve enviar ao navegador o seguinte texto, antes de enviar a imagem
 header("Content-type: image/png");
para indicar que os dados a seguir devem ser interpretados como uma imagem.

4) Na definição do espaço a ser utilizado pelo gráfico, a posição 0,0 é a do canto superior esquerdo. X na horizontal e Y na vertical.


Exemplos de gráficos que criei utilizando PHP podem ser vistos na minha página de estatísticas de banners.

quinta-feira, 25 de novembro de 2010

Utilização de Sessão em PHP

Utilização de Sessão em PHP



Uma coisa que tenho utilizado nas minhas programações em PHP é o acesso restrito a certas páginas. Como mencionei no meu tutorial sobre Campos interessantes em um banco de dados MySQL, eu gosto de colocar um campo de "level" (nível) de usuário no banco de dados de membros. Assim fica fácil liberar ou restringir de acordo com o nível do usuário.

Na programação em PHP eu utilizo a variável $_SESSION para salvar informações sobre a pessoa que está visitando o site. Se o usuário não efetuou o login, não tem informações na variável $_SESSION. Se fez o login, eu salvo informações do usuário, tipo nome completo, nível e data da última visita.

No início de cada página PHP, é colocado o seguinte código:
if(session_id() == "") session_start(); # Isto garante que a sessão seja inicializada
if(!isset($_SESSION['user']) ) {
    if(isset($_POST['user']) && isset($_POST['password'])) {
        $row['user'] = $_POST['user'];
        $password = $_POST['password'];
        $crypt_password = crypt($password, $row['user']);
        $read = user_read($row);
        if(($read == 1) && ($row['password'] == $crypt_password)) {
            $_SESSION['user_level'] = $row['user_level'];
            if($row['user_level'] > 0) {
                $_SESSION['user_is_logged_in'] = true;
                $_SESSION['user'] = $row['user'];
                $_SESSION['full_name'] = $row['full_name'];
                $_SESSION['last_date'] = $row['last_date'];
            }
            $row[last_date] = date("Y/m/d");
            user_write($row);
        }
    }
}

Todo código após a primeira linha pode ser colocado em uma rotina, inclusive em um outro arquivo para ser acessado por todas as páginas do site.

Note que após a identificação do usuário, são salvos vários dados do usuário na variável $_SESSION. Também é importante observar que primeiro é salvo na variável $_SESSION o valor da última visita, depois é atualizado para o dia de hoje, no banco de dados.

Veja também que a função user_read($row) lê os dados do usuário do banco de dados, e a função user_write($row) escreve os dados do usuário no banco de dados.

Após a execução dos códigos acima, podemos executar códigos condicionais dependendo do nível do usuário, da seguinte maneira:
if($_SESSION['user_level'] >= 1) {
   echo("Usuário autenticado!");
}

segunda-feira, 4 de outubro de 2010

Campos interessantes em um banco de dados MySQL

Campos Interessantes



Como mencionei em um post anterior eu gosto de colocar um id como primeiro campo em qualquer banco de dados. Isto facilita a indexação e a atualização (usando comando REPLACE) de cada ficha no banco de dados.

Outro campo que eu gosto de acrescentar, sempre que crio um banco de dados de pessoas (membros) é um campo de "nível" (level). Normalmente eu coloco com um inteiro, e uso como um conjunto de bits (8 ou 16), onde cada bit pode dar acesso a alguma coisa.

Normalmente crio uma área do site que todas as pessoas possam ter acesso. Uma área anônima, por assim dizer. Depois eu crio outra área que apenas as pessoas identificadas (pelo login) tem acesso. Outras áreas são restritas a gerentes e/ou pagantes, ou ao dono.

Cada área tem um bit associado no campo de nível. Se o bit estiver setado, o membro tem acesso. Se o bit estiver resetado, o membro não tem acesso. Acesso negado.

É claro que depende do caso, mas muitas vezes o acréscimo deste campo elimina a necessidade de ter outras tabelas apenas para administradores. No caso, o administrador é cadastrado normalmente, apenas com os bits de nível setados, para dar acesso a mais áreas do site.

sábado, 2 de outubro de 2010

Utilizando PHP para consultar um banco MySQL


Utilizando PHP para consultar um banco MySQL


Primeiramente uma advertência em relação aos dados de acesso ao banco de dados. Para acessar o banco de dados é necessário informar o nome do computador, do usuário, e sua senha. Minha sugestão em questão de segurança é não colocar estas informações diretamente nos programas PHP. Imagine o que acontece se o servidor web for ativado sem o interpretador PHP? Suas informações de nome e senha para acesso ao banco de dados serão vistos por todos que tentarem acessar suas páginas.

Uma forma bem mais segura é definir variáveis e coloca-las em um arquivo que fica fora da árvore do servidor web. Esse arquivo deve ser incluído (include("arquivo");) pelo PHP. Se o PHP não estiver funcionando, aparecerá nas páginas web apenas o nome das variáveis, mas não o seu conteúdo, preservando assim sua senha e seu login.

Os comandos mais comuns do PHP para acessar um banco de dados MySQL são os seguintes:

  1. $link = mysql_connect ($host_name, $user, $password) or die ("Erro ao conectar ao banco de dados.\n");
  2. mysql_select_db($banco_de_dados, $link) or die ("Erro ao selecionar banco de dados.\n");
  3. $result = mysql_query ("CREATE TABLE IF NOT EXISTS `$tabela` ('id'  bigint(20) unsigned NOT NULL auto_increment, 'login' varchar(20) default NULL, 'nome' varchar(40) default NULL, 'senha'  varchar(20) default NULL, "PRIMARY KEY  (`id`) ) ");
  4. $result = mysql_query ("SELECT * FROM $tabela WHERE id = '$id' ");
  5. $quantidade = mysql_num_rows($result);
  6. $ficha = mysql_fetch_array ($result);
  7. $result = mysql_query ("INSERT INTO $tabela VALUES ('$id', '$login', '$nome', '$senha') ", $link);
  8. $result = mysql_query ("REPLACE INTO $tabela VALUES ('$id', '$login', '$nome', '$senha') ", $link);

O primeiro comando faz a conexão com o servidor MySQL.
O segundo comando seleciona o banco de dados no servidor.
O terceiro comando é utilizado caso queira criar uma tabela no banco de dados.
O quarto comando seleciona dados do banco de dados onde o id da ficha é igual à variável $id.
O quinto comando seta a variável $quantidade igual ao número de fichas encontrado na busca
O sexto comando coloca na variável $ficha (como array de dados) todos os campos lidos da ficha de dados.
O sétimo comando cria uma nova ficha de dados no banco de dados previamente selecionado.
O oitavo comando substitui uma ficha de dados existente no banco de dados previamente selecionado.

quinta-feira, 15 de julho de 2010

PHP com formulário

Este post faz parte da série de programação em PHP.

Vamos fazer uma página de teste em PHP com uma simples contagem da quantidade de vezes que carregamos a página. Não se trata de um contador, pois se fecharmos a página e abrirmos novamente, a contagem volta ao zero. Mas é apenas para mostrar a flexibilidade dos formulários com PHP.

Crie uma página qualquer em PHP e coloque as linhas seguintes:

<html>
<head>
<title>Página de Teste</title>
</head>
<body>
<center><h2>
<?php
$conta=0;
if(isset($_REQUEST[conta])) $conta = $_REQUEST[conta];
echo("<form method=post>");
echo("<input type=submit value=soma>");
$conta++;
echo("$conta<br>);
echo("<input type=hidden name=conta value=$conta>");
echo("</form>");
?>
</h2></center>
</body>
</html>

Explicação do formulário utilizado no exemplo acima. Cria-se a página em PHP com título e corpo. O conteúdo do corpo é centralizado (utilizando o comando html <center> e </center> Depois é inicializado um trecho com programação em PHP.

O primeiro comando em PHP é o de inicializar uma variável chamada $conta, com o valor zero. Segundo comando é para recuperar o valor anterior desta mesma variável, caso tenha sido definido em carregamento anterior do formulário descrito abaixo. Para isso, é testado se existe definição da variável $_REQUEST[conta], caso positivo, seu valor é colocado na variável $conta. $_REQUEST é o nome do arranjo(array) com todas as variáveis definidas no formulário que chamou esta página.

O formulário tem um botão de submissão (submit), e um campo escondido (hidden) contendo o valor de $conta incrementado (adicionado) de um. Também ecoa o valor incrementado de $conta. Portanto na primeira vez que a página é carregada, o $conta começa em zero, e é incrementado por um antes de ser ecoado ao navegador do usuário. A cada vez que o formulário é submetido, o valor anterior é recuperado, incrementado por um e ecoado novamente. Um contador de quantas vezes o formulário foi carregado. Só não serve para contador de páginas, pois toda vez que é carregado no navegador, começa novamente no zero.

Variáveis em PHP

Este post faz parte da série de programação em PHP.

PHP é bastante flexível quanto às variáveis. Ao contrário da linguagem C, as variáveis em PHP não precisam ser definidas formalmente. Podem apenas ser inicializadas e usadas. Toda variável em PHP começa com o cifrão ($).

Veja o seguinte código:
$tmp[0] = "domingo";
$tmp[1] = "segunda";
$tmp[2] = "terça";
$tmp[3] = "quarta";
$tmp[4] = "quinta";
$tmp[5] = "sexta";
$tmp[6] = "sábado";
$tmp[7] = 2010;

Acabamos de definir um arranjo (array) de 8 elementos, onde os primeiros 7 são os dias da semana e o oitavo valor é um número;

Então podemos fazer:
$tmp1 = 3;
echo("Hoje é $tmp[$tmp1]\n");
e vamos ter na tela:
Hoje é quarta

E podemos notar que foi definido uma variável chamada $tmp1 (cujo valor é 3) e um arranjo chamado $tmp[] que contém os dias da semana e mais um número.

Esses arranjos múltiplos são utilizados bastante na consulta a bancos de dados, onde a ficha inteira pode ser transferida para um arranjo, na volta da rotina de consulta. Cada elemento no seu respectivo campo, conforme definido no banco de dados.

Veja agora um programa exemplo, para contar cada vez que envia o formulário.

PHP Funções

Este post faz parte da série de programação em PHP.

A linguagem PHP pode ser organizada em bibliotecas de funções. Para definir uma função é muito simples:

function soma($parametro1, $parametro2)
{
    $parametro3 = $parametro1 + $parametro2;
    return($parametro3);
}
$tmp1 = 4;
$tmp2 = 3;
$soma = soma($tmp1, $tmp2);

echo("$soma\n");

Isso manda um 7 para o navegador do usuário.

Veja agora o uso de variáveis na programação em PHP.

PHP Estrutura de programação

Este post faz parte da programação em PHP.

Como em C e muitas outras linguagens de programação, o PHP permite alterar o fluxo do programa fazendo comparações. Quem tem familiaridade com outra(s) linguagem(s) de programação, não deve ter dificuldade para programar em PHP.

Como comandos de fluxo podemos citar:

if( ) {
    ...
} else {
    ...
};

A comparação pode ser igualdade (==), maior que (>), menor que (<), menor ou igual (<=), maior ou igual (>=), ou diferente, não igual (!=). Podemos comparar strings, inteiros, flutuantes, quase tudo.

O PHP também tem o famoso "for" loop do C.

for($i = 0; $i < 10; $i++)
{
    ...
} e também o:
do {
    ...
} while(..);

E por último vou citar o maravilhoso switch:
switch($tmp) {
    case '1':
        echo("Caso 1\n");
        break;
    case '2':
        echo("Caso 2\n");
        break;
    default:
        echo("Outros casos\n");
        break;
}

Veja agora como utilizar funções na sua programação.

Introdução a PHP

Esta pequena introdução à linguagem PHP destina-se àqueles que já tem noções de programação, mas não conhecem o PHP, e querem aprender. Aqui dou algumas rápidas pinceladas, para que alguém possa começar a usar o PHP. Apenas lembro que o PHP tem muitas funções para diversas aplicações diferentes, e a minha sugestão é que consulte diretamente a página e documentação do PHP online, para outras funções interessantes.

PHP é uma linguagem de programação genérico, muito parecido com a linguagem C. Em ambientes Linux é possível usar diretamente na linha de comando, mas sua utilização mais frequente é integrado com o servidor web Apache.

Uma vez que o PHP esteja instalado, é muito fácil integrá-lo com as páginas web. Basta criar páginas com a extensão .php e invocar o PHP quando precisar, colocando o seguinte comando na página HTML:

<?php comandos_do_PHP ?>

Na linguagem PHP (como no HTML e em C) branco pode ser colocado em diversos lugares e não afeta o resultado. Portanto na maioria das vezes é possível fazer endentações para melhor visualização do código fonte, sem alterar as páginas geradas. Apenas em alguns casos específicos que não se pode acrescentar um espaço em branco.

Em PHP, todo comando termina com ponto-e-vírgula (;)

Um dos comandos mais usados do PHP é o echo, pois tudo que é ecoado, é enviado ao navegador cliente (se não for redirecionado).

O próprio comando echo pode ter diversos delimitadores. Por exemplo, as duas linha seguintes produzem o mesmo resultado:

echo "Primeira frase";
echo("Primeira frase");

É muito comum usar o comando echo para construir partes dinâmicas das páginas. O PHP permite variáveis dentro do echo, e arranjos de texto podem ser criados para depois serem ecoados.

Como exemplo, podemos criar uma variável (toda variável em PHP começa com $) tipo "string" e enviar isto para o navegador. As duas linhas a seguir tem o mesmo efeito de cada uma das duas acima:
$tmp = "Primeira frase";
echo("$tmp");
ou ainda
echo $tmp;

O comando sprintf (emprestado do C) também pode ser utilizado na formatação dos dados:
$tmp = sprintf("Primeira frase");
echo "$tmp";

Veja agora comandos para ajudar na estrutura de programação.