segunda-feira, 22 de setembro de 2008

Envio de e-mail com CakePHP

Oi pessoal. Hoje apresentarei a vocês como utilizar o componente nativo do CakePHP para envio de e-mails. No caso deste artigo, para um formulário de contato.

Lembrando que este é um componente nativo do CakePHP 1.2.

Inicialmente, vamos criar nosso formulário com ajuda do helper Form do CakePHP.



// app/views/contacts/index.ctp


create(´Contact´, array(´url´ => ´/contacts´)); ?>
input(´primeiroNome´);
echo $form->input(´sobreNome´);
echo $form->input(´email´);
echo $form->input(´msg´, array(´type´ => ´textarea´));
?>
end(__(´submit´, true)); ?>


Acima, temos um formulário de contato básico. Crie uma pasta de nome contacts dentro da pasta app/view

Ex. (/app/view/contacts) e salve este arquivo como index.ctp.

Agora vamos criar nosso modelo:


// app/models/contact.php

Nosso modelo será bem simples, sem validação. Mas isto não impede de vocês inserirem validações nos campos, utiliizando componentes de segurança, etc.

Esta variável $useTable que usei acima, é para falar ao CakePHP que este modelo não trabalhará com nenhuma tabela, por isto o valor está especificado como false.

Vamos agora ao nosso controller:

// app/controllers/contacts_controller.php
data))
{
$name = $this->data[´Contact´][´primeiroNome´] . ´ ´ . $this->data[´Contact´][´sobreNome´];
$from = $this->data[´Contact´][´email´];
$subject = ´Contato do Site´;
$msg = $this->data[´Contact´][´msg´];

$this->Email->sendAs = ´both´; // html, text, both
$this->set(´conteudo´, $msg); // especifica variavel da mensagem para o template
$this->Email->layout = ´contact´; // views/elements/email/html/contact.ctp
$this->Email->template = ´contact´;

// set view variables as normal
$this->set(´from´, $name);
$this->set(´msg´, $msg);

$this->Email->to = ´ seuemail@seusite.com.brEste e-mail está sendo protegido dos spam bots, você precisa ter o JavaScript habilitado para vê-lo ´;
$this->Email->subject = $subject;
$this->Email->replyTo = ´ naoresponda@seusite.com.brEste e-mail está sendo protegido dos spam bots, você precisa ter o JavaScript habilitado para vê-lo ´;
$this->Email->from = $name . ´<´ . $from .´>´;

if ( $this->Email->send($msg) ) {
$this->Session->setFlash(´E-mail enviado´);
} else {
$this->Session->setFlash(´E-mail nao enviado´);
}
$this->redirect(´/´);
}
}

}

Seguem agora algumas explicações sobre nosso controle:

$this->Email->sendAs = ´both´;

Esta parte serve para configurarmos como será enviado o e-mail. Se terá formato html, texto ou ambos(both)

$this->Email->layout = ´contact´;

Nesta parte informamos ao componente Email qual será o layout utilizado neste envio.

Lembrando que o layout deverá ser salvo dentro da pasta

/app/view/elements/email/html/contact.ctp e /app/view/elements/email/text/contact.ctp

respectivamente, para os layouts dos e-mails texto ou html.

Bom, espero que este artigo ajude vocês a inserir em seus sites/projetos os formulários de contato, sem que haja a necessidade de utilizar algum script externo (phpMailer, SwiftMailer, etc), para um simples formulário de contato.


?>

?>

sexta-feira, 19 de setembro de 2008

Validação de CPF e CNPJ Online

Validando um CPF / CNPJ Online via WebService e AJAX

Este artigo tem como finalidade mostrar como consumir um webservice em ASP.NET AJAX para fazer uma validação Online na base de dados do SERASA e receber a informação Nome/Razao Social do documento consultado.

Pré-Requisitos:

Visual Studio 2005

Conhecimentos de ASP.NET

Conta para consulta no www.consultacpf.com (Gratuita para abertura, porém necessita créditos para consultas reais)

Dúvidas:

Encaminhar suas dúvidas para webmaster@consultacpf.com.

O Código fonte deste artigo está disponível aqui
Passo a Passo:

