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

terça-feira, 10 de julho de 2012

Bê-a-Bá do Codeigniter: Iniciando uma série de artigos

Salve All()!

Esse post será curto pois vou iniciar uma série de posts (artigos) sobre iniciação no framework Codeigniter.
Pra quem já é avançado isso não será de grande valia mas poderá acrescentar alguns detalhes valiosos.


Eu tentarei seguir a seguinte "ordem" de publicação nessa série:

  1. Configuração do Codeigniter
  2. Personalização do Codeigniter
  3. Introdução à POO com Codeigniter
  4. Talvez exista!
Para entender sobre o codeigniter, eu vou recomendar o site http://codeigniterbrasil.com/ que tem muito conteúdo sobre o Codeigniter.

sexta-feira, 25 de novembro de 2011

CodeIgniter - Upload de Imagem

Salve, salve!

Agora eu vou mostrar como fazer Upload de imagem usando o CodeIgniter.
Quanto a View, ela pode ter o mesmo formulário utilizado no exemplo anterior de upload de imagem com PHP.

Para fazer o upload, coloque o seguinte código dentro do Controller que receberá os dados do formulário:


$config['upload_path'] = './upload/imagem/';//Caminho onde será salvo
$config['allowed_types'] = 'gif|jpg|png';//Tipos de imagem aceito
$config['max_size'] = '2048';//Tamanho - Aqui aceitamos até 2 Mb
$config['overwrite']  = FALSE;//Não irá sobre-escrever o arquivo
$config['encrypt_name'] = TRUE;//Trocará o nome do arquivo para um HASH


$field_name1 = "photo";// Nome do campo INPUT do formulário $this->load->library('upload'); $this->upload->initialize($config); 

//Faz o upload if(!$this->upload->do_upload($field_name1)) {     $error = array('erro' => $this->upload->display_errors()); }else{     $upload_data = $this->upload->data();     $nome_do_arquivo_gravado = $upload_data['file_name'];  } //Fim - Upload da Imagem

domingo, 20 de novembro de 2011

PHP - Upload de Imagem

Salve!

Aqui eu vou mostrar uma forma "simples" de se fazer Upload de imagens com o PHP.
Neste exemplo, nós vamos gerar um nome aleatório para a imagem.

Vamos ao formulário:

<form action="upload.php" method="post" enctype="multipart/form-data">
Selecione a imagem: <input name="photo" type="file" /><br />
<input name="submit" type="submit" value="Enviar" />
</form>


Agora o arquivo "upload.php":

#Inicio da função de validação e gravação de imagem
$erro = $config = array();

// Prepara a variável do arquivo
$arquivo = isset($_FILES["photo"]) ? $_FILES["photo"] : FALSE;
if($arquivo == ""){
echo "<p>Variavel de arquivo vazio</p>";}
else{echo "<p>Variavel de arquivo OK!</p>";}
// Tamanho máximo do arquivo 50Kb - 110px x 110px(em bytes)
$config["tamanho"] = 102400;
// Largura máxima (pixels)
$config["largura"] = 500;
// Altura máxima (pixels)
$config["altura"]  = 800;

// Formulário postado... executa as ações
if($arquivo)
{
    // Verifica se o mime-type do arquivo é de imagem
    if(!eregi("^image\/(pjpeg|jpeg|png|gif|bmp)$", $arquivo["type"]))
    {
        $erro[] = "Arquivo em formato inválido! A imagem deve ser jpg, jpeg,
bmp, gif ou png. Envie outro arquivo";
    }
    else
    {

        // Verifica tamanho do arquivo
        if($arquivo["size"] > $config["tamanho"])
        {
            $erro[] = "Arquivo em tamanho muito grande!
A imagem deve ser de no máximo " . $config["tamanho"] . " bytes.
Envie outro arquivo";
        }
     
        // Para verificar as dimensões da imagem
        $tamanhos = getimagesize($arquivo["tmp_name"]);
     
        // Verifica largura
        if($tamanhos[0] > $config["largura"])
        {
            $erro[] = "Largura da imagem não deve
ultrapassar " . $config["largura"] . " pixels";
        }

        // Verifica altura
        if($tamanhos[1] > $config["altura"])
        {
            $erro[] = "Altura da imagem não deve
ultrapassar " . $config["altura"] . " pixels";
        }
    }
 
    // Imprime as mensagens de erro
    if(sizeof($erro))
    {
        foreach($erro as $err)
        {
            echo " - " . $err . "<BR>";
        }

        echo "Erro no Upload da imgem - Reveja o tamanho e a largura";
    }

    // Verificação de dados OK, nenhum erro ocorrido, executa então o upload...
    else
    {
        // Pega extensão do arquivo
        preg_match("/\.(gif|bmp|png|jpg|jpeg){1}$/i", $arquivo["name"], $ext);

        // Gera um nome único para a imagem
        $imagem_nome = md5(uniqid(time())) . "." . $ext[1];

        // Caminho de onde a imagem ficará
        $imagem_dir = "upload/" . $imagem_nome;

        // Faz o upload da imagem
        if(!move_uploaded_file($arquivo["tmp_name"], $imagem_dir)){
}
    }
}


