sábado, 5 de setembro de 2009

sexta-feira, 4 de setembro de 2009

Programa de Afiliados Lucre até R$1,00 real por indicado

Começe a lucrar até um R$1,00 por indicado com nosso porgrama de afiliados acesse http://www.classempresas.com.br/Parceiros e tenha uma renda extra que pode chegar até R$1.000,00 reais

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) ""
}