PHP: Como corrigir o erro de date timezone?

17 11 2010

Estava eu programando tranquilamento quando me deparei com o erro de date.timezone. Caramba, o que é isso? Bom, depois de pesquisar um pouco em alguns sites descobri que o PHP contém a configuração de tempo e local, e esta deve ser definida no arquivo de configurações do PHP: php.ini. Legal!

Pra resolver isso basta tirar o comentário da seguinte linha, que no meu caso estava assim:

;date.timezone =

Retirando o comentário e definindo o local, ficou assim:

date.timezone = "America/Sao_Paulo"

Perfect! Nada mais de erros e warnings!





Fatal error na função curl_init! Como habilitar o curl no php xampp?

27 09 2010

Estava eu desenvolvendo uma aplicação que se utiliza da classe curL, porém tive a seguinte mensagem:

Fatal error: Call to undefined function curl_init()

Legal, e agora? Preciso instalar o curl?

A resposta é não!

Basta habilitar no php.ini!

Vamos lá! Retire o ‘;’ da seguinte linha:

;extension=php_curl.dll

Blz, agora reinicie o xampp/Apache!

Pronto! Perfect!





PROGRAMAÇÃO: Como contar palavras e contar letras com a linguagem de programação PHP?

24 07 2010

Essa semana enfrentei um dilema, precisei quebrar a frase em palavras nos espaços em branco. Até aí ta fácil, porém depois precisei contar as letras de cada palavra e somar até dar o número determinado. Quando chegar nesse número preciso quebrar a linha. Legal né?! ;-()

Bom, pra resolver essas questões, voltei a dar uma estudada no básico do PHP. Dependendo do que você precisa fazer, você tem funções prontas específicas. Vamos às situações:

1) Quebrar a frase nos espaços em branco

Fácil! Utilize a função EXPLODE  do PHP.
Definição do site php.net

array explode( string $delimiter , string $string [, int $limit> ] )

Vamos pegar meu nome completo como exemplo:

$stringNome = "Dilberto Gabriel Rosa";
$nomeQuebrado = explode(" ", $stringNome);
echo $nomeQuebrado[0]; // Dilberto
echo $nomeQuebrado[1]; // Gabriel
echo $nomeQuebrado[0]; // Dilberto

2) Contar o número de palavras na frase

Agora que já quebramos a frase, temos um array onde cada índice do array contém uma palavra. Pra contar o número de palavras basta contar quantos elementos temos no array gerado.

echo 'Total de palavras: '.count($nomeQuebrado);

3) Contar o número de letras enquanto mostra as palavras

Bom, aqui a parte mais trabalhosa, onde teremos que ler cada índice do array, e para cada índice do array lido temos que ler letra por letra e incrementar nosso contador. Desta forma, ao final do último índice do array temos o total de letras de toda a string inicial.

Vamos ao código:

//Criando a variável que vai contar letra por letra
$contaLetra = 0;

//Loop que vai olhar palavra por palavra do array
foreach($nomeQuebrado as $nq) {
    //Loop que vai olhar em cada palavra, letra por letra do array e incrementar o contador
	for($i=0;$i<strlen($nq);$i++) {
	   <code>echo '<br>'.$nq[$i];</code>
	   <code>$contaLetra++;</code>		
	}

	//Quebrando linha depois da palavra
	echo '<br>';

}

//Mostrando o total de letras da nossa frase
echo '<br>Total de Letras: '.$contaLetra;

4) Quebrar linha quando passar de 10 letras

Ótimo! Agora ficou fácil, se você precisar quebrar linha no momento em que passar 10 letras por exemplo, basta incluir uma condicional validando dentro do primeiro loop, desta forma você vai quebrar linha ao final da palavra, e não no meio dela, o que é mais correto.
IMPORTANTE: não esqueça que quando você quebrar a linha deve zerar o contador para que comece validar as próximas 10 letras. E finalmente, é necessário criar um novo contador se quiser saber quantas letras existem na frase inteira.

Confira o código completo:

//String definida
$stringNome = 'Dilberto Gabriel Rosa Teste Teste2 Teste3';

//Gerando array com todos os nomes
$nomeQuebrado = explode(' ',$stringNome);