Duvidas? Deixe um comentário.
Proximo post será sobre Upload de imagem usando o CodeIgniter.

sábado, 19 de novembro de 2011

Editores / IDE para Programação em PHP


Olá!

Eu vou colocar aqui as minhas opiniões sobre qual o melhor programa para escrever códigos em PHP.

Muito se fala por ai do Eclipse. Eu já testei e me pareceu uma excelente IDE para programação. Mas um ponto que não me agradou foi o consumo de memória.

Na minha maquina (Intel Core i3, 2 Gb RAM) ele consome mais de 300 Mb assim que é inicializado. Desempenho pra mim é fundamental! E todo esse consumo de memória pra mim torna-se algo completamente descartável!

Existe um editor de texto, que se mostrou excelente além de muito útil é o Notepad++.
Editor simples, rápido, um Notepad (normal) muito melhorado!

Mas também é absurdamente simples e não possui nenhuma barra de ferramentas com funções para programação. Apesar de contar com milhares de plug-ins disponíveis para download.

Pra mim, a principal utilidade fica com a possibilidade de mudar a formatação de um arquivo para por exemplo: UTF-8 (Sem BOM). Isso é muito útil e resolve uma série de problemas com o PHP e CodeIgniter quando a programação é sobre UTF-8.

Agora o editor que eu gosto (gosto é gosto e não se discute), é o Adobe Macromedia Dreamweaver CS3.

Leve, fácil, tem funções de aut0-complete além da preferencia. E gosto tanto da versão CS3 que não tenho nem vontade de atualizar para alguma versão mais recente.

E você? Prefere o que? Algum outro software? Ou tem algo a comentar sobre os softwares que foram comentados aqui?

CodeIgniter e PagSeguro – Retorno Automático



Salve!

Vamos falar um pouco sobre a integração do UOL PagSeguro com aplicações desenvolvidas utilizando o CodeIgniter como framework.

Após muitos testes, buscas pela internet, perguntas em Fórum de discussão, eu consegui fazer pelos meus próprios meios. E compartilho aqui pois acredito que outras pessoas estejam com o mesmo problema.

Enviar as informações de pagamento para o PagSeguro é muito fácil e eu não preciso comentar nada por aqui. O grande “vilão” dessa conversa é o Retorno Automático.

Vamos começar pelo Controler.
Obs. Imagine que essa função seria exatamente a informada nas configurações de retorno do PagSeguro (http://www.seusite.com.br/retorno_automatico).


public function retorno_pagseguro(){

if (count($_POST) > 0) {

// POST recebido, indica que é a requisição do NPI.
//$npi = new PagSeguroNpi();
$this->load->library(PagSeguroNpi);//Carrega a library
$result = $this->PagSeguroNpi->notificationPost();

$transacaoID = isset($_POST['TransacaoID']) ? $_POST['TransacaoID'] : '';

if ($result == "VERIFICADO") {
//O post foi validado pelo PagSeguro.
$source = array('.', ',');
$replace = array('', '.');
$pagamento['TransacaoID'] = $_POST['TransacaoID'];
$pagamento['Referencia'] = $_POST['Referencia'];
$pagamento['TipoPagamento'] = $_POST['TipoPagamento'];
$pagamento['StatusTransacao'] = $_POST['StatusTransacao'];
$pagamento['Anotacao'] = $_POST['Anotacao'];
$pagamento['DataTransacao'] = $_POST['DataTransacao'];
$pagamento['ProdValor_1'] = str_replace($source, $replace, $_POST['ProdValor_1']);
$this->load->model('financeiro_model');//Carrega a Model
$this->financeiro_model->GravaRetorno($pagamento);//Grava os dados recebido
if($_POST['StatusTransacao'] == 'Aprovado'){
$histpagto = $this->financeiro_model->GetPagtoByID($_POST['Referencia']);
$pag['valor'] = $histpagto[0]->nu_valor;
$pag['idanunciante'] = $histpagto[0]->id_anunciante;
$this->financeiro_model->AtualizaCredito($pag);
$pag['idtransacao'] = $_POST['TransacaoID'];
$pag['idpagto'] = $_POST['Referencia'];
$this->financeiro_model->AtualizaHistPag($pag);
$informacao['status'] = '1';
}elseif($_POST['StatusTransacao'] == 'Em Análise'){
$informacao['status'] = '2';
}elseif($_POST['StatusTransacao'] == 'Aguardando Pagto'){
$informacao['status'] = '3';
}elseif($_POST['StatusTransacao'] == 'Completo'){
$informacao['status'] = '4';
}elseif($_POST['StatusTransacao'] == 'Cancelado'){
$informacao['status'] = '5';
}
} else if ($result == "FALSO") {
//O post não foi validado pelo PagSeguro.
$informacao['status'] = '1000';
} else {
//Erro na integração com o PagSeguro.
$informacao['status'] = '3';
}

} else {
// POST não recebido, indica que a requisição é o retorno do Checkout PagSeguro.
// No término do checkout o usuário é redirecionado para este bloco.
$informacao['status'] = '3';
}

$this->load->view('header_interna_view', $page_infos);//Carrega o cabeçalho
$this->load->view('empresa/sidebar_view');//Carrega a Sidebar
$this->load->view('financeiro/retorno_view', $informacao);//Carrega a view de conteudo

$this->load->view('footer_view');//carrega do rodapé

}


Agora a library:

<?php

header('Content-Type: text/html; charset=ISO-8859-1');

define('TOKEN', '2EEF70CFFCB547DBA7823F19C7D17F24');

class PagSeguroNpi {

private $timeout = 20; // Timeout em segundo

public function notificationPost() {
$postdata = 'Comando=validar&Token='.TOKEN;
foreach ($_POST as $key =>$value) {
$valued = $this->clearStr($value);
$postdata .= "&$key=$valued";
}
return $this->verify($postdata);
}

private function clearStr($str) {
if (!get_magic_quotes_gpc()) {
$str = addslashes($str);
}
return $str;
}

private function verify($data) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://pagseguro.uol.com.br/pagseguro-ws/checkout/NPI.jhtml");
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_TIMEOUT, $this->timeout);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$result = trim(curl_exec($curl));
curl_close($curl);
return $result;
}

}

