domingo, 30 de dezembro de 2012

Pega IP, Data e Hora


Pega IP, Data e Hora


Script de log para pegar IP, Data e Hora e salva em arquivo de *.txt ideal para sites para monitorar acessos sem a necessidade de ficar escrevendo no bd.


<?php

/*
* Pega IP
* Descricao: Pega IP, Data e Hora
* Data: 01/06/2011
* Modificacao: 29/12/2012
* Versao: 1.00
* Licenca: Copyright (C) 2012
*/

// pega o valor do ip
$ip_usuario = $_SERVER['REMOTE_ADDR'];

// pega a data atual
$data = date("d/m/y");

// pega a hora
$hora = date("H:i:s");

// monta o que sera salav no arquivo ip.txt
$dados  = "\n-------------------------------------\n";
$dados .= "IP: ".$ip_usuario."\n";
$dados .= "Data: ".$data."\n";
$dados .= "Hora: ".$hora;
$dados .= "\n-------------------------------------\n";


//echo $dados;

// nome do arquivo txt
$arquivo='ip.txt'; 

// abre o arquivo 
$abre_arquivo = @fopen($arquivo,'a+');

// escrve os dados no arquivo
$salva=fwrite($abre_arquivo, $dados);

// fecha o arquivo
$fecha=fclose($abre_arquivo);

?>

até a próxima.

quarta-feira, 4 de janeiro de 2012

Como corrigir erros de codificação (acentuação)

Como corrigir erros de codificação (acentuação)


Boas a todos!
Um problema relatado com certa frequência em fóruns que participo é o de erros na acentuação de textos.
Motivado por um post aqui no Drupal, resolvi colocar essa dica para outras pessoas que passem pelo mesmo problema.
Para que a acentuação e caracteres especiais apareçam corretamente é necessário configurar os 3 ítens abaixo da mesma maneira:
1. a página;
2. o banco de dados;
3. o editor.
Considerando o uso de utf-8 (o mais indicado), como isso deve ser feito ?
1. Na página:
1.1 Definir o idioma (opcional mas recomendado)
<html xmlns="http://www.w3.org/1999/xhtml" lang="pt-br" xml:lang="pt-br">
1.2 definir o charset
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
2. No banco de dados (MySql)
2.1 Conjunto de caracteres MySQL: UTF-8 Unicode (utf8)
2.2 Collation de conexão do MySQL: utf8_unicode_ci
3. No editor. IMPORTANTE, aqui é onde aparece muito problema.
Normalmente as pessoas não se ligam na codificação que seu editor usa. Editam o arquivo, salvam e pronto. Ao enviar para o servidor, mesmo estando correto o charset da página e do bd, o erro persiste.
No nosso exemplo, usando utf-8, nosso editor precisa salvar usando utf-8 também.
No Windows normalmente os editores salvam usando iso-8859-1, para não ter problema é necessário identificar onde mudar esse parâmetro e então salvar o arquivo em utf-8.
Um exemplo de como esse pequeno detalhe muda tudo, criei 2 arquivos html idênticos em conteúdo e o charset está setado como utf-8, que pode ser constatado no código fonte da página, porém ao salvar, um foi salvo com iso-8859-1 e outro com utf-8
Vê como muda tudo ? ;)
Segue alguns editores em Windows/Linux e onde mudar essa opção:
Windows (com a colaboração do gutomec- Luiz Gustavo) :D
Dreamweaver:
1 - Para trocar o file encoding vá em Modify>Page Properties... (ou Ctrl+j);
2 - Em Category selecione Title/Encoding;
3 - Selecione em Encoding o que desejar e dê um OK;
4 - Salve o documento.
EditPlus:
1 - Vá em Documents>File Encoding>Change File Encoding;
2 - Vai abrir uma janela pedindo para selecionar o file encoding, selecione o desejade e dê um OK.
3 - Salve o documento.
Linux
Geany
1 - vá em "documento"
2 - selecione "definir codificação"
3 - escolha a codificação desejada
Gedit
1 - vá em "arquivo"
2 - selecione "salvar como"
3 - selecionar na caixa select o código desejado
Eclipse
1 - vá em "preferences
2 - em "editors" procure a opção para definir codificação

sábado, 24 de dezembro de 2011

Editando arquivos texto pelo PHP

Neste tutorial veremos como editar arquivos texto usando apenas o PHP.

Para começar, crie um arquivo com o nome de editar.php e coloque o seguinte código nele.