Assumindo que você já possui um projeto criado no Visual Studio, crie um Webform em seu Visual Studio com nome de consultacpf.aspx

Criando campos para consulta e resultados:

1. Criar um Label para Numero do Documento

2. Criar um TextBox fldDocumento para receber o numero do Documento

3. Criar um Botão para executar a consulta

4. Criar um Label fldNomepara receber a resposta do WebService

5. Criar um Label fldDatapara receber a resposta do WebService
Adicionando o WebService no seu projeto

No Menu Website do VS2005 utilizar a opção Add Web Reference...

Endereço para adicionar o webservice: http://www.consultacpf.com/webservices/consultacpf.asmx

Após inserir a Web Reference, você deverá ver a referência no painel ao lado.

Código para Invocar o WebService

Código para ser usado no evento do botão:

Imports com.consultacpf.www
Partial Class _Default
Inherits System.Web.UI.Page

Protected Sub Consultar(ByVal sender As Object, ByVal e As System.EventArgs)
' Declara as instâncias
Dim oWS As New ConsultaCPFWebService
Dim oResultado As New SinteseCadastral
Dim Email As String = ConfigurationManager.AppSettings("Email")
Dim Senha As String = ConfigurationManager.AppSettings("Senha")


' Invoca o WebService passando os parâmetros
'e recebe a resposta no Object oResultado
oResultado = oWS.ConsultaSinteseCadastralSERASA(Email, Senha, Me.Documento.Text)

' Move os dados do Object oResultado para os Campos da tela
Me.fldNome.Text = oResultado.Nome
Me.fldData.Text = oResultado.DataNasc

' Tudo ok!

End Sub
End Class
Visualizando em seu navegador

Não esquecer de atualizar o web.config com suas credenciais!

Buscar CEP online com XAJAX

Olá amigos. Gostaria de compartilhar com todos um assunto procurado por muitos e poucas vezes solucionado de uma forma eficiente. Como buscar ceps online, de forma fácil, com XAJAX.

O que você precisa?

  • Conhecimentos básicos em PHP;
  • Conhecimentos básicos na utilização do XAJAX;
  • Um web service online de ceps: www.buscarcep.com.br.

Com um web service conhecido, basta saber como enviar o cep, e receber o retorno dos dados do mesmo. No nosso caso, utilizaremos o www.buscarcep.com.br onde podemos buscar o cep de duas formas:

  • Query string;
  • ou XML.

Neste primeiro momento iremos tratar a forma mais simples, por retorno de uma string, que será tratada por funções do PHP e então adicionado aos campos via XAJAX, sem que seja necessário recarregar nossa página. Vamos ao 1º arquivo:


// Função que busca o cep e retorna array
function busca_cep($cep){
$resultado = file_get_contents('http://www.buscarcep.com.br/?cep='.urlencode($cep).'&formato=string');
if(!$resultado){
$resultado = "&resultado=0&resultado_txt=erro+ao+buscar+cep";
echo "";
}
parse_str($resultado, $retorno);
return $retorno;
}

?>

Esta função acima faz algo bem simples. Ela recebe o parâmetro $cep e com ele faz uma leitura de um link (o qual obtivemos olhando a documentação do site www.buscarcep.com.br) utilizando a função file_get_contents() do PHP. Esta função, por sua vez, recebe os parâmetros em formato de texto, e os mesmos são atribuidos a variável $resultado. Em seguida utilizamos a funcão parse_str() do PHP para converter a string recebida em uma variável do tipo array e retornamos esse array.

2º arquivo:


require "./ajax/xajax_core/xajax.inc.php"; // XAJAX
require "./funBuscarCep.php"; // Função que faz a busca do cep

$ajax = new xajax();
$ajax->registerFunction("buscaCep");