?>


Testem! Qualquer problema, sugestão ou qualquer outra coisa, deixe um comentário.

Codeigniter: Pegando o ID auto-gerado depois de executar um INSERT



Olá,

Aqui vai uma dica simples mas que eu quebrei a cabeça quando comecei a utilizar o CodeIgniter.

Como pegar o ID auto-gerado pelo banco de dados depois de executar uma query INSERT?
Muito simples! Veja o exemplo a baixo:


$var['nome'] = $this->input->post('nome');
$var['email'] = $this->input->post('email');
//Recebendo os valores do formulário e armazenando em um array

$this->load->module('modulo_db');//Carrega a Model
if($this->modulo_db->grava_form($var)){
$id_auto_gerado = $this->db->insert_id();//Pega o ID auto-gerado e armazena na variavel
}

Simples não?

Este código deve ser utilizado em Controler.

PHP – Funções Recursivas


Hello World!

Aqui eu vou apresentar um caso que me deu um certo trabalho. Trata-se de uma classe usada para listar “Filhos” e os “Filhos dos Filhos” até onde forem.

Eu tive essa demanda em um sistema no qual usuários indicavam novos usuários e deveria ser apresentado uma lista com a “rede de indicados” de um determinado usuário indicante.

Segue a classe em PHP com consulta a um banco de dados MySql.

Obs: Eu não vou postar o código de conexão com o banco de dados, isso pode ser facilmente encontrado no internet.

<?php
class Rede
{
private $nivel; //Esta variavel é usada para enumerar todos os listados
private $subnivel = 0; //Esta variavel server para referenciar o pai dos listados em qualquer nível

public function verifica_filho($idpai, $nivel, $subnivel){//Função que verifica se o usuário que esta sendo listado possui filho(s) $sql = "SELECT id_usuario FROM tb_usuarios WHERE id_pai = $idpai"; $res = mysql_query($sql) or die ("Erro na Query: $sql"); if(mysql_num_rows($res) != ""){ $subnivel = $this->$nivel; $this->lista_filhos($nivel, $subnivel,$idpai); //Chama a função que lista os filhos caso o usuário tenha filhos } }//Se o usuário não tiver filhos, retorna ao loop anterior public function lista_filhos($nivel, $subnivel, $id2){ $sql1 = "SELECT id_usuario, nm_nome FROM tb_usuarios WHERE id_pai = $id2";//Lista os filhos do usuário $res1 = mysql_query($sql1) or die ("Erro na Query: $sql1"); while($row1 = mysql_fetch_array($res1)) { $this->$nivel++; echo "d.add(", $this->$nivel, ",", $subnivel, ",'", $row1["nm_nome"], "');\n";//Escreve o ID (nivel) + nome do usuário
$this->verifica_filho($row1["id_distribuidor"], $nivel, $subnivel); //Chama a função que verifica se o usuário possui filhos } } }#Fim da classe
?>


Esse é um exemplo de funções recursivas, que uma função chama a outra em um loop e é encerrada quando uma das condições não é atendida.

O mais facinante é que o PHP consegue “lembrar” de onde parou e voltar a execução a partir do ID que iniciou um loop.

Comentários e sugestões serão bem vindos!