View source
<?php
 
 $arquivo = "teste.txt";
 
 $arquivo = file("$arquivo");
 
 echo "<form action=\"gravar.php\" id=\"form\" name=\"form\" method=\"post\">";
 
 echo "Digite o texto:<br /><textarea name=\"texto\" rows=\"20\" cols=\"90\">";
 
 foreach($arquivo as $texto) {
 
 echo "$texto";
 
 }
 
 echo "</textarea><br />";
 
 echo "<input type=\"submit\" value=\"Enviar\">";
 
 echo "</form>";
 
 ?> 
Feito isso, crie um novo arquivo com o nome de gravar.php contendo este código:

View source
<?php
 
 $arquivo = "teste.txt";
 
 $texto = $_POST["texto"];
 
 if(is_writable($arquivo)) {
 
 $manipular = fopen("$arquivo", "w");
 
 if(!$manipular) {
 
 echo "Erro
 
 
 
 Não foi possível abrir o arquivo.";
 
 }
 
 if(!fwrite($manipular, $texto)) {
 
 echo "Erro
 
 
 
 Não foi possível gravar as informações no arquivo.";
 
 }
 
 echo "O texto foi gravado com sucesso!";
 
 fclose($manipular);
 
 }
 
 else {
 
 echo "O $arquivo não tem permissões de leitura e/ou escrita.";
 
 }
 
 ?>
Agora, no mesmo local onde estão esses arquivos, crie um arquivo com o nome de teste.txt (não digite nada nele). Rode o script e veja que o arquivo é aberto e está pronto para ser editado... Digite alguma coisa e clique no botão Enviar...
Pronto... Abra novamente o arquivo e confira seu conteúdo !!!!

Criando um sistema simples de enquete em PHP

Olá pessoal. Aqui está mais um tutorial de PHP para vocês. Desta vez falaremos sobre a criação de um sistema de enquete simples (aquela enquete que permite que você vote quantas vezes quiser). Num próximo tutorial veremos como fazer essa enquete permitindo apenas um voto por IP.

Em primeiro lugar, baixe as imagens que serão as barras indicadoras de quantidade de votos aqui: DOWNLOAD.

Agora que você tem as imagens, vamos criar a seguinte estrutura (coloque em um servidor ou em localhost):
enquetes
admin
admin.php
enqadic.html
encadic.php
index.php
login.php
logout.php
imagens
barra1.gif
barra2.gif
barra3.gif
barra4.gif
enquete.php
votar.php
OBS.: Já deixe os arquivos criados, depois é só colocar o código.

Feito isso, hora de criar o banco de dados para armazenar as enquetes, votos e o login de administrador.

Abra o PhpMyAdmin e crie um banco de dados (com o nome que desejar, no tutorial demos o nome de “enquete” – sem aspas). Nesse banco de dados, vá na guia SQL e cole o seguinte código:

-- phpMyAdmin SQL Dump
-- version 2.11.3deb1ubuntu1.3
-- http://www.phpmyadmin.net
--
-- Servidor: localhost
-- Tempo de Geração: Jan 04, 2010 as 09:40 PM
-- Versão do Servidor: 5.0.51
-- Versão do PHP: 5.2.4-2ubuntu5.9

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Banco de Dados: `enquetes`
--

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

--
-- Estrutura da tabela `tblenc`
--

