Sisteminha simples de Enquete com PHP e MySql

Filed Under (PHP, Programação) by Alex P. Torres on 02-03-2010

Tagged Under : , , ,

Bom hoje vamos criar um sistema simples de enquete com PHP e m MySql
muito simples primeiramente vou mostrar o SQL  para colocar no Mysql


CREATE TABLE `enquete` (
 `ip` VARCHAR( 16 ) NOT NULL ,
 `votacao` INT( 1 ) NOT NULL ,
 UNIQUE (
 `ip`
 )
);

Se voce quiser que o usuario efetua varias votações você somente
tira

 UNIQUE (
 `ip`
 )
feito isto faremos o calculode  porcentagem.
$porcentaje = round($votos/$total*100,2); 

Gerador de miniaturas que gravam em seu servidor ( Thumbnails )

Filed Under (PHP, Programação) by Alex P. Torres on 17-11-2009

Tagged Under : , , , , , , , , , , ,

icone_jpeg

gerador de miniaturas no codigo esta o autor e on tutorial bem simples.


<?php

/***
script que gera efetua download de imagens e gera miniaturas

Se miniatura nao existir, gera a miniatura
Apos ou se a miniatura ja existir, redireciona o usuario para a imagem em cache

autor: Roberto Berto darkelder@php.net
licença: GPL v2

Caracteristicas:
- gera miniaturas JPG ja do width e height desejado
- usa cache: o algoritmo de redimensionamento - que e' pesado - e' utilizado
apenas uma vez para cada imagem, sendo o resultado salvo em uma pasta

Exemplo:
- sua imagem em tamanho grande esta em http://www.seusite.com.br/fotos/foto_joao.jpg
o tamanho da mesma e' 640x480 pixels
- voce utiliza o seguinte codigo hoje:
<img src="/fotos/foto_joao.jpg" width="80" height="60" >

- agora utilize apenas da seguinte forma:
<img src="/miniatura.php?foto=/fotos/foto_joao.jpg&width=80" width="80" height="60" >

onde:
foto= url da foto
width= tamanho em pixels da largura a ser gerada
height= tamanho em pixels da altura a ser gerada

Configuracao:
1) altere a constante de PASTA e URL da PASTA abaixo para a pasta onde as miniaturas serao salvas

2) voce deve criar a pasta da constante pelo seu FTP sem nenhum arquivo dentro

3) pergunte ao seu provedor se a pasta tem permissao para gravar arquivos, dependendo da configuracao
do provedor e' necessario adicionar essa permissao na pasta. Geralmente isso pode ser feito por voce
mesmo no gerenciador de arquivos do seu painel de controle ou pelo seu programa de FTP com o chmod 0777
Na TeHospedo (http://tehospedo.com.br/), que e' o provedor onde trabalho, esse procedimento nao e' necessario nem no Windows
nem no Linux

**/

// essa variavel e' o seu dominio
define("URL_SITE", 'http://seusite.com.br'); # ----> nao ponha / no final

/******* configuracao para linux **********/
// em linux na TeHospedo apenas altere meuUserdeFTP:
define("PASTA_CACHE", '/home/meuuserdeFTP/public_html/miniaturas/');

/******* configuracao para windows ********/
// em windows na TeHospedo descomente a linha abaixo e mude apenas o meuDominio.com.br:
// mesmo em windows, nao use \ para separar diretorios, use / que e' mais facil
// se descomentar a linha abaixo comente o define anterior
//
// define("PASTA_CACHE", 'd:/domains/meuDominio.com.br/wwwroot/miniaturas/');

/******* configuracao tanto para windows quanto para linux ******/
// a URL abaixo deve corresponder ao endereco web da PASTA_CACHE
define('URL_CACHE', 'http://seusite.com.br/miniaturas'); # ---> nao ponha / no final

// se for uma grande quantidade de arquivos, e' interessante deixar true
// assim, ira separar as miniaturas em subpastas
define('USAR_MULTI_DIRETORIOS', true);

////////////////////// NAO EDITE ABAIXO /////////////////////////
////////////////////// NAO EDITE ABAIXO /////////////////////////
////////////////////// NAO EDITE ABAIXO /////////////////////////
////////////////////// NAO EDITE ABAIXO /////////////////////////
////////////////////// NAO EDITE ABAIXO /////////////////////////