//Criando a variável que vai contar letra por letra
$contaLetra = 0;

//Variável que vai armazenar o total geral de letras
$ContaLetrasTotal = 0;

//Loop que vai olhar palavra por palavra do array
foreach($nomeQuebrado as $nq) {
	
	//Validando se chegou ao número máximo de letras para quebrar a linha
	if($contaLetra > 10) {
		echo '<br>';
		$contaLetra = 0;
	}
	//Loop que vai olhar em cada palavra, letra por letra do array e incrementar o contador
	for($i=0;$i<strlen($nq);$i++) {
		echo $nq[$i];
		$contaLetra++;
		$contaLetraTotal++;		
	}
	
	//espaço entre as palavras e incrementando contador
	echo ' ';
	$contaLetra++;
	$contaLetraTotal++;		

}

//Mostrando o total de letras da nossa frase
echo '<br>Total de Letras: '.--$contaLetraTotal;

Bom final de Semana!





Existe truncate no PEAR DataObject? Delete existe!

28 11 2009

Dae galera, desta vez vou estar postando uma solução, mas espero que não seja a única. Estive nos últimos dias pesquisando por truncate no Pear Dataobject, porém sem sucesso. Mas, como eu tinha urgência em finalizar um script php, descobri uma maneira de limpar todos os dados da tabela utilizando delete. Resolveu? sim! Mas se estivermos falando de performance, o Truncate do MySql tem algumas vantagens sobre o delete. Se quiser saber mais sobre estas vantagens acesse o post Utilizando TRUNCATE no MySql.

Bom, vamos à minha solução:

Imagine que queremos limpar os dados da tabela cliente:

$doCLIENTE = new DO_CLIENTE;
$doCLIENTE->whereAdd(“COD_CLIENTE IS NOT NULL”);

Até aqui instanciamos o DO e definimos o where. Neste caso o COD_CLIENTE é NOT NULL, assim todos as linhas da tabela obrigatoriamente contém um COD_CLIENTE. Agora vem o segredo do pear para utilizar o delete, com o método whereAdd:

$doCLIENTE->delete(DB_DATAOBJECT_WHEREADD_ONLY);

Isso mesmo, utiliza-se o parâmetro DB_DATAOBJECT_WHEREADD_ONLY. Desta forma o método vai considerar o whereAdd antes de apagar as linhas. Sem este parâmetro o whereAdd é ignorado!

Pronto! Aqui eu finalizei minha implementação. Se alguem conseguir uma solução que tenha a mesma performance do Truncate do MySql deixa a dica ai blz! Abraço! ;)





Problema com datetime do MySql e PHP

18 11 2009

Hoje Eu e a Luciane enfrentamos um problema: Realizar um select em um campo datetime do MySql. Parece simples? Mas não foi!

Em nossas consultas sempre realizamos pesquisas no banco de dados com campos do tipo datetime, porém nunca enfrentamos a situação em que o resultado sempre vinha vazio sendo que temos dados em banco. Desta forma começamos a perguntar: Porque o aqua (nossa ferramenta para consultas à banco de dados) não traz o resultado?

Nosso select no aqua era o seguinte:

select * from tabela where campo_data = current_date

Bom, normalmente, para outras consultas esse comando sql funcionaria. Desta vez não foi bem assim.

Dando uma analisada no conteúdo da tabela no banco, identificamos as seguintes datas:

16/11/2009 11:39:00
16/11/2009 10:30:03

Desta forma, podemos identificar que, apesar de serem mesmas datas, o datetime permite gravação de hora, minuto e segundos. Essa foi a primeira pista.

A segundo pergunta foi: Como estão sendo gravados estes dados?

Identificamos que no PHP, na realização do insert em banco de dados, o programador pegou a data atual com o seguinte comando: “now”. Agora temos a segunda pista. O comando “now” do PHP traz a data atual, acompanhada de hora, minuto e segundos! Assim, quando era realizado insert em banco, era gravado a data com a hora atual, porém na busca estavamos utilizando apenas a data. O resultado do SQL era vazio pois a data era a mesma mas a hora não.

Como resolver?

