Olá,
Vamos ver o básico de expressões regulares utilizando preg_match e preg_replace, teremos os exemplos:
- Procura palavra em String
- Substitui um dado valor dentro da String
- Verifica se a variável possui números
- Verifica se a variável possui texto
<?
# String
$str = "Eu uso PHP";
# Printando o valor atual
print "Valor atual: $str <br>";
# Verificando se $str contém a palavra PHP
if( preg_match ( '/PHP/i' , $str ) )
{
print "$str contém a palavra [PHP] <br>";
}
# Substituindo PHP por PHP and PostgreSQL
$newStr = 'PHP and PostgreSQL' ;
$str = preg_replace( '/PHP/' , $newStr, $str);
# Printando o novo valor de $str por $newStr
print "Substituído por: [$str] <br>";
# Numero/Int
$num = 12453;
# Se $num possui o conjunto númerico de 0 à 9
if( preg_match( '/[0-9]/' , $num ) )
{
print "[$num] é numérico <br>";
}
# Se $str NAO possui o conjunto númerico de 0 à 9
if(! preg_match( '/[0-9]/' , $str ) )
{
print "[$str] é String <br>";
}
# Se $num NAO possui o conjunto de A à Z
if(! preg_match( '/[A-Z]/' , $num ) )
{
print "[$num] não contém letras<br>";
}
?>
Sintaxes:
preg_match( ‘/padrao/’ , $variavelAlvo) – Retorna False ou True
preg_replace( ‘/padrao/’ , ‘ novoValor ‘ , $variavelAlvo) – Retorna o novo valor substituído
O padrão deve ser sempre passado entre ‘/ /’ .
Para definir um conjunto deve passa-lo entre [ ].
Exemplo de conjunto:
[0-9] mesmo que 0123456789
[A-Z] de A à Z
[A-Za-z] de A à Z e de a À z (case sensitive)
Se deseja verificar se um endereço de e-mail possui @ o padrão seria ‘/@/’ mas isso não é suficiente para validar um endereço de e-mail pois se o endereço contiver mais de um @ seria validado normalmente.
Vimos apenas o mais básico possível sobre expressões regulares, estou aprendendo também e talvez esteja sendo no PHP o que mais me atrai no momento.
Exemplo do padrão para validação de um endereço de e-mail:
“/^[^!@#$%¨&*()0-9][a-zA-Z0-9_.]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/”;
Exemplo do padrão para validação para tags HTML:
“/<[^>]+>/is”
Pois é, a coisa é complexa, uma expressão para quem nunca curtiu as aulas de matemática pode ser bem chato haha.
Então leiam se quiserem criar algo realmente útil com RegExp.
Referências:
Boa leitura e até logo.
Olá,
Mais um exemplo de como gerar XML com PHP5, neste caso iremos utilizar a Classe nativa do PHP5 o XMLWriter para gerar a saída XML formatada.
Este exemplo, sem dúvidas é bem mais simples que o anterior que utiliza o DOM ou SimpleXML.
Vejamos o código:
<?
# Instancia do objeto XMLWriter
$xml = new XMLWriter;
# Cria memoria para armazenar a saida
$xml->openMemory();
# Inicia o cabeçalho do documento XML
$xml->startDocument( '1.0' , 'iso-8859-1' );
# Adiciona/Inicia um Elemento / Nó Pai <item>
$xml->startElement("item");
# Adiciona um Nó Filho <quantidade> e valor 8
$xml->writeElement("quantidade", 8);
# Adiciona um Nó Filho <preco> e valor 110
$xml->writeElement("preco", 110);
# Finaliza o Nó Pai / Elemento <Item>
$xml->endElement();
# Configura a saida do conteúdo para o formato XML
header( 'Content-type: text/xml' );
# Imprime os dados armazenados
print $xml->outputMemory(true);
# Salvando o arquivo em disco
# retorna erro se o header foi definido
# retorna erro se outputMemory já foi chamado
$file = fopen('foo.xml','w+');
fwrite($file,$xml->outputMemory(true));
fclose($file);
?>
Obs: A chamada ao método $xml->outputMemory() descarrega os dados da memória então você só consegue chama-lo uma vez, logo, para salvar o arquivo você não pode ter chamado este método ainda.
Para salvar o arquivo corretamente você deve comentar as linhas abaixo:
# header( ‘Content-type: text/xml’ );
# print $xml->outputMemory(true);
Comente as linhas abaixo para apenas exibir o XML no browser:
# $file = fopen(‘foo.xml’,'w+’);
# fwrite($file,$xml->outputMemory(true));
# fclose($file);
Referência: http://br.php.net/manual/pt_BR/book.xmlwriter.php
Por enquanto é isso galera, bom divertimento e até mais.
Arquivado em: CSS, PHP, PostgreSql | Tags: galeria de fotos, galeria lightbox, galeria php, lightbox
Olá,
Estou disponibilizando uma simples galeria de fotos.
Recursos:
- Post’s (editável)
- Galeria de Fotos Lightbox (gerenciável)
- Painel Admin (banco)
- Adiciona e remove fotos
Utiliza:
- PHP 5
- PostgreSQL / MySql
- Lightbox
- CSS e HTML
Configuração:
- arquivo .php para informar os dados de acesso ao banco
- criar tabelas do banco
Personalização:
- através de CSS
Design:
- Básico (nenhum)
Funcionalidade:
- Razoável
Limitações na versão padrão:
- mono usuário
- sem design
- código mal identado em alguns arquivos (devido a uma compactação, fiquei com preguiça de arrumar, baixe se quiser)
Link demo: www.clareslab.com.br/gallery
Link Adm: www.clareslab.com.br/gallery/admin
User: demo
Pass: demo
Galera, só peço pra não zoar colocando fotos inadequadas (putaria mesmo) e também nomes de pessoas, já sabem a nossa regrinha, se zoar eu tenho que remover… Espero que respeitem como fizeram no exemplo anterior do lightbox.
Agradeço por isso.
Download Free da versão PostgreSql : www.clareslab.com.br/learn/mygallery.rar
Versão MySql R$ 50,00 : http://clareslab.com.br/mysqlgallery
Telas:

Página Pública

Post Página Pública

Painel Admin

Galeria -Painel Admin

Post Painel Admin
Configurando o programinha:
- Abra o arquivo class/Conexao.class.php
- Altere os dados de acesso ao PostgreSql ($host, $user e $pswd)
- Abra o arquivo includes/config.php altere os dados abaixo:
$homeDB : Nome do banco postgresql
$baseURL : endereço do programa (ex. http://localhost/galeria)
$fotodir : diretório de fotos (ex: c:\fotos ou /home/foo/fotos)
Crie as tabelas no banco PostgreSql
- O script para criar as tabelas está em src/tables.sql
Aproveite para alterar o usuário padrão do painel admin no arquivo src/tables.sql na linha :
- insert into usuarios (usuario,senha) values (‘demo’,'demo’)
O programa não tem interface atraente e esse não é o objetivo, esse programa foi um rascunho de um projetinho que eu havia feito à muito tempo, não teremos atualizações dele. Percebi que o pessoal tem baixado bastante o exemplo anterior do lightbox e achei lega disponibilizar esse rascunho que não está dificil de customizar.
Dica: Altere a interface utilizando CSS, existem tags HTML por todo o código facilitando customização
Ex:
Para colocar uma imagem de topo da página publica
- Abra o arquivo css/style.css e altere o caminho da imagem em e as propriedades do seletor #headerp
Para colocar uma imagem de topo do painel admin altere as propriedades do seletor #header
Para o rodapé: altere as propriedades de #footer
Galera não terei como ajudar em customizações de Layout, blz ?
Então é isso, veja o demo antes de baixar, assim você não se decepciona.
Quero pedir um favor a vocês, quem conseguir configurar e for utilizar a galeria por favor manda o link para mim, assim eu coloco aqui, servirá para o pessoal ver como pode ser customizado o layout. Irei criar uma lista aqui com os endereços, ok;
1 - http://www.cerradodigital.com.br/galeria
Abraços,
Arquivado em: PHP
PARTE I
Olá,
Resolvi escrever algo sobre classes, objetos e banco de dados com PHP 5.
A idéia geral é mostrar o seguinte:
* Classes e Métodos simples com PHP5.
* Classes e Metódos para transações com banco de dados PostgreSql.
* Fábrica de objetos, veremos como tornar mais simples e rápido o uso das classes.
* Classes genéricas, vamos utilizar uma mesma classe para transações com bancos e tabelas distintas.
Será um desafio bacana e acredito ser muito útil para quem ainda não sabe oop ao menos o básico, claro.
Para isso precisamos começar com o básico sobre as classes, criaremos métodos bem simples no intuito de fazer todos entenderem o conceito antes de escrevermos algo realmente aplicável.
Então iremos separar as coisas e na medida em que vão compreendendo vamos avançando ok …
Existe um Post sobre o básico de classes com PHP5, leiam aqui antes de prosseguir.
Supondo que você já leu o post indicado vamos criar uma classe simples.
Vamos para a PARTE I
A classe Usuario, arquivo nomeado como usuario.class.php dentro do diretório classes/ .
< ?
class Usuario
{
# declarando variavel publica nome
public $nome;
# declarando variavel protected senha
protected $senha;
# construtor da classe [vazio]
public function __construct(){}
# Metodo seta nome de usuario
function setNome($nome)
{
$this->nome = $nome;
}
# Metodo retorna o nome de usuario
public function getNome()
{
return $this->nome;
}
# Metodo que seta a senha de usuario
public function setSenha($senha)
{
# setando a variavel senha
$this->senha = md5($senha);
}
# Metodo retorna a senha criptografada com MD5
public function getSenha()
{
return $this->senha;
}
}
?>
Iremos guardar todas as classes que criarmos no diretório classes.
Agora que temos a classe Usuario vamos ver como instanciar os objetos da classe e chamar seus métodos.
Escrevemos agora uma arquivo qualquer e incluiremos a classe Usuario nele.
Obs: Para os arquivos que irão instanciar os objetos você poderá dar o nome que desejar mas respeite os nomes dados as classes para não termos problemas.
Chamarei este arquivo de index.php (dê o nome que desejar).
< ?
# Incluindo a classe usuario
include 'classes/usuario.class.php';
# Instanciando o objeto usuario
$usuario = new Usuario();
# Setando o nome [parametro nome]
$usuario->setNome("Rafael Clares");
# Setando a senha [parametro senha]
$usuario->setSenha("123senha");
# Imprimindo o nome
print $usuario->getNome();
# Imprimindo a senha
print $usuario->getSenha();
# Destruindo os objetos
unset($usuario);
?>
Agora basta testar em seu navegador
http://localhost/pastadoprojeto/index.php
Na PARTE II vamos implementar os médotos de acesso ao Banco de dados, leiam o post sobre a classe conexão em:
http://clares.wordpress.com/2008/07/09/php-postgresql-conexao-com-banco-de-dados/
Iremos utiliza-la, porém não devo explicar novamente como ela funciona, claro, apenas se surgirem dúvidas.
Por enquanto é isso, estou ansioso para passarmos para próxima etapa.
Abraços.
Rafael Clares
Utilizando a biblioteca JQuery para criar requisições HTTP com PHP
Ia-e galerinha das noites mal-dormidas!!!
Se houve muito falar de Ajax, é ali e acolá…poem ajax no formulário, na foto, no microondas … é bonito mesmo mas é bom saber onde usar, lembro que quando comecei a experimentar a técnica meus programas em PHP tinham no máximo 5 linhas cada arquivo e já os arquivos JScript…. meo deos, milhares de linhas em JScript, dai o cara diz que não funcionou no navegador VelejePlus (rs) dele… que chato!
Bem, eu utilizo a tecnica e acredito eu que com moderação, isso é importante!
Vamos ver um caso típico de uso de Ajax, no meu caso, lembrando que a idéia do Ajax também é a utilização de XML para transportar os dados, por isso não denomino o que eu faço como sendo Ajax pois não utilizaremos XML, ao menos neste caso, mas chega de lorotas!
Escolhi um caso simples, porém interessante para mostrar à vocês. Vamos criar um formulário HTML para envio de dados via POST para o PHP utilizando requisição Http ( ou ajax se preferir) onde o envio dos dados será verificada e deverá retornar um Array e caso não tenham sido enviados retornará uma mensagem/alerta. No geral parecerá com um tipo de validação do formulário em Ajax, mas a idéia é que vocês implementem a partir disso.
O velho e bom HTML vem aí !!!
<html>
<head>
<title>PHP e JQuery</title>
<!– Inclui o Jquery –>
<script src=”jquery-1.2.6.js“ type=”text/javascript“></script>
<!– Inclui o Actions que contém os comando escritos por nós –>
<script src=”actions.js“ type=”text/javascript“></script>
<!– Inclui o CSS para dar uma corzinha –>
<link href=”style.css“ type=”text/css“ rel=”stylesheet” />
</head>
<body>
<form name=”f“ id=”f“ onSubmit=”return false“>
<label>Nome:</label>
<input type=”text“ name=”nome“ id=”nome“>
<label>Mail:</label>
<input type=”text“ name=”mail“ id=”mail“>
<br><br>
<button id=”btn1“>Consulta</button>
</form>
<p> </p>
<!–Div utilizada para exibir as mensagens Ajax –>
<div id=”d“></div>
</body>
</html>
Como podem ver é um arquivo HTML puro e simples, notem que não há no formulário o Method e Action responsáveis por informar como e para onde os dados serão enviados, isso nós definiremos no JScript a seguir, note também que não há nenhum evento no botão Consulta, também será definido no JS.
No inicio do HTML existe a chamada ao arquivo JQuery que é a bibilioteca que utilizaremos para instanciar o Ajax e também laguns eventos e efeitos, ao final do post informarei o link dos docs. Temos ainda a chamada ao arquivo Actions.js que possui as chamadas à eventos e efeitos do Jquery assim como a instancia do Ajax, o arquivo JQuery nos não mexeremos, apenas fazemos o download e incluimos no programa, já o Actions nós escrevemos para utilizar os recursos do JQuery, como poderão ver logo.
Ok, temos apenas um formulário com alguns arquivos inclusos, precisamos agora de um arquivo PHP que receberá os dados do fomulário e devolverá uma mensagem que deverá ser tratada pelo JS e exibida na tela. Para tratar os dados utilizaremos o arquivo Actions(que escrevemos), o arquivo PHP que receberá os dados se chamará data.php e vamos ve-lo agora.
O arquivo Data.php
<?
# Evita o armazenamento em Cache
@header(“Content-Type: text/html; charset=iso-8859-1″);
@header(“Cache-Control: no-cache, must-revalidate“);
@header(“Expires: Mon, 26 Jul 1997 05:00:00 GMT“);
# Verifica se os dados foram enviados do form e retira o espaco em branco (trim)
if(trim($_POST['mail']) != “” && trim($_POST['nome']) != “”)
{
# Adiciona os valores vindos do form em um Array
$arr['usuario']['nome'] = $_POST['nome'];
$arr['usuario']['mail'] = $_POST['mail'];
# Imprime o Array
echo “<pre>”;
print_r($arr);
echo “</pre>”;
# Neste caso poderia ser um insert ou Validação no DB
}
else{
# se os dados nao foram enviados
echo 1; }
?>
Certo, vamos entender isso!
As linhas que contém o header servem para evitar que os dados fiquem em cache, como ao submiter os dados não haverá mudança de página e esse é o propósito do programa, evitar que o envio dependa dos dados serem enviados a outra página (POST), assim podemos mudar os valores do form tranquilamente e eles não serão armazenados no cache.
A linha que contem o IF está verificando se dados foram submetidos via post dos campos nome e email, caso sim ele remove os espaços contidos nas variáveis com o TRIM, em seguida monta um Array e armazena os dados vindos no form, na linha abaixo o Print_r printa o Array na tela. Claro que ao, digamos, validar as informações (neste caso foi o minimo possível) poderiamos enviar os dados (no caso nome e email vindo do form) para um BD ou qualquer outra coisa, mas fizemos isso apenas para demonstrar com o minimo de programação o resultado que esperamos.
No caso o ELSE, quer dizer que nenhum dado foi submetido do formulário e por isso nós retornamos uma mensagem o valor 1 que no JS será substituido pela mensagem “Preencha os campos”. Agora, veremos o arquivo que faz tudo acontecer dinâmicamente e que com certeza é o único chato de explicar caso você ainda não tenha tido nenhum contato com JQuery!
Só para resumir a grosso modo o que é o JQuery (para quem não sabe), é o seguinte… ele realiza com comandos pequenos e funções o que teriamos que fazer em dezenas de linhas utilizando o JS puro.
Por ex:
Para adicionar uma classe CSS de um elemento HTML usando JS puro teriamos mais ou menos o que segue abaixo…
obj = document.getElementById(“form1″);
obj.className = ‘ClasseCSS’;
O arquivo PHP está bem pequeno e não faz tanta coisa em nosso exemplo, mas servirá bem para lhes dar uma direção.
Para fazermos a mesma coisa com o JQuery é necessário apenas:
$(“#form1″).addClass(“ClasseCSS”)
Um outro exemplo que até usaremos no post é o bloco utilizado para recuperar dados do formulário
Em JS puro ficaria assim:
nome = document.form1.nome.value;
Com JQuery fica assim:
nome = $(‘#nome’).val()
Entendeu mais ou menos? Agora imagine algo como uma animação, pois é … o JQuery faz com uma única linha!
Não deixe de ver os docs senão você não fará muita coisa ou nada!
O arquivo Actions.js (prepare-se para ler os comentários do código)
// Mesmo que window.onload
$(document).ready(function ()
{
// cria um evento no click no botao btn1
$(“#btn1″).click(function(){sendform()})
})
// Funcao que recupera e envia os dados para o data.php via post
function sendform()
{
// recupera os dados do form
fnome = $(‘#nome‘).val()
fmail = $(‘#mail‘).val()
// instancia o ajax via post informando o destino no caso data.php
$.post(“data.php“,
// envia os dados do form nas variaveis nome e mail
{nome: fnome, mail: fmail},
// recupera as informacoes vindas do data.php
function(data)
{
// se retornou 1 entao os dados nao foram enviados
if(data == 1)
{
// remove a classe css sucess da div
$(“#d“).removeClass(“sucess“)
// adiciona a classe error da div
$(“#d“).addClass(“error“)
// insere na div o conteudo/mensagem de erro
$(“#d“).html(“Preencha todos os campos!“)
}
else{
// se nao retornou 1 entao os dados foram enviados
// remove a classe error da div
$(“#d“).removeClass(“error“)
// adiciona a classe sucess na div
$(“#d“).addClass(“sucess“)
// insere o conteudo vindo do data.php na div
$(“#d“).html(data);
}
// torna a div invisivel
$(“#d“).css(“display“,”none“);
// torna a div visivel usando o efeito show com a slow de parametro
$(“#d“).show(“slow“);
}
)
// efeito show na div
$(“#d“).show(“slow“);
}
É amiguinhos, viram ai ? tem bastante JS mas o resultado é bacana, bem acho que deu para entender por que se deve utilizar isso com moderação… Talvez para não ficar 50% do projeto programando em JS e olhem que utilizamos o Jquery senão essas linhas de JS seriam no minimo o dobro do que foram apresentadas.
Bom, agora você que tem o raciocinio aguçado me pergunta:
- Por que não validar os campos vazios no JS sem a necessidade de enviar ao data.php ?
E te respondo, a idéia não é validar e sim implentar algo dentro do IF, neste caso usamos apenas a atribuição dos valores do form em um Array mas como já disse poderia ser um UPDATE, INSERT, DELETE no seu banco de dados, basta implementar algo a partir daí!
Links:
Abraços,
Arquivado em: CSS, PHP | Tags: galeria de fotos, lightbox, miniaturas, php thumb, upload
Galeria de fotos Lightbox + Upload de fotos + Thumb + Painel Admin
Olá,
Resolvi dar uma revisada no Post sobre Lightbox, nessa revisão nós veremos:
- A Galeria de Fotos com Efeito Lightbox
- Fazendo Upload de multíplos arquivos/fotos para o servidor
- Simulação da autênticação de usuário para acesso à àrea admin (upload)
Recursos que utilizaremos:
- A classe thumbnail para gerar miniaturas(thumbs) com o PHP5
- Upload com tratamento de erros e configurações permitidas de envio
- Uso de Sessão no login (apenas simulação, funcional porém sem BD)
- Leitura de diretório para exibir as imagens enviadas na galeria
Tá bom né? Vamu arripiá agora!!!
Vou colocar aqui algumas considerações “iniciais” antes que me enforquem…
- Quanto ao login, não utilizaremos banco de dados para não perdermos o foco, esse login será feito no PHP mesmo apenas para simular a autenticação e utilizarmos a Session do PHP para transitarmos entre a Galeria e o Admin onde o upload é feito, farei isso para dar uma noção bem simples, você não quer um formulário para upload acessível para todos na sua galeria, quer? pois é… Então, por favor não vamos, por enquanto, misturar os assuntos ok… ok
- Outra coisa que irei responder antecipamente… Sim, dá para colocar a descrição nas imagens mas é preciso armazenar essa descrição em algum lugar (um BD seria bom né, mas não neste post eu também durmo sabia?).
Então por enquanto nossa Galeria não terá descrição nas fotos, mas acredite, é tão simples como, colocar descrição em fotos ha-ha.
- Eu separei o código em vários arquivos para que eu possa explicar o que cada trecho faz sem deixar tudo confuso e cheio de coisas umas em cima das outras, então, teremos alguns includes pelo código, não que sejam obrigatório, só achei que seria mais fácil explicar.
- Não irei disponibilizar para download por enquanto. Ah mas pq? Estou acostumado a baixar seus pacotinhos..
Pois é boneco, alguns baixam sem nem ao menos ler o Post depois ficam perguntando coisas que estão no Post, no geral quando não funciona, pq se funciona o brother não dá nem um “alô jack” aqui para os colegas saberem que funcionou… blah blah uhahuaha
Vamo nessa garotada, tomem seus tódinhos …
O arquivo index.php (Exibe a Galeria) – Explicarei os arquivos na ordem em que aparecem nos includes
<?
# Inicia uma Sessao PHP
@session_start();
?>
<html>
<head>
<title>Galeria</title>
<!– O arquivo lightbox.css faz parte da biblioteca e
é necessária sua inclusão–>
<link rel=”stylesheet” href=”css/lightbox.css” type=”text/css” media=”screen” />
<link rel=”stylesheet“ href=”css/galeria.css” type=”text/css” media=”screen” />
<!– incluindo os arquivos da biblioteca LightBox–>
<script type=”text/javascript” src=”js/prototype.js“></script>
<script type=”text/javascript” src=”js/scriptaculous.js?load=effects“></script>
<script type=”text/javascript” src=”js/lightbox.js“></script>
</head>
<body>
<p> </p>
<p><a href=”enviar.php”>Enviar fotos para Galeria</a></p>
<p> </p>
<hr>
<!– Incluindo o programa que le o diretorio de fotos –>
<? include ‘lerdir.php’; ?>
</body>
</html>
Então acima temos um arquivo quase que 100% HTML exceto pelo start da sessão e o include do arquivo lerdir.php no fim da página.
No HTML de forma geral temos as chamadas ao arquivos CSS e Javascript necessário para exbir as fotos com o efeito Lightbox e em PHP temos como principal o include do lerdir.php que será responsável por ler o conteúdo do diretório e recuperar os nomes das imagens contidas nele, o nome das imagens servirá para colocarmos na Tag IMG do HTML exibindo assim as fotos que são enviadas por upload ou simplesmente colocadas dentro do diretório.
Fazendo Upload nós não precisamos nos conectar por FTP para enviar as fotos para o diretório da Galeria.
Como eu falei explicarei os arquivos que vierem surgindo nos includes, nesse momento temos o LerDir.php.
O Arquivo LerDir.php (está sendo chamado no index.php)
<?
# 1 Diretorio que guardara as fotos
$dir = “fotos”;
# Extensoes permitidas na exibicao da galeria
$exts = array(‘jpg‘,’png‘,’jpeg‘,’gif’,’bmp‘);
if (is_dir($dir)) {
if ($d = opendir($dir))
{
while (($file = readdir($d)) !== false)
{
if (filetype($dir.’/’.$file) == ‘file’)
{
# Recupera a extensao do arquivo
$extensao = explode(“.”, $file);
for($i=0; $i<=count($exts)-1; $i++)
{
# Verifica se a extensa é permita (esta no array exts)
if($extensao[1] == $exts[$i])
{
# Criando o link da imagem pra o lightbox e exibindo a thumb
echo “<a href=\”$dir/{$file}\” rel=\”lightbox[roadtrip]\”>“;
echo “<img src=\”thumb.php?img=$dir/{$file}\” class=\”thumb\”></a>“;
}
} # end for
} # filetype
} # while
closedir($d); // encerra a leitura do diretorio
} # end opendir
}
?>
Resumidamente esse arquivo apenas vê o que tem dentro do diretório fotos verifica qual sua extensao e confronta com o array exts que possui ali as extensoes que queremos que sejam exibidas na galeria.
Bem, com isso nós já conseguimos exibir as fotos contidas na pasta fotos, vamos ver como envia-las para lá.
Mas perceba que onde ele insere a imagem (IMG SRC) estamos passando por GET o caminho das fotos para o thumb.php que se encarregará de gerar as miniaturas, além disso estamos colocando os atributos requeridos pelo lightbox que neste caso é o atributo REL , então…
Seguiremos com o arquivo Thumbs.php
<?php
# Inclui a classe thumbnail
include_once(‘thumbnail.inc.php‘);
# Cria nova thumb da imagem recebida por get
$thumb = new Thumbnail($_GET['img']);
# Seta as dimensoes da thumb altura e largura
$thumb->resize(120,120);
# Exibe/retorna a imagem em miniatura
$thumb->show();
exit;
?>
Como podem ver é algo também simples, isso pq a classe thumbnail se encarrega de gerar a miniatura com os parametros passados nos métodos. A classe thumbnail é muito poderosa e cheia de recursos que não abordaremos por agora, entre eles estão marca dagua, reflexo, muita coisa… colocarei o link da documentação ao fim do post.
Bem, então temos o arquivo index.php que chama o lerdir.php encarregado de ler o diretório que por sua vez passa os nomes das fotos contidas no diretório para o arquivo thumb.php que se encarrega de passar os dados para a classe thumbnail responsável por gerar as miniaturas. (leia denovo rs).
Assim, temos as imagens existentes no diretório fotos sendo exibidas na tela, precisamos agora enviar fotos para o diretório, faremos isso através do arquivo enviar.php que possui uma validação sem vergonha mas que servirá bem para vocês implementarem as melhorias que acharem cabíveis.
O Arquivo Enviar.php
<!– incluindo Login de usuario –>
<? include ‘login.php’; ?>
<html>
<head>
<title>Galeria</title>
<link rel=”stylesheet“ href=”css/galeria.css“ type=”text/css“ media=”screen” />
</head>
<body>
<?
# 1 Se a Sessao Logado nao existir exibe o formulario de login
if(!isset($_SESSION['logado']))
{
?>
<form name=”login” method=”post”>
<label>Password:</label>
<input type=”password“ name=”senha“>
<input type=”submit“ value=”login“>
</form>
<p> </p>
<p><a href=”index.php”>Visitar Galeria</a></p>
<?
exit;
# 2 Se a sessao existir exibe o formulario de upload
}else{
?>
<p>
<a href=”index.php“>Visitar Galeria</a> |
<a href=”enviar.php?logout=true“>Logout</a>
</p>
<hr>
<p> </p>
<form action=”" method=”post“ enctype=”multipart/form-data“>
<input type=”file“ name=”fotos[]” /><Br>
<input type=”file“ name=”fotos[]” /><br>
<input type=”file“ name=”fotos[]” /><br>
<input type=”file“ name=”fotos[]” /><br><br>
<input type=”submit“ value=”enviar” />
</form>
<p> </p>
<!– 3 Incluindo o programa que faz o upload das imagens –>
<? include ‘upload.php‘; ?>
<p> </p>
<? }?>
</body>
</html>
Talvez esse seja o arquivo mais feio pq nele possui HTML e PHP misturados o que não é tão legal mas que em alguns casos não dá para escapar, até numerei os comentários para tentar facilitar a explanação, acontece o seguinte, a primeira linha do arquivo como podem ver chama o programa Login.php que é responsável pela validação aqui chamada de sem vergonha por não ser feita através do BD, bem isso já foi comentado, o programa Login.php verifica se existe uma sessão ativa, ou seja, se há a validação que neste caso é apenas uma senha verificada no próprio PHP. Seguindo isso o que acontece é que no programa login é criada a sessão chamada SESSION['logado'] caso a senha enviada esteja correta, então caso a sessão não tenha sido criada é exibido o formulário de login e se houve a validação, ou seja, a senha esteja correta o que é exibido é o formulário de upload das imagens, isso ocorre após o comentário 2 onde é exibido também o link para a galeria e outro para o logout que nada mais é que a distruição da sessão criada fazendo então com que o formulário de login apareça novamente. Ainda nesse raciocinio, caso a sessão exista é feita a chamada do programa Upload.php logo no comentário 3, esse programa irá fazer a validação e upload da imagem, lembrando que para isso deve existir a sessão senão a chamada ao programa upload passa à não existir, ou seja, só há o incluide do Upload.php caso a sessão exista e isso está claro, na linha if(!isset($_SESSION['logado'])) ele diz que se não houver a sessão deve ser exibido o formulário de login e na linha após o ELSE diz senão exiba o formulário de upload e inclua o programa upload.php. Resumidamente o formulário de upload e o programa upload só existe se existir a sessão. Para vermos como ocorre a validação da senha no programa Login.php veremos agora esse arquivo.
O arquivo Login.php
<?
@session_start();
# Simulando Login de usuario
$senha = “1234″;
if(isset($_POST['senha']) && $_POST['senha'] == “$senha”)
{
# Cria uma sessao se a senha estiver correta
$_SESSION['logado'] = true;
}
# Verifica se logout foi solicitato
if(isset($_GET['logout']) && $_GET['logout'] == “true”)
{
# Destroi a sessao
@ session_destroy();
}
?>
O programa acima é chamado no inicio do programa Enviar.php, isso ocorre pq para que seja exibido o formulário de upload deve haver uma sessão validada, caso contrário o que será exibido será o formulário de login. A idéia é que vocês implementem nesse arquivo login.php a validação com BD, basta alterar apenas esse arquivo para que isso ocorra. Explicando o programa login, no inicio é feita a chamada ao session_start o que nos permite criar sessões, em seguida estamos setando a senha que será confrontada com a que vem do formulário de login, ou seja, o valor vindo do formulário deve, neste caso, ser 1234 para que haja a validação. A linha if(isset($_POST['senha']) && $_POST['senha'] == “$senha”) diz se vier dados do campo senha do formulário e esse valor for igual ao valor da variável $senha então é criada a sessão chamada $_SESSION['logado']. Já na linha if(isset($_GET['logout']) && $_GET['logout'] == “true”) ela diz se vier por GET a variável logout e ela tiver seu valor igual à true então destrua a sessão, o que nos fará voltar ao formulário de login. Como esse programa é chamado no inicio do programa Enviar.php a validação tanto do login quanto do logout será a primeira coisa à ocorrer antes que qualquer formulário seja exibido.
Passando da chamada ao programa Login.php que ocorre no inicio do Enviar.php temos ainda no final do mesmo arquivo a chamada ao programa Upload que só será incluso caso a validação exista, mas isso você está careca de saber…
O arquivo Upload.php
Sem dúvida um dos arquivos mais importantes, ele é responsável por tratar as imagens vindas do formulário e tive toda paciência do mundo ao escrever esse programa para que ficasse simples de explicar, porém vale se atentar aos comentários pois eles por si só já explicam o que ocorre durante todos os blocos do programa upload.
vamos ver:
<?php
# Setando as configurações permitidas
$larguraMax = 2000; // largura em pixels
$alturaMax = 2000; // altura em pixels
$tamanhoMax = 1500000; // tamanho em bytes
$formatos = “pjpeg|jpeg|png|gif|bmp|x-png|jpg”; // extensoes permitidas
# Criando as mensagens de erro
$erro[] = “Tamanho do arquivo maior que o permitido [".($tamanhoMax/1000)." kb].”;
$erro[] = “A Largura da imagem maior que o permitido.”;
$erro[] = “A Altura da imagem maior que o permitido.”;
$erro[] = “O Arquivo já existe no diretório.”;
$erro[] = “Formato do arquivo não permitido ou inválido.”;
if(isset($_FILES["fotos"]))
{
foreach ($_FILES["fotos"]["name"] as $key => $name)
{
$arquivo = $_FILES["fotos"];
$dimensoes = getimagesize($arquivo["tmp_name"][$key]);
$nomefoto = strtolower($_FILES["fotos"]["name"][$key]);
#Verificando se a imagem foi enviada
if($arquivo["name"][$key] != “”)
{
# Retirando espacos no nome do arquivo
$espacos = explode(” “,$nomefoto);
if(count($espacos) > 1)
{
$nomefoto = strtolower(ereg_replace(‘ ‘, ‘_’, $nomefoto));
}
# Se o Tamanho do arquivo é permitido
if($arquivo["size"][$key] > $tamanhoMax)
{
# Adiciona o erro no array erros[]
$erros[] = “[$nomefoto] $erro[0]“;
}
# Se a Largura do arquivo é permitida
if($dimensoes[0] > $larguraMax)
{
$erros[] = “[$nomefoto] $erro[1]“;
}
# Se a Altura do arquivo é permitida
if($dimensoes[1] > $alturaMax)
{
$erros[] = “[$nomefoto] $erro[2]“;
}
# Verifica se o arquivo ja existe no diretorio
if(file_exists(“fotos/$nomefoto“))
{
$erros[] = “[$nomefoto] $erro[3]“;
}
# Verifica se extensao é pertida
if(!eregi(“^image\/($formatos)$”, $arquivo["type"][$key]))
{
$erros[] = “[$nomefoto] $erro[4]“.$arquivo["type"][$key];
}
# O array erros nao tiver nenhum indice o upload é permitido/realizado
if(!isset($erros))
{
$imagem_dir = “fotos/”.$nomefoto;
move_uploaded_file($_FILES["fotos"]["tmp_name"][$key], $imagem_dir);
$sucesso[] = “[$nomefoto] upload com sucesso.”;
}
}
}
# Verifica se existem erros no array
if(isset($erros))
{
echo “<ul class=’erro’>”;
foreach($erros as $erro)
{
echo “<p><span>$erro</span></p>”;
}
echo “</ul>”;
}
# Verifica quais imagens tiveram sucesso no upload
if(isset($sucesso))
{
echo “<ul class=’sucesso’>”;
foreach($sucesso as $up)
{
echo “<p><span>$up</span></p>”;
}
echo “</ul>”;
}
}
?>
Importante:
Na linha $imagem_dir = “fotos/”.$nomefoto; estamos dizendo que a imagem deverá ser enviada para o diretório “fotos” portanto é necessário que você dê permissão de gravação à esse diretório caso contrário a imagem não será enviada.
È isso ai, acima o arquivo que irá validar as imagens e fazer o upload. Como podem ver as primeiras linhas possui as mensagens de erro e também as configurações relacionadas à imagem como largura, altura, tamanho e extensão permitda para upload. Esse montão de IF após receber a imagem vinda do formulário irá checar se ela se adequa as configurações permitidas e somente se estiver de acordo é que será enviada ao servido/diretório.
Acredito que implementando pouca coisa como layout e o login por BD já dá para você ter sua galeria, agora você pode colocar aí uma senha complexa e usar para uma galeria que não esteja tão exposta aos maliciosos haha…
Alguns links sobre o que abordamos:
- A Classe Thumbnail
- O Lightbox
- Upload com PHP
- Sessão PHP
- A leitura de diretorios
O link do Exemplo proposto
- veja aqui (A senha do painel admin é 1234)
- Download do fonte aqui
Obs: Limitei o tamanho dos uploads à 10kb no exemplo para que não sobrecarregue meu host, afinal não foi dessa vez que abordamos a exlusão das imagens, não é ? Na próxima revisão teremos o login com BD e a exclusão das fotos via painel admin. Outra coisa, por gentileza a minha idéia é compartilhar com vocês o que tenho visto no meu dia-a-dia então não envie imagens desagradáveis para que eu não tenha que tirar do ar o exemplo deixando as pessoas sérias perderem com isso. Procure ler o Post antes de perguntar.
Muito obrigado e espero ter ajudado.
Se desejar utilizar banco de dados veja : http://clares.wordpress.com/2009/09/28/galeria-de-fotos-admin-lightbox-php-postgresql/
Rafael Clares,
Editores PHP
Olá,
Estive tentando imaginar que editor o pessoal tem utilizado para pequenos programas ou até mesmo para manutenção de programas já existentes em PHP, decidi a partir disso colocar aqui alguns editores que achei interessantes durante minha longa e árdua busca por editores eficientes, leves, funcionais, produtivos e claro, agradáveis.
Então segue os que uso com frequência:
1 – Notepad++ (free)
2 – PHPDesigner (pago)
3 – PHPEclipse (free)
3 – KomodoEdit (free)
O PHPDesigner e PHPEclipse acho mais indicado para projetos maiores, são IDE’s muito completas e cheias de recursos como Debug, Servidor Web, Execução do código em browser agregado à eles, customização, documentação do código e etc… Não achei muito pesados para rodar (minha máquina HP Turion X2 e 1GB Ram).
O Komodo Edit é bem leve e é um ambiente muito agradável para programar ideal para pequenos programas ou manutenção de códigos existentes.
O Notepad++ sem dúvida alguma é meu editor padrão para PHP, Javascript, CSS e até HTML. Eu o utilizo para pequenos programas, manutenção e as vezes acabo não percebendo que estou começando um sistema inteiro no Notepad++, claro que dá para fazer mas o gerenciamento dos arquivos do projeto conforme vão aumentando vai ficando dificil por não suportar projetos, porém é o editor com mais recursos para texto que já vi, possui também um FTP light, se você ainda não o usou fica ai a dica.
Notepad++
Komodo Edit
PHP Designer
PHPEclipse
Obs:
- Nesse Post não abordo a instalação do PHPEclipse, por gentileza procure no fórum do Eclipse.
- Não me pergunte se paguei pelo PHP Designer (prefiro não comentar).
- Entre o PHPEclipse e PHP Designer, prefiro o segundo e ele já vem com o PHPDocumentor.
- Em todos eles você pode escrever PHP, Javascript, CSS, XML e etc , no Notepad++ a gama é maior entre eles Bash Script, Ruby e mais…
Boa sorte !!!
Rafael Clares,
Mais uma Galeria de Fotos Perfeita e simples de implementar
Opa,
vamos criar uma galeria estática à principio, a partir disso vocês podem implementar uma galeria dinâmica com php thumbs e lightbox.
Na minha opnião é a mais bonita galeria em CSS que tenho visto, muito simples de implementa-la também.
A galeria consiste em efeitos criados por classes CSS e JS.
A idéia é o seguinte:
Percebam que cada foto tem um estilo difrente, esses são os estilos suportados pelo script,
Um trecho do código html que é assim:
<!– cabeçalho [head,script,css...] –>
<div class=”photo sample1“>
<a href=”#”><span></span><img src=”images/9.jpg” alt=”image” /></a>
</div>
<div class=”photo sample2“>
<a href=”#”><span></span><img src=”images/13.jpg” alt=”image” /></a>
</div>
Como podem perceber para cada efeito dos que são apresentados existe uma classe CSS, elas vão de sample1 até sample14, cada div recebe 2 classes CSS, uma padrão que é classe photo e a sample de sua escolha.
Uma Div para cada foto, a idéia de apresentar uma galeria com todos os efeitos é para que vocês possam escolher a sua sample favorita e aplicar em todas as div’s ou não… depende dos padrões que adotarem, além disso podem criar uma galeria com cada efeito…
Não vou me aprofundar nas questões do CSS porque vocês irão ver que nada mais é que o posicionamento das imagens que servem de moldura para as fotos, cada classe sample possui uma imagem diferente como moldura(background da sua foto).
Segue o link do exemplo:
Vai lá filho, clique aqui e divirta-se
Vão querer o download do pacote né?
Tudo pronto aqui, como sempre.
Obs: Utilizem o Post Criar Thumb(miniatura) com PHP e o Galeria com LightBox para criar sua galeria dinâmica.
Outra coisa, alguns amigos tem colocado os links do trabalhos depois de implementados, acho bacana a iniciativa, assim pode acabar ajudando alguém… fico muito grato,
Abraços,
Efetuando uma busca em um arquivo XML utilizando PHP5
Vimos em um outro post como ler um arquivo XML utilizando o SimpleXML, agora veremos como efetuar uma busca dentro de um arquivo XML.
Gerar, ler e transportar dados através em XML se tornou algo padrão em qualquer software seja on-line ou não. A partir disso podemos pensar:
- Antes de enviar dados em XML nós selecionamos adequadamente o que ele irá transportar.
Legal, é assim mesmo, nós selecionamos os dados do BD, geramos o XML e enviamos ou disponibilizamos para outro software.
Ok, mas e o software que vai receber esses dados? Ele não sabe o que está recebendo, não é?
Então pensando nisso nós escreveremos agora o código em PHP que terá o objetivo de ler o conteúdo do XML e selecionar apenas o que lhe interessa, assim como acontece na geração do arquivo.
A idéia a princípio e como todas as demais contidas nesse bloguinho é muito simples e servirá para que vocês possam a partir disso desenvolver linhas de raciocínios melhores ;)
Bem, a idéia é parecida com a do outro post, por isso aconselho dar uma lida nele antes.
Considerando que você acabou de ler o post sobre SimpleXML vamos começar o arquivo XML.
chamamos o arquivo de estante.xml
<?xml version=”1.0″ encoding=”iso-8859-1″?>
<livros>
<livro>
<cod>01</cod>
<titulo>PHP para iniciantes</titulo>
<descricao>Desenvolvendo Aplicações web</descricao>
<autor>Manuel da Silva</autor>
<paginas>200</paginas>
<preco>50.00</preco>
</livro>
<livro>
<cod>02</cod>
<titulo>XML</titulo>
<descricao>Usando XML com PHP </descricao>
<autor>José das Couves</autor>
<paginas>100</paginas>
<preco>150.00</preco>
</livro>
<livro>
<cod>03</cod>
<titulo>Javascript</titulo>
<descricao>O Poder do javascript</descricao>
<autor>Billy Borny</autor>
<paginas>80</paginas>
<preco>90.90</preco>
</livro>
</livros>
Como pode perceber o conteúdo do XML são livros e suas propriedades, então
Na tag “livros” possui 3 tags “livro” ou seja “livros” é a raiz e “livros” são o que chamamos de “nós“,
para cada tag livro existe o cod, titulo, descricao, autor, paginas e preco, o último é justamente o que iremos utilizar em nosso exemplo, iremos selecionar livros do XML de acordo com o preço que especificarmos.
Para isso precisamos ler o XML e fazer a seleção de acordo com os parâmetros que escolheremos.
o arquivo principal chamei-o de index.php mas você pode chamar de pamela.php se quiser.
<?php
# Carrega e armazena o XML na variavel $xml
$xml = simplexml_load_file(“estante.xml”);
# laço dentro da tag livro para cada tag livro que encontrar
foreach($xml->xpath(‘//livro‘) as $livro)
{
# armazena na var $registro o conteudo de uma tag livro
$registro = simplexml_load_string($livro->asXML());
# executa uma consulta XPath e armazena em $busca
$busca = $registro->xpath(‘//preco[.>55.00]‘);
# verificando se houve alguma busca com sucesso
if($busca){
# exibindo os resultados encontrados
echo $livro->titulo . “<br>”;
echo $livro->descricao . “<br>”;
echo $livro->preco . “<br><br>”;
}
}
?>
Acho que tem pouco para explicar sobre o PHP devido os comentários do código.
Mas, básicamente o que ocorre é que nós após carregarmos o arquivo XML efetuamos na linha
$busca = $registro->xpath(‘//preco[.>55.00]‘);
a seguinte verificação:
- procure dentro das tags livro onde o preco seja maior que 55.00, se reparar no arquivo XML irá perceber que somente 2 livros (nós) atendem à nossa condição e são eles que são exibidos como resultado. Neste caso estamos exibindo somente o título, descrição e preço, claro que podemos exibir todo o conteúdo do livro.
Muito díficil não é? Pois é …
Acredito que vale a pena se aprofundar nessa idéia de transporte de dados com XML, além de ser muito prático permite que dados de uma aplicação seja fácilmente integrados à qualquer outro sistema e esse parece ser o futuro do software, quando se fala em integração de sistemas não dá para pensar em outra coisa que não seja XML.
seguem alguns links:
- Post | Criando XML com PHP
- Post | Lendo XML com PHP
- Docs | SimpleXML | Consultas Xpath
- Exemplo | busca em xml
- Download | busca em xml – fontes
Aproveite para responder essa…
Àté a próxima,
abraços
Rafael Clares,