/******** tratamento de variaveis *********/
$url = URL_SITE . '/' . $_REQUEST['foto'];

$width = (int)$_REQUEST['width'];

$width = 143;

// nome dos arquivos que sera usado dentro da pasta de cache
$arquivo = sprintf("%s-%d.jpg",
  md5($url),
  $width
);

if (USAR_MULTI_DIRETORIOS == true) {
	// nome do arquivo com multiplos diretorios
	$arquivo_full = sprintf("%s/%s/%s",
	   substr($arquivo, 0, 2),
	   substr($arquivo, 2, 2),
	   $arquivo
	);
} else {
 	// nome do arquivo sem multiplos diretorios
	$arquivo_full = $arquivo;
}

// path e url do arquivo completa
$arquivo_path = sprintf("%s/%s", PASTA_CACHE, $arquivo_full);
$arquivo_path = str_replace("//", "/", $arquivo_path); // substitui // por /
$arquivo_url  = sprintf("%s/%s", URL_CACHE, $arquivo_full);
$arquivo_path_tmp = $arquivo_path . '.tmp';

/*

printf("full: %s\n", $arquivo_full);
printf("path: %s\n", $arquivo_path);
printf("url: %s\n", $arquivo_url);
*/

if (file_exists($arquivo_path)) { // arquivo existe, vamos apenas redirecionar para ele
	header(sprintf("Location: %s", $arquivo_url));
	exit;
}

// miniatura nao existe, vamos gerar!

// gerar subdiretorio se for usado este metodo
if (USAR_MULTI_DIRETORIOS == true) {
	$dir_level_1 = sprintf("%s/%s",
		PASTA_CACHE,
	        substr($arquivo, 0, 2)
	);

	$dir_level_2 = sprintf("%s/%s/%s",
		PASTA_CACHE,
	        substr($arquivo, 0, 2),
		substr($arquivo, 2, 2)
	);

	// subdiretorio nao existe, cria
	if (!file_exists($dir_level_1)) {
		mkdir($dir_level_1);
	}

	if (!file_exists($dir_level_2)) {
		mkdir($dir_level_2);
	}
}

// efetuar download da miniatura num arquivo tmp
$fp = fopen($arquivo_path_tmp, 'w');

// abre o arquivo
$dados = file_get_contents($url);
if ($dados === false) {
	die("nao posso abrir o arquivo\n\n");
}

fwrite($fp, $dados);

// gerar o thumb

$i = new imagethumbnail();
$i->open($arquivo_path_tmp); // coloque aqui o nome do arquivo original
$i->setX($width);
$i->imagejpeg($arquivo_path, 70);

unlink($arquivo_path_tmp);

if (file_exists($arquivo_path)) { // arquivo existe, vamos apenas redirecionar para ele
	header(sprintf("Location: %s", $arquivo_url));
	exit;
}

die("Algum erro ocorreu");

    class imagethumbnail {

        var $filename;
        var $x;
        var $y;
        var $image;
        var $thumbnail;

        function open($filename) {

            $this->filename = $filename;
            $imageinfo = array();
            $imageinfo = getimagesize($this->filename,$imageinfo);

            $this->old_x = $imageinfo[0];
            $this->old_y = $imageinfo[1];

            switch ($imageinfo[2]) {
                case "1": $this->image = imagecreatefromgif($this->filename); break;
                case "2": $this->image = imagecreatefromjpeg($this->filename); break;
                case "3": $this->image = imagecreatefrompng($this->filename); break;
            }

        }

        function setX($x="") {
            if (isset($x)) { $this->x = $x; }
            return $this->x;
        }

        function setY($y="") {
            if (isset($y)) { $this->y = $y; }
            return $this->y;
        }

        function generate() {

            if ($this->x > 0 and $this->y > 0) {
                $new_x = $this->x;
                $new_y = $this->y;
            } elseif ($this->x > 0 and $this->x != "") {
                $new_x = $this->x;
                $new_y = ($this->x/$this->old_x)*$this->old_y;
            } else {
                $new_x = ($this->y/$this->old_y)*$this->old_x;
                $new_y = $this->y;
            }

            $this->thumbnail = imagecreatetruecolor($new_x,$new_y);
            $white = imagecolorallocate($this->thumbnail,255,255,255);
            imagefill($this->thumbnail,0,0,$white);

            imagecopyresampled ( $this->thumbnail, $this->image, 0, 0, 0, 0, $new_x, $new_y, $this->old_x, $this->old_y);

        }

        function imagejpeg($filename="",$quality=100) {
            if (!isset($this->thumbnail)) { $this->generate(); }
            imagejpeg($this->thumbnail,$filename,$quality);
        }

    }