A idéia inicial foi alterar a função PHP de ‘now’ para date(‘Y-m-d’). E deu certo!

Ao utilizar a função “date”, o PHP grava a data no campo, com a hora zerada. Desta forma a consulta sql desconsidera a hora para aquela linha, trazendo o registro. É isso!

Abraço.





Utilizando WhereAdd e orderBy com pear DB_DataObject

12 11 2009

Hoje trago uma aplicação simples com Pear Framework utilizando o package DB_DataObject. Vamos focar 2 métodos: whereAdd e OrderBy, que são super utilizados em consultas SQL.

Para quem tiver dúvida e quiser consultar o manual acesse:
DB_DataObject Manual

Neste exemplo, vamos seguir uma idéia bem simples para o fácil entendimento.

Utilizaremos a seguinte tabela, neste caso no DB MySql:

tabela USUARIO

Field		Type		Null	key	Default	Extra
id		int(10)		NO	PRI	(null)	auto_increment
nome		varchar(50)	YES	MUL	(null)
sexo		char(1)		YES		(null)
dt_nascimento	date		YES		(null)

Temos as seguinte necessidades:

1. Precisamos selecionar todos os usuário que nasceram a partir do ano de 1990;
2. Precisamos trazer apenas o usuário cadastrados com sexo Masculino;
3. E pra finalizar queremos trazer os registros por ordem de data de nascimento;

Legal, temos a idéia para o desenvolvimento.
Levando em consideração que você já gerou todas as tuas tabelas para o banco de dados DAO vamos ao código:

//Instanciando a classe DAO
$DAOUsuario = new DO_USUARIO();

//Incluíndo whereAdd
$DAOUsuario->whereAdd(“YEAR(dt_nascimento)>1990″);
$DAOUsuario->whereAdd(“sexo = ‘M’”);

//Incluindo orderBy
$DAOUsuario->orderBy(“dt_nascimento”);

//Executando a query
$DAOUsuario->find;
$result = $DAOUsuario->fetch();

Legal, temos todos os dados na variável $result.

Dúvidas? Estarei á disposição!
Abraço!
Dilberto Rosa





Exemplo com a função assign do Smarty

31 10 2009

O Smarty vem com diversas funções que você pode usar nos templates. Uma função muita interessante é a função ASSIGN. Com ela podemos definir variáveis no próprio template com determinado conteúdo que podem realizar operações ou mesmo apenas receber valores que serão validados. Legal!

Definição: {assign} é usada para definir variáveis de template durante sua execução.

Atributos:

var
Tipo: string;
Requirido: sim;
Default: n/a;
Descrição: O nome da variável que esta sendo definida;

value
Tipo: string;
Requirido: sim;
Default: n/a;
Descrição: É o valor que está sendo setado;

A) Vamos à um exemplo básico?

1) Definindo e setando:
{assign var=’minhaVariavel’ value=’Dilberto’}
2) Mostrando:
O valor de $minhaVariavel é {$minhaVariavel} .
3) Resultado:
O valor de $minhaVariavel é Dilberto.

B) Podemos também realizar uma operação matemática!

1) Definindo a variável já setando uma operação
{assign var=carregando_total value=’$carregando_total+$array_qualquer[linha].valor’}
2) Mostrando o resultado da operação:
O resultado da operação é {$carregando_total}

C) E por fim, posso acessar uma variável que está no template a partir do PHP script!

1) Definindo a variável:
{assign=var=’estouNoTemplate’ value=’variavelSmarty’}

2) Vamos montar o script PHP! Importante: As variáveis do template somente estarão disponíveis depois ou durante a execução do template.

<?php

//Executando o método fetch do smarty para gerar as variáveis
$whole_page = $smarty->fetch(‘index.tpl’);

//Mostrando a variavel smarty que foi definida no template
echo ‘estouNoTemplate:’.$smarty->get_template_vars(‘estouNoTemplate’);

//Definindo uma nova variável
$smarty->assign(‘outraVariavel’,'variavelSmarty2′);

//Quebrando linha
echo “<br>”;

//Mostrando a nova variável
echo ‘outraVariavel:’.$smarty->get_template_vars(‘outraVariavel’);

?>

3) Resultado
estouNoTemplate: variavelSmarty
outraVariavel: variavelSmarty2