##################################### BUSCA CEP #####################################
function buscaCep($cep, $endereco, $bairro, $cidade, $estado){

//Instancia o objeto XAJAX response
$objResponse = new xajaxResponse('ISO-8859-1');

if(empty($cep)){
return $objResponse;
}

$cep = str_replace("-", "", $cep);

$resultado_busca = busca_cep($cep); // Retorna um array

// Coloca os valores dos arrays nos campos do formulário
$objResponse->assign($endereco, "value", $resultado_busca['tipo_logradouro']." ".$resultado_busca['logradouro']);
$objResponse->assign($bairro, "value", $resultado_busca['bairro']);
$objResponse->assign($cidade, "value", $resultado_busca['cidade']);
$objResponse->assign($estado, "value", $resultado_busca['uf']);

// Retorna a resposta de XML gerada pelo objeto do xajaxResponse
return $objResponse;
}

// Manda o ajax processar os pedidos acima
$ajax->processRequest();

$ajax->printJavascript('./ajax/');
?>

Neste arquivo temos uma função em xajax chamada buscarCep(), a qual é responsável por receber do formulário o cep e os nomes dos campos de endereço, bairro, cidade e estado, para que, após o retorno da função que busca o cep no web service, os dados sejam atribuidos aos campos sem precisar recarregar a página. Simples assim!

Veja neste link esse código funcionando.

Clique aqui ou aqui e faça download dos scripts.

12 dicas para otimizar seus códigos PHP

É sempre útil ler algumas dicas rápidas para melhorar a sua codificação. Geralmente temos vícios que adquirimos no dia-a-dia que, sem sabermos, tornam o nosso código mais lento.

Seguem abaixo 12 dicas para melhorar o processamento dos seus códigos PHP.

1. Se um método pode ser static, declare-o como static! O desempenho aumenta 4 vezes;

2. Evite utilizar metódos mágicos como __get, __set e __autoload, se possível;

3. require_once() é dispensável e demanda bastante memória;

4. Use caminhos completos (full path) nos includes e requires, pois é gasto menos tempo resolvendo os caminhos do sistema operacional;

5. Se você quer descobrir o tempo em que o script começou a ser executado, é preferível utilizar $_SERVER[´REQUEST_TIME´] do que time();

6. Veja se pode utilizar strncasecmp, strpbrk e stripos ao invés de regex;

7. str_replace é mais rápido que preg_replace, mas strtr é 4 vezes mais rápido que str_replace;

8. Se uma função, como de substituição de strings, aceitar tanto arrays como caracteres simples como argumentos, e se a sua lista de argumentos não é muito longa, considere fazer algumas declarações redundantes de substituição, passando um caractere por vez, ao invés de uma linha de código que aceita arrays como argumentos de busca e substituição;

9. Supressão de erro com @ é muito lento;

10. $row[´id´] é 7 vezes mais rápido que $row[id];

11. Mensagens de erro demandam mais processamento;