CREATE TABLE IF NOT EXISTS `tblenc` (
`encid` int(11) NOT NULL auto_increment,
`encprg` varchar(50) default NULL,
`encrpt1` varchar(50) default NULL,
`encrpt2` varchar(50) default NULL,
`encrpt3` varchar(50) default NULL,
`encrpt4` varchar(50) default NULL,
`encval1` int(11) NOT NULL default '0',
`encval2` int(11) NOT NULL default '0',
`encval3` int(11) NOT NULL default '0',
`encval4` int(11) NOT NULL default '0',
`enctot` int(11) NOT NULL default '0',
PRIMARY KEY  (`encid`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
-- Extraindo dados da tabela `tblenc`
--


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

--
-- Estrutura da tabela `tblusuario`
--

CREATE TABLE IF NOT EXISTS `tblusuario` (
`nomeusuario` varchar(16) NOT NULL,
`senha` varchar(32) NOT NULL,
`id` int(11) NOT NULL auto_increment,
PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

--
-- Extraindo dados da tabela `tblusuario`
--

INSERT INTO `tblusuario` (`nomeusuario`, `senha`, `id`) VALUES
('admin', '123456', 1);

Altere acima o nome do usuário (admin) e a senha (123456) para o desejado.

Veja na próxima página como criar o login a parte de “administração” das enquetes, onde você vai adicionar as enquetes.


A partir daqui, todos os arquivos a serem abertos são os da pasta “admin”. No arquivo index.php (que será a página de login) digite o seguinte código:

View source
<html>
 
 <head>
 
 <meta content="text/html; charset=ISO-8859-1"
 
 http-equiv="content-type">
 
 <title></title>
 
 </head>
 
 <body>
 
 <form method="post" action="login.php">Nome de Usuário: <input
 
 name="login" type="text"><br>
 
 Senha: <input type="password"><br>
 
 <input value="Enviar"></form>
 
 </body>
 
 </html>
Feito isso, abra o arquivo login.php e digite o seguinte código:

View source
<?
 
 session_start();
 
 $servidor="localhost"; //servidor do banco de dados, normalmente é localhost
 
 $usuario="seu_usuario"; //seu usuário do banco de dados
 
 $password="sua_senha"; //a senha do seu banco de dados
 
 $base="seu_banco_de_dados"; //o nome do seu banco de dados
 
 $SQLid = mysql_connect($servidor,$usuario,$password); //faz a conexão com o banco de dados
 
 mysql_select_db($base,$SQLid); //seleciona o banco de dados
 
 
 
 $login = $_POST['login']; //”recupera” o texto digitado no campo login
 
 $senha = $_POST['senha']; //”recupera” o texto digitado no campo senha
 
 
 
 if(!$login || !$senha){ //se a variável $login ou a variável $senha estiverem vazias
 
 echo "Você não digitou o usuário ou senha."; //avisa que os campos não foram preenchidos
 
 exit; //termina a execução do script
 
 } //termina o if(!$login || !$senha)
 
 $SQL = "select * from tblusuario where nomeusuario='$login' and senha='$senha'"; //seleciona todos os campos da tabela tblusuario onde o campo ‘nomeusuario’ seja igual a variável $login e o campo ‘senha’ seja igual a variável $senha
 
 $resultado=mysql_query($SQL) or die("Erro no banco de dados"); //executa o SQL acima
 
 $total=mysql_num_rows($resultado); //retorna o total de “linhas” encontradas pela consulta executada acima
 
 
 
 if($total){ //se $total tiver algum valor
 
 $dados=mysql_fetch_array($resultado); //retorna um array que corresponde a linha obtida
 
 if(!strcmp($senha, $dados["senha"])){ //se a senha digitada (armazenada na variável $senha) for igual a armazenada no banco de dados
 
 $_SESSION["id"] = $dados["id"]; //cria uma variável de sessão com o nome “id” e armazena o “id” do usuário
 
 $_SESSION["login"] = $dados["nomeusuario"]; //cria uma variável de sessão com “login” e armazena o “nomeusuario”
 
 $_SESSION["senha"] = $dados["senha"]; //cria uma variável de sessão com o nome “senha” que armazena a “senha”
 
 header("Location: admin.php"); //redireciona para a página “admin.php”
 
 exit; //termina a execução do script
 
 } //termina o if(!strcmp($senha,$dados[“senha”]))
 
 else{ //caso contrário (ou seja, se a senha digitada for diferente da armazenada no banco de dados)
 
 echo "Senha inválida"; //avisa que a senha está errada
 
 exit; //termina a execução do script
 
 } //termina o else
 
 } //termina o if($total)
 
 else{ //caso o usuário não exista no banco de dados
 
 echo "O usuário fornecido não existe"; //avisa que o usuário não existe
 
 exit; //termina a execução do script
 
 } //termina o else
 
 ?>
Agora que já temos o login, precisamos do logout. Abra o arquivo logout.php e digite o seguinte código:

View source
<?
 
 session_start(); //inicia a sessão
 
 session_destroy(); //destrói a sessão
 
 header("Location:index.php"); // redireciona para a página index.php
 
 ?>
Vamos agora codificar a página do administrador. Abra o arquivo admin.php e digite o seguinte código:

View source
<p align="center"><a href="/enqadic.html">Adicionar Enquete</p>
 
 <p align="center"><a href="/logout.php">Logout</a></p>
No momento, só falta um formulário para colocar os dados da nova enquete, e também o arquivo php que adiciona a enquete no banco de dados.
Abra o arquivo enqadic.html e digite o seguinte código:

View source
<form name="adiciona" method="post" action="enqadic.php">
 
 Pergunta: <input type="text"><br>
 
 Resposta 01: <input type="text"><br>
 
 Resposta 02: <input type="text"><br>
 
 Resposta 03: <input type="text"><br>
 
 Resposta 04: <input type="text"><br>
 
 <input type="submit" value="Enviar">
 
 </form>
Por último, abra o arquivo enqadic.php e digite o seguinte código:
View source
<?
 
 session_start();
 
 $pergunta = $_POST["txtperg"];
 
 $resp1 = $_POST["txtresp1"];
 
 $resp2 = $_POST["txtresp2"];
 
 $resp3 = $_POST["txtresp3"];
 
 $resp4 = $_POST["txtresp4"];
 
 $servidor="localhost";
 
 $usuario="seu_usuario"; //seu usuário do banco de dados
 
 $password="sua_senha"; //sua senha do banco de dados
 
 $base="seu_banco_de_dados"; //o nome do seu banco de dados
 
 $SQLid = mysql_connect($servidor,$usuario,$password);
 
 mysql_select_db($base,$SQLid);
 
 
 
 if(!$_SESSION["login"] || !$_SESSION["senha"]){
 
 echo "Você deve estar logado para adicionar uma enquete";
 
 exit;
 
 }else{
 
 $inclui = "INSERT INTO `$base`.`tblenc` (
 
 `encid` ,
 
 `encprg` ,
 
 `encrpt1` ,
 
 `encrpt2` ,
 
 `encrpt3` ,
 
 `encrpt4` ,
 
 `encval1` ,
 
 `encval2` ,
 
 `encval3` ,
 
 `encval4` ,
 
 `enctot`
 
 )
 
 VALUES (
 
 NULL , '$pergunta', '$resp1', '$resp2', '$resp3', '$resp4', '0', '0', '0', '0', '0'
 
 );";
 
 $executa = mysql_query($inclui);
 
 if($executa){
 
 echo "Enquete adicionada com sucesso. <a href='../index.php'>Clique aqui para voltar para a página principal";
 
 }else{
 
 echo "Erro ao adicionar a enquete";
 
 }
 
 }
 
 ?>
Pronto, a parte de administração (adição de enquete) está feita. Os arquivos que serão editados agora estão na raiz (direto na pasta enquetes).


Abra o arquivo enquete.php e digite o seguinte código (lembrando que os arquivos a serem editados daqui pra frente estão direto na pasta enquetes):

View source
<?
 
 //recebo o voto
 
 $voto = $_POST["voto"];
 
 //recebo o id da enquete
 
 $encid = $_POST["encid"];
 
 
 
 $servidor="localhost";
 
 $usuario="seu_usuario"; //seu usuário do banco de dados
 
 $password="sua_senha"; //sua senha do banco de dados
 
 $base="seu_banco_de_dados"; //o nome do seu banco de dados
 
 $SQLid = mysql_connect($servidor,$usuario,$password);
 
 mysql_select_db($base,$SQLid);
 
 $SQLquery = "UPDATE tblenc SET encval$voto = encval$voto+1, enctot = enctot+1 where encid=$encid";
 
 $SQLresult = mysql_query($SQLquery,$SQLid);
 
 $SQLquery = "SELECT * FROM tblenc where encid=$encid";
 
 $SQLresult = mysql_query($SQLquery,$SQLid);
 
 $SQLrow = mysql_fetch_array($SQLresult);
 
 ?>
 
 <P ALIGN="center"><font size="4"><strong><em>RESULTADOS PARCIAIS DA
 
 ENQUETE</em></strong></font></P>
 
 <P ALIGN="center"><strong><font size="2" face="Verdana, Arial, Helvetica, sans-serif">
 
 <?
 
 echo $SQLrow["encprg"] ;
 
 ?>
 
 </font></strong></P>
 
 <TABLE ALIGN="center" WIDTH="75%" BORDER="0" CELLSPACING="1" CELLPADDING="1">
 
 <!--DWLayoutTable-->
 
 <TR>
 
 <TD ALIGN="left" WIDTH="23%"><? echo $SQLrow["encrpt1"];?>
 
 <div align="left"></div></TD>
 
 <TD><IMG HEIGHT="5" WIDTH="<? echo $SQLrow["encval1"]*100/$SQLrow["enctot"];?>%" SRC="imagens/barra1.gif"></TD>
 
 <TD ALIGN="center" WIDTH="14%"><? echo $SQLrow["encval1"];?> votos</TD>
 
 </TR>
 
 <TR>
 
 <TD ALIGN="left"><? echo $SQLrow["encrpt2"];?>
 
 <div align="left"></div></TD>
 
 <TD><IMG HEIGHT="5" WIDTH="<? echo $SQLrow["encval2"]*100/$SQLrow["enctot"];?>%" SRC="imagens/barra2.gif"></TD>
 
 <TD ALIGN="center"><? echo $SQLrow["encval2"];?> votos</TD>
 
 </TR>
 
 <TR>
 
 <TD ALIGN="left"><? echo $SQLrow["encrpt3"];?>
 
 <div align="left"></div></TD>
 
 <TD><IMG HEIGHT="5" WIDTH="<? echo $SQLrow["encval3"]*100/$SQLrow["enctot"];?>%" SRC="imagens/barra3.gif"></TD>
 
 <TD ALIGN="center"><? echo $SQLrow["encval3"];?> votos</TD>
 
 </TR>
 
 <TR>
 
 <TD ALIGN="left"><? echo $SQLrow["encrpt4"];?>
 
 <div align="left"></div></TD>
 
 <TD><IMG HEIGHT="5" WIDTH="<? echo $SQLrow["encval4"]*100/$SQLrow["enctot"];?>%" SRC="imagenes/barra4.gif"></TD>
 
 <TD ALIGN="center"><? echo $SQLrow["encval4"];?> votos</TD>
 
 </TR>
 
 </TABLE>
 
 <P ALIGN="center">Total de votos emitidos: <? echo $SQLrow["enctot"];?></P>
Por ultimo, abra o arquivo votar.php e digite o seguinte código:

View source
<?
 
 $servidor="localhost";
 
 $usuario="seu_usuario"; //seu usuário do banco de dados
 
 $password="sua_senha"; //sua senha do banco de dados
 
 $base="seu_banco_de_dados"; //o nome do seu banco de dados
 
 $SQLid = mysql_connect($servidor,$usuario,$password);
 
 mysql_select_db($base,$SQLid);
 
 $SQLquery = "SELECT * FROM tblenc order by encid desc";
 
 $SQLresult = mysql_query($SQLquery,$SQLid);
 
 $SQLrow = mysql_fetch_array($SQLresult);
 
 ?>
 
 <form method="post" action="enquete.php">
 
 <input name="encid" value="<?echo $SQLrow[0]?>">
 
 <table width="100" border="0" align="center" cellpadding="0" cellspacing="0">
 
 <tr>
 
 <td bgcolor="#000000"><font color="#FFFFFF" size="1" face="Verdana, Arial, Helvetica, sans-serif">::::::::::::::::::</font></td>
 
 </tr>
 
 <tr>
 
 <td bgcolor="#000000"> <div align="center"><font color="#ffffff" size="2" face="Verdana, Arial, Helvetica, sans-serif"><strong>
 
 <? echo $SQLrow[1]?>
 
 </strong></font></div></td>
 
 </tr>
 
 <tr>
 
 <td bgcolor="#000000"> <p> <font color="#ffffff" size="2">
 
 <label>
 
 <input value="1">
 
 <? echo $SQLrow[2]?></label>
 
 <br>
 
 <label>
 
 <input value="2">
 
 <? echo $SQLrow[3]?></label>
 
 <br>
 
 <label>
 
 <input value="3">
 
 <? echo $SQLrow[4]?></label>
 
 <br>
 
 <label>
 
 <input value="4">
 
 <? echo $SQLrow[5]?></label>
 
 <br>
 
 </font></p></td>
 
 </tr>
 
 <tr>
 
 <td bgcolor="#000000"> <div align="center">
 
 <input value="Aceitar">
 
 </div></td>
 
 </tr>
 
 </table>
 
 </form>
 
 
Pronto, seu sistema de enquetes está feito. Para adicionar a enquete na página principal, a mesma deve ser salva com a extensão .php e você deve adicionar o seguinte código onde desejar que ela apareça:

View source
<? include "votar.php"; ?>
É isso aí. Espero que tenham gostado e qualquer dúvida, só falar. Lembrando que no próximo tutorial iremos melhorar este sistema, permitindo apenas um voto por IP e adicionando o recurso de poder excluir uma enquete.