?>

Duvidas comente

<?php

/***
script que gera efetua download de imagens e gera miniaturas

Se miniatura nao existir, gera a miniatura
Apos ou se a miniatura ja existir, redireciona o usuario para a imagem em cache

autor: Roberto Berto darkelder@php.net
licença: GPL v2

Caracteristicas:
- gera miniaturas JPG ja do width e height desejado
- usa cache: o algoritmo de redimensionamento - que e' pesado - e' utilizado
apenas uma vez para cada imagem, sendo o resultado salvo em uma pasta

Exemplo:
- sua imagem em tamanho grande esta em http://www.seusite.com.br/fotos/foto_joao.jpg
o tamanho da mesma e' 640x480 pixels
- voce utiliza o seguinte codigo hoje:
<img src="/fotos/foto_joao.jpg" width="80" height="60" >

- agora utilize apenas da seguinte forma:
<img src="/miniatura.php?foto=/fotos/foto_joao.jpg&width=80" width="80" height="60" >

onde:
foto= url da foto
width= tamanho em pixels da largura a ser gerada
height= tamanho em pixels da altura a ser gerada

Configuracao:
1) altere a constante de PASTA e URL da PASTA abaixo para a pasta onde as miniaturas serao salvas

2) voce deve criar a pasta da constante pelo seu FTP sem nenhum arquivo dentro

3) pergunte ao seu provedor se a pasta tem permissao para gravar arquivos, dependendo da configuracao
do provedor e' necessario adicionar essa permissao na pasta. Geralmente isso pode ser feito por voce
mesmo no gerenciador de arquivos do seu painel de controle ou pelo seu programa de FTP com o chmod 0777
Na TeHospedo (http://tehospedo.com.br/), que e' o provedor onde trabalho, esse procedimento nao e' necessario nem no Windows
nem no Linux

**/

// essa variavel e' o seu dominio
define("URL_SITE", 'http://seusite.com.br'); # ----> nao ponha / no final

/******* configuracao para linux **********/
// em linux na TeHospedo apenas altere meuUserdeFTP:
define("PASTA_CACHE", '/home/meuuserdeFTP/public_html/miniaturas/'); 

/******* configuracao para windows ********/
// em windows na TeHospedo descomente a linha abaixo e mude apenas o meuDominio.com.br:
// mesmo em windows, nao use \ para separar diretorios, use / que e' mais facil
// se descomentar a linha abaixo comente o define anterior
//
// define("PASTA_CACHE", 'd:/domains/meuDominio.com.br/wwwroot/miniaturas/');  

/******* configuracao tanto para windows quanto para linux ******/
// a URL abaixo deve corresponder ao endereco web da PASTA_CACHE
define('URL_CACHE', 'http://seusite.com.br/miniaturas'); # ---> nao ponha / no final

// se for uma grande quantidade de arquivos, e' interessante deixar true
// assim, ira separar as miniaturas em subpastas
define('USAR_MULTI_DIRETORIOS', true);

////////////////////// NAO EDITE ABAIXO /////////////////////////
////////////////////// NAO EDITE ABAIXO /////////////////////////
////////////////////// NAO EDITE ABAIXO /////////////////////////
////////////////////// NAO EDITE ABAIXO /////////////////////////
////////////////////// NAO EDITE ABAIXO /////////////////////////

/******** tratamento de variaveis *********/
$url = URL_SITE . '/' . $_REQUEST['foto'];

$width = (int)$_REQUEST['width'];

$width = 143;

// nome dos arquivos que sera usado dentro da pasta de cache
$arquivo = sprintf("%s-%d.jpg",
  md5($url),
  $width
);