Legal! Até a próxima!

Fonte: Smarty Net
Comentários e tradução: Dilberto Rosa





Como acessar um array smarty com foreach

22 10 2009

Neste post tratarei de um assunto básico e extremamente útil com smarty: Foreach em array!

Vamos definir inicialmente o nome dos atributos pra você se familiarizar com o assunto:

from - Neste ítem você define o array que está sendo acessado;
item - É o nome da variável onde está o elemento atual dentro do loop;
key - E o nome da variável que contém a chave do array dentro do ítem atual no loop;
name - Este ítem é o nome do looping foreach para acessar as propriedades do foreach;

vamos à um exemplo simples?

1) No PHP definimos o array com o conteúdo que está sendo passado via smarty para um template qualquer:

$arr = array(100, 200, 300, 400);
$smarty->assign(‘arrayConteudo’, $arr);

2) Agora vamos para o Template. Aqui, conforme o assign do smarty, criamos uma variável arrayConteudo que será acessada no template:

{foreach from=$arrayConteudo item=conteudo}
{$conteudo}
{foreach}

Pronto! Teremos a seguinte saída html:

  • 100
  • 200
  • 300
  • 400

Mas se eu quiser acessar o índice do array? Simples! Mudamos o foreach da seguinte forma:
{foreach from=$arrayConteudo key=chave item=conteudo}
{$chave}: {$conteudo}
{foreach}

Saída HTML:

  • 0: 100
  • 1: 200
  • 2: 300
  • 3: 400

É isso! Abraço!

Fonte:
smarty.net

Tradução e Comentários:
Dilberto Rosa





Utilizando operador ternário em estruturas condicionais com PHP

14 10 2009

O operador ternário é muito utilizado em Java, C e JavaScript. Normalmente é utilizado por desenvolvedores bem familiarizados com a linguagem. Neste exemplo utilizarei um exemplo em PHP, mas nada impede que você possa utilizar a regra geral para outras linguagens.

Vamos à sintaxe básica:
(Condição) ? (Fluxo1) : (Fluxo2);

Explicando cada ítem:
Condição: Uma condição definida para a estrutura condicional;
Fluxo1: Se o resultado da condição for verdadeira, executa o Fluxo1;
Fluxo2: Se o resultado da condição for falsa, executa o Fluxo2;

Legal, agora vamos à um exemplo prático:

$num = “20″;
$val = ($num>19) ? ($num+15) : ($num-15);
echo $val;

Neste exemplo, temos a seguinte validação:
Se $num é maior que 19 então $val recebe $num + 15, senão, $val recebe $num – 15.

O resultado é 35.

Poderíamos escrever o mesmo código da seguinte forma:

$num = “20″;
($num>19) ? ($val = $num+15) : ($val = $num-15);
echo $val;

Neste caso, teríamos a repetição da variável $val, em cada fluxo. O primeiro exemplo apresenta o código de forma mais enxuta sem repetição de variável.

Grande abraço!





Como contar o número de elementos de um array com Smarty

6 10 2009

Bom dia pessoal!

Neste post trazemos uma dica simples mas extremamente útil para quem trabalha com Smarty no desenvolvimento PHP.

Através do smarty, podemos enviar para o template um array qualquer. Aqui chamamos este array de $conteudo. Vamos ao exemplo. Supondo que eu preciso, no smarty, identificar quantos índices existem neste array. Como podemos resolver isso? Simples!

Utilize a seguinte estrutura smarty:
{assign var=’totalArray’ value=$conteudo|@count}

Explicando o código:
assign var=’totalArray’ – O smarty cria a variável totalArray, que vai conter o total de índices encontrado no array;
value=$conteudo|@count – A variável smarty recebida que será contada é a variável $conteudo e o count identifica o tipo de ação que deve ser executada. Neste caso, contar os índices.

Como mostrar o total?

O total pode ser obtido desta forma:
{$totalArray}

Simples né?
Boa semana.

Fonte:
Smarty Template Engine
Dilberto Rosa








Seguir

Obtenha todo post novo entregue na sua caixa de entrada.