12. Não utilize funções dentro de loops, como por exemplo: for ($x=0; $x <>. A função count() é chamada todas as vezes que o loop é executado.;

terça-feira, 16 de setembro de 2008

Função para cálculo de frete dos correios

1.
2.

3. define('FRETE_PAC', '41106');
4. define('FRETE_SEDEX', '40010');
5. define('FRETE_SEDEX_10', '40215');
6. define('FRETE_SEDEX_HOJE', '40290');
7. define('FRETE_E_SEDEX', '81019');
8. define('FRETE_MALOTE', '44105');
9.
10. /**
11. * calcula_frete
12. *
13. * @param mixed $servico
14. * @param mixed $origem CEP da origem
15. * @param mixed $destino CEP do destino
16. * @param mixed $peso Peso em Kg
17. * @access public
18. * @return array
19. */
20. function calcula_frete ($servico, $origem, $destino, $peso) {
21. if (!$sock = fsockopen('www.correios.com.br', 80, $errornro, $error, 60)) {
22. throw new Exception($error, $errornro);
23. }
24.
25. $msg = "GET /encomendas/precos/calculo.cfm?"
26. ."Servico={$servico}&cepOrigem={$origem}&cepDestino={$destino}"
27. ."&peso={$peso}&resposta=localhost HTTP/1.1\n"
28. ."Host: www.correios.com.br\nConnection: Close\n\n";
29.
30. fwrite($sock, $msg);
31.
32. while (!feof($sock)) {
33. $line = fgets($sock);
34. if (!preg_match('/^Location: \w+\?(.*)$/i',$line, $match)) continue;
35.
36. $data = array();
37. foreach(split('&', $match[1]) as $item) {
38. $t = split('=', $item);
39. $data[$t[0]] = trim($t[1]);
40. }
41.
42. break;
43. }
44. $data['Servico'] = urldecode($data['Servico']);
45. $data['erro'] = urldecode($data['erro']);
46.
47. return $data;
48. }
49.
50. $result = calcula_frete(FRETE_SEDEX, '20512170', '78053378', '2');
51. var_dump($result);



----------------------------------------------------------------------------------------------


Bem simples, não é? Agora, $result contém a seguinte estrutura:

array(13) {
["Servico"]=>
string(5) "SEDEX"
["cepOrigem"]=>
string(8) "20512170"
["cepDestino"]=>
string(8) "78053378"
["UFOrigem"]=>
string(2) "RJ"
["LocalOrigem"]=>
string(7) "Capital"
["UFdestino"]=>
string(2) "MT"
["LocalDestino"]=>
string(7) "Capital"
["Peso"]=>
string(1) "1"
["MaoPropria"]=>
string(1) "0"
["AvisoRecebimento"]=>
string(1) "0"
["valorDeclarado"]=>
string(1) "0"
["Tarifa"]=>
string(4) "27.5"
["erro"]=>
string(0) ""
}

Como se protejer contra SQL INJECTION


SQL Injection no PHP: O que é e como se proteger

A segurança das informações é um assunto que exige atenção especial, principalmente em se tratando de informações armazenadas em bancos de dados acessados via web.

Uma das técnicas de fraude mais conhecida pelos desenvolvedores web é a SQL Injection. Trata-se da manipulação de uma instrução SQL através das variáveis quem compõem os parâmetros recebidos por um script server-side, tal como PHP, ASP, ColdFusion e outros.

O principal motivo pelo qual deve-se impossibilitar a utilização da SQL Injection está no fato de que, através de uma simples instrução SQL, como por exemplo, uma projeção de dados, outras operações podem ser executadas, podendo impactar sobre o esquema das tabelas, os dados armazenados, e até mesmo sobre elementos do sistema operacional, tendo em vista que alguns bancos de dados permitem a execução de comandos do shell do próprio sistema operacional.

Detectando a vulnerabilidade de um sistema

Para ilustrar o conceito de SQL Injection, a seguinte simulação pode ser realizada. Imaginemos que um script de validação de acesso de usuários tenha sido desenvolvido como segue:


Nas linhas 3 e 4, as variáveis $usuario e $senha, respectivamente, recebem o conteúdo submetido por um formulário através do método POST. Eis a fonte do problema.

Suponha que a seguinte entrada tenha sido informada no campo usuário no formulário chamador do script de validação.

Se nenhuma outra validação for realizada, o usuário mal intencionado terá efetuado login no sistema, sem ao menos informar um usuário contido na tabela. Isto foi possível pois o valor de entrada informado não recebeu o tratamento devido, sendo adicionado à instrução para ser executado. Vale ressaltar que as validações apresentadas no exemplo são apenas ilustrativas, havendo a necessidade de checagens mais eficazes para um script de validação de acesso.

Impossibilitando o uso de SQL Injection

Para que se esteja livre da utilização da SQL Injection, certas providências devem ser tomadas. Algumas das ações serão realizadas no servidor de banco de dados, outras devem ser garantidas pelo código fonte.

Deve-se tomar cuidado com a configuração do usuário que estabelece a conexão com o banco de dados. O ideal é que as permissões de acesso deste usuário estejam restritamente limitadas às funções que irá realizar, ou seja, para a exibição de um relatório, a conexão com o banco de dados deve ser realizada por um usuário com permissões de leitura e acesso somente às tabelas necessárias para sua operação.

Todos os valores originados da coleta de dados externos, devem ser validadas e tratadas a fim de impedir a execução de eventuais instruções destrutivas ou operações que não sejam as esperadas.

Um tratamento básico para a execução de querys com variáveis contendo valores informados pelo usuário:



Com a utilização da função addslashes() será adicionada uma barra invertida antes de cada aspa simples e aspa dupla encontrada, processo conhecido como escape. Se a diretiva de configuração do PHP magic_quotes_gpc estiver ativada, o escape é realizado automaticamente sobre os dados de COOKIES e dados recebidos através dos métodos GET e POST. Neste caso, não deve ser efetuado o tratamento com addslashes(). A função get_magic_quotes_gpc(), disponível nas versões do PHP a partir da 3.0.6, retorna a configuração atual da diretiva magic_quotes_gpc.

Abaixo, a query string resultante da aplicação do tratamento mencionado:



Em muitos bancos de dados, existem funções específicas para o tratamento de variáveis em query strings, o que diminui a compatibilidade do código fonte para operação com outros sistemas de banco de dados.

Outra dica importante é evitar a exibição das mensagem de erro em um servidor de aplicação em produção, pois geralmente nos erros ou alertas são exibidos caminhos de diretórios do sistema de arquivos e informações à respeito do esquema do banco de dados, podendo comprometer a segurança do sistema.

Para ocultar a exibição de erros e alertas do PHP, é necessária a configuração da diretiva display_errors para Off no arquivo de configurações do PHP.

Cabe ao desenvolvedor estar atento às possíveis brechas de segurança existentes nos códigos fonte que produz, principalmente quando o que está em jogo é um bem de grande valia: a informação. Tenha consciência. Isto evita futuras dores de cabeça e atritos desnecessários com o cliente.

terça-feira, 15 de julho de 2008

Receita libera 2º lote de restituição do IR 2008

A Receita Federal do Brasil liberou nesta terça-feira o pagamento do segundo lote de restituições do Imposto de Renda Pessoa Física 2008 (ano-base 2007). Para saber se teve a declaração liberada, o contribuinte pode acessar o site da Receita ou ligar para 146 e informar o número do Cadastro de Pessoa Física (CPF).
Nesse lote foram liberadas 958.614 restituições, totalizando um montante de R$ 1,2 bilhão. O lote inclui todos os contribuintes amparados pelo Estatuto do Idoso que não apresentaram pendências nas respectivas declarações e não foram contemplados no primeiro lote, representando 2,9%. Os pagamentos aos demais contribuintes foram priorizados de acordo com a data da entrega da declaração.
O dinheiro terá correção total de 2,84%, correspondentes à taxa Selic de maio a junho e 1% de julho. Esse valor não sofrerá mais qualquer acréscimo, independentemente da data em que o contribuinte receba a sua restituição.
Quem não informou o número da conta para crédito da restituição deverá procurar uma agência do Banco do Brasil, ou ligar para o BB pelos telefones 4004-0001, nas capitais, ou 0800-729-0001, nas demais localidades, e pedir a transferência do dinheiro para qualquer banco em que tenha conta corrente ou poupança. A consulta ao extrato de processamento da declaração poderá ser feita na Internet.
Caso o contribuinte não concorde com o valor da restituição, poderá receber a importância disponível no banco e reclamar a diferença na unidade local da Receita.
A restituição ficará disponível no banco por um ano. Se o contribuinte não fizer o resgate nesse prazo, deverá requerê-la mediante o Formulário Eletrônico (Pedido de Pagamento de Restituição), disponível na Internet.


Fonte: Classempresas

fonte:terra

Bernanke está preocupado com a inflação, mas revisa crescimento em alta

O presidente do Federal Reserve (Fed, banco central americano), Ben Bernanke, advertiu nesta terça-feira para um "aumento mal vindo da inflação", anunciando uma nítida revisão em alta das previsões de crescimento nos Estados Unidos para 2008.No momento em que os mercados atravesam fortes turbulências, o presidente do banco central prometeu que "ajudar os mercados financeiros a recuperar um funcionamento mais normal continuará sendo uma prioridade para o Fed"."Em geral, um crescimento econômico são depende de mercados financeiros funcionando bem", destacou Bernanke num discurso no Congresso, dias após o Fed e o Tesouro terem socorrido os gigantes do refinanciamento hipotecário Fannie Mac e Freddie Mae.Mas o essencial de seu discurso foi consagrado à situação econômica e à dificuldade de eliminar os riscos que pesam sobre o crescimento e a inflação.Por um lado, o Comitê de política monetária (FOMC) do Federal Reserve revisou em forte alta suas previsões de crescimento para este ano, que devem ficar entre 1,0% e 1,6% em vez de 0,3% a 1,2% previstos em abril.Isto mantém um crescimento bastante abaixo do ritmo de cruzeiro da economia americana, destacou Bernanke. Mas a primeira economia mundial escaparia assim à recessão.Ao mesmo tempo, o FOMC revisou em forte alta suas previsões de inflação para 2008: de 3,8% a 4,2% (contra 3,1% a 3,4% previstos anteriormente)."Uma responsabilidade crucial dos governadores do banco central é a de impedir que não se instale um processo onde o público comece a esperar uma inflação muito mais forte por um longo período", ressaltou Bernanke.Isto pode influenciar a fixação dos salários e dos preços, levando a um "aumento mal vindo da inflação a longo prazo", acrescentou.Os mercados esperavam com ansiedade este discurso para tentar adivinhar as intenções do banco central sobre a taxa básica de juros, atualmente fixada em 2%. As preocupações manifestadas por Bernanke sobre a inflação, apesar de seu otimismo cauteloso sobre o crescimento, não devem sustentar novas medidas de flexibilização monetária.

Fonte: Classempresas

fonte:uol

Bovespa cai cerca de 2% com reação de EUA a Fed

A Bolsa de Valores de São Paulo (Bovespa) intensificava as perdas nesta terça-feira, seguindo a repercussão negativa de Wall Street às declarações do chairman do Federal Reserve, Ben Bernanke, com previsões negativas para a economia dos Estados Unidos. Às 11h57, o Ibovespa caía 2,02%, para 59.485 pontos. No pior momento, o índice caiu 3,2%. O giro financeiro era de cerca de R$ 1,7 bilhão.

Em discurso ao Senado americano, Bernanke previu aumento na inflação no curto prazo e que o crescimento da economia do país ficará abaixo do potencial em 2008.
Saiba maisO mercado acompanha de perto o desempenho do Ibovespa porque este é o mais importante indicador do desempenho médio das cotações do mercado de ações brasileiro. O índice retrata o comportamento dos principais papéis negociados na bolsa. A pontuação do Ibovespa aumenta na medida em que sobe o valor das ações.


fonte:Classempresas
fonte: Terra

quinta-feira, 3 de julho de 2008

Com agenda cheia, dólar segue exterior e opera em alta

O dólar operava em alta nesta quinta-feira, acompanhando a movimentação do mercado externo após a alta do juro na Europa e dados que mostraram fraqueza do emprego nos Estados Unidos. Às 12h38, a moeda americana subia 0,37%, para R$ 1,609.

De acordo com Mario Battistel, gerente de câmbio da Fair Corretora, o dólar acompanha nesta sessão a variação dos mercados internacionais.

Segundo Miriam Tavares, diretora de câmbio da AGK Corretora, "se o ambiente de negócios se deteriorar ainda mais nos mercados internacionais, as cotações devem ficar um pouco mais pressionadas".

O dólar se fortalecia também no exterior após a indicação do presidente do Banco Central Europeu (BCE), Jean-Claude Trichet, de que a alta do juro básico desta quinta-feira foi um movimento pontual, e não o início de uma série de aumentos.

quinta-feira, 19 de junho de 2008

Dólar opera perto da estabilidade após 3 quedas

O dólar opera perto da estabilidade no início da tarde desta quinta-feira com a entrada de capitais no Brasil, mesmo após três sessões seguidas de baixa. Às 15h11, a moeda operava com perdas de 0,18%, cotada a R$ 1,604.

Desde janeiro de 1999, a taxa de câmbio não é cotada abaixo de R$ 1,60. Em 2008, a queda acumulada pelo dólar já é de quase 10%.

De acordo com dados divulgados na véspera pelo Banco Central, o Brasil já registrava fluxo cambial positivo na primeira metade do mês - US$ 892 milhões.

Os agentes monitoravam também o comportamento do mercado internacional.