if (USAR_MULTI_DIRETORIOS == true) {
	// nome do arquivo com multiplos diretorios
	$arquivo_full = sprintf("%s/%s/%s",
	   substr($arquivo, 0, 2),
	   substr($arquivo, 2, 2),
	   $arquivo
	);
} else {
 	// nome do arquivo sem multiplos diretorios
	$arquivo_full = $arquivo;
}

// path e url do arquivo completa
$arquivo_path = sprintf("%s/%s", PASTA_CACHE, $arquivo_full);
$arquivo_path = str_replace("//", "/", $arquivo_path); // substitui // por /
$arquivo_url  = sprintf("%s/%s", URL_CACHE, $arquivo_full);
$arquivo_path_tmp = $arquivo_path . '.tmp';

/*

printf("full: %s\n", $arquivo_full);
printf("path: %s\n", $arquivo_path);
printf("url: %s\n", $arquivo_url);
*/

if (file_exists($arquivo_path)) { // arquivo existe, vamos apenas redirecionar para ele
	header(sprintf("Location: %s", $arquivo_url));
	exit;
}

// miniatura nao existe, vamos gerar!

// gerar subdiretorio se for usado este metodo
if (USAR_MULTI_DIRETORIOS == true) {
	$dir_level_1 = sprintf("%s/%s",
		PASTA_CACHE,
	        substr($arquivo, 0, 2)
	);

	$dir_level_2 = sprintf("%s/%s/%s",
		PASTA_CACHE,
	        substr($arquivo, 0, 2),
		substr($arquivo, 2, 2)
	);

	// subdiretorio nao existe, cria
	if (!file_exists($dir_level_1)) {
		mkdir($dir_level_1);
	}

	if (!file_exists($dir_level_2)) {
		mkdir($dir_level_2);
	}
}

// efetuar download da miniatura num arquivo tmp
$fp = fopen($arquivo_path_tmp, 'w');

// abre o arquivo
$dados = file_get_contents($url);
if ($dados === false) {
	die("nao posso abrir o arquivo\n\n");
}

fwrite($fp, $dados);

// gerar o thumb

$i = new imagethumbnail();
$i->open($arquivo_path_tmp); // coloque aqui o nome do arquivo original
$i->setX($width);
$i->imagejpeg($arquivo_path, 70);

unlink($arquivo_path_tmp);

if (file_exists($arquivo_path)) { // arquivo existe, vamos apenas redirecionar para ele
	header(sprintf("Location: %s", $arquivo_url));
	exit;
} 

die("Algum erro ocorreu");

    class imagethumbnail {

        var $filename;
        var $x;
        var $y;
        var $image;
        var $thumbnail;

        function open($filename) {

            $this->filename = $filename;
            $imageinfo = array();
            $imageinfo = getimagesize($this->filename,$imageinfo);

            $this->old_x = $imageinfo[0];
            $this->old_y = $imageinfo[1];

            switch ($imageinfo[2]) {
                case "1": $this->image = imagecreatefromgif($this->filename); break;
                case "2": $this->image = imagecreatefromjpeg($this->filename); break;
                case "3": $this->image = imagecreatefrompng($this->filename); break;
            }

        }

        function setX($x="") {
            if (isset($x)) { $this->x = $x; }
            return $this->x;
        }

        function setY($y="") {
            if (isset($y)) { $this->y = $y; }
            return $this->y;
        }

        function generate() {

            if ($this->x > 0 and $this->y > 0) {
                $new_x = $this->x;
                $new_y = $this->y;
            } elseif ($this->x > 0 and $this->x != "") {
                $new_x = $this->x;
                $new_y = ($this->x/$this->old_x)*$this->old_y;
            } else {
                $new_x = ($this->y/$this->old_y)*$this->old_x;
                $new_y = $this->y;
            }

            $this->thumbnail = imagecreatetruecolor($new_x,$new_y);
            $white = imagecolorallocate($this->thumbnail,255,255,255);
            imagefill($this->thumbnail,0,0,$white);

            imagecopyresampled ( $this->thumbnail, $this->image, 0, 0, 0, 0, $new_x, $new_y, $this->old_x, $this->old_y);

        }

        function imagejpeg($filename="",$quality=100) {
            if (!isset($this->thumbnail)) { $this->generate(); }
            imagejpeg($this->thumbnail,$filename,$quality);
        }

    }

?>

Redirecionar sites dependendo do IP do pais ou estado

Filed Under (PHP, Programação) by Alex P. Torres on 17-11-2009

Tagged Under : , , , , , , , , , ,

globo
Muitas veces você se pergunta como o Google faz ou o Yahoo, para redirecionar para seu Pais ?
é simples com a Classe em PHP  geoPlugin com esta classe você podera pégar valores como estes:

array (
  'geoplugin_city' => '',
  'geoplugin_region' => '',
  'geoplugin_areaCode' => '0',
  'geoplugin_dmaCode' => '0',
  'geoplugin_countryCode' => 'BR',
  'geoplugin_countryName' => 'Brazil',
  'geoplugin_continentCode' => 'SA',
  'geoplugin_latitude' => '-10',
  'geoplugin_longitude' => '-55',
  'geoplugin_currencyCode' => 'BRL',
  'geoplugin_currencySymbol' => 'R$',
  'geoplugin_currencyConverter' => 1.7130000335,
)

è muito util para quem trabalha com sites no Exterior ou quer
identificar seus usuarios que acessam.
como vocês vem o geoPlugin utiliza o seu proprio Webservice
no site deles vocês tem varios exemplos de como utilizar.
aqui eu vou ensinar como redirecinar um site utiliza a classe
geoPlugin e seu webservice.
aqui vai o codigo.

</pre>
<?php
require_once('geoplugin.class.php');
/// CHAMAMOS A CLASSE
$geoplugin = new geoPlugin();

 ///COMEÇA CLASSE
$geoplugin->locate();

 /// ESTE VALOR PEGA O IP DO USUARIO PARA USAR NA CLASSE
$ip= $geoplugin->ip ;

/// VERIFICA O CODIGO DO PAIS
$cod_pais = $geoplugin->countryCode ;

/// APARTIR DAQUI VERIFICA SI ALGUM VALOR CORRESPONDE
/// SE FOR "BR" REDIRECIONAR PARA SITE DO BRASIL
/// SE FOR "AR" REDIRECIONAR PARA O SITE DA ARGENTINA
if ($cod_pais=="BR"){
 /// SITE DO BRASIL
 $pag = "http://www.amixel.com.br/index.php";
}

if ($cod_pais=="AR"){
 //// SITE DA ARGENTINA
 $pag = "http://www.amixel.com.ar/index.php";
}

if ($cod_pais=="US"){
 /// SITE DE ESTADOS UNIDOS
 $pag = "http://www.amixel.com.ar/index.php";
}

if ($cod_pais=="PY"){
 /// SITE DE ´PARAGUAY
 $pag = "http://www.amixel.com.ar/index.php";
}

if ($cod_pais=="UY"){
 /// SITE DE URUGUAY
 $pag = "http://www.amixel.com.ar/index.php";
}

#if ($cod_pais=="BO"){
 /// SITE DE BOLOVIA
 #$pag = "http://www.SEUSITE.com/index.php";
#}

/// FAZ O REDIRECIONAMENTO
header("Location: $pag");

?>

a estava esquecendo para ficar mais facil Download Classe

Bom esse foi o codigo bem simples.
espero que tenham gostado si tiverem duvidas comente…

MySQL no ASP

Filed Under (ASP, Programação) by Alex P. Torres on 03-11-2009

Tagged Under : , ,

O servidor de banco de dados MySQL não é mais uma exclusividade dos servidores Linux, nem da linguagem PHP. Com o MyODBC, um driver ODBC para acessar servidores MySQL, diversos programas e outras linguagens também podem usar essa poderosa ferramenta. Dentre eles, o Visual Basic, o Delphi, o Excel, o Cold Fusion e o ASP. São Muitas vantagens.

O MySQL é mais eficiente que o Access, portanto, o seu site pode ficar muito mais rápido sem que seja feita nenhuma alteração na programação. Além disso, se você desenvolve sites em diversas linguagens, não precisa criar bancos de dados duplicados (um no SQL Server, outro no MySQL, e outros) pois tudo pode ficar num só local, economizando tempo no desenvolvimento do site.

A seguir, você confere as informações para usar o MyODBC. Para testá-lo, instale em seu computador o servidor o MySQL Server(http://www.mysql.com/Downloads/MySQL-3.23/mysql-3.23.49-win.zip) 12MB, para Windows 95/98/ME/NT/2000/XP, MyODBC (http://www.mysql.com/Downloads/MyODBC/myodbc-2.50.39-win95.zip) 1.5MB, para Windows 95/98/ME ou (http://www.mysql.com/Downloads/MyODBC/myodbc-2.50.39-nt.zip) 1.5MB para Windows NT/2000/XP, e o Personal Web Sever (servidor Web com suporte a ASP da Microsoft). Caso não esteja instalado no seu servidor, solicite a instalação desse driver ao suporte técnico do seu provedor de hospedagem.

Instalação:

Com o driver MyODBC já instalado, você precisa editar o código ASP para fazer a conexão com o servidor. Existem duas formas para acessar o servidor MySQL, uma com DSN (Data Sourse Name – Nome da Fonte de Dados) e outra sem.
Veja como ela são feitas:

Conexão com DSN:

Antes de editar o código-fonte ASP, você precisa criar o DSN no ODBC para fazer a conexão com o banco de dados. Para isso, abra o Painel de controle do Windows e entre em Fonte de dados ODBC. Clique na aba DSN de sistema, dê Adicionar, selecione MySQL e dê OK.

Preencha o formulário, onde o Windows DSN Name é o nome que desejar (por exemplo, “bancodedados”). MySQL Host é o endereço do servidor, MySQL Database Name é o nome do banco de dados a ser acessado. User é seu nome de usuário e Password é a sua senha. Dê OK, digite o código abaixo no arquivo com_dsn.asp no editor de sua preferência e salve-o na pasta “c:\inetpub\wwwroot”.

com_dsn.asp
<%
Set cnnDB = Server.CreateObject("ADODB.Connection")
cnnDB.ConnectionString = "DSN=bancodedados"
cnnDB.Open
%>

No script, o parâmetro “bancodedados” é o nome do DSN criado no ODBC. Abra o seu navegador e acesse o endereço http://127.0.0.1/com_dsn.asp. Se nenhuma mensagem for exibida na tela, a conexão foi realizada com sucesso. Caso contrário, serão informados os erros ocorridos.

Conexão sem DSN:

A principal diferença entre uma conexão com DSN e outra sem é quem neste segundo método as informações que você configurou no ODBC são digitadas diretamente no código ASP, sem nenhuma interfase do Windows.

Digite o código sem_dsn.asp num editor, conforme as configurações de seu servidor. A opção diver define o tipo de banco de dados, a server informa o endereço do servidor, a uid e a pwd os dados do seu usuário e a database seleciona o banco de dados. Salve-o arquivo na pasta “c:\inetpub\wwwroot” e acesse o endereço http://127.0.0.1/sem_dsn.asp no seu navegador.

<%
Set cnnDB = Server.CreateObject("ADODB.Connection")
cnnDB.ConnectionString = "driver=MySQL;server=127.0.0.1;uid=usuario;pwd=senha;database=banco_de_dados"
cnnDB.Open
%>

Glossário:

Sistema DSN:

O System Data Source Name (Sistema de Nome de Fonte de Dados) é um registro que armazena as informações necessárias para fazer a conexão com o banco de dados, tais como o tipo de banco de dados, o usuário e a senha. Com ele, a linha de conexão ao banco de dados do script ASP fica mais simples, já que essas informações são associadas a um nome (Nome de Fonte de Dados) e não precisam ser incluídas no script. Por outro lado, é necessário solicitar a configuração do DSN ao seu provedor de hospedagem, caso ele não tenha um painel de administração onde vc mesmo possa fazer as alterações.

ODBC:

Open Data Base Connectivity (ODBC) é uma aplicação que permite acessar banco de dados no Windows. Ela atua como um tradutor que faz a conexão entre os bancos de dados e os programas. A linguagem usada é o SQL. Assim, independente do tipo do banco de dados, os comandos de acesso aos registros serão os mesmos. Os tipos de banco de dados suportados no ODBC, no entanto, depende dos drives instalados.