Arquivo

Textos com Etiquetas ‘Programação’

Operador Ternário no PHP

4, junho, 2010

Existe uma forma diferente de se trabalhar com condições no PHP… Se chama Operador Ternário e ele deixa o código mais resumido, e mais otimizado.

O seu uso consiste em agrupar, na mesma linha, a condição, os comandos para true (verdadeiro) e os comandos para false (falso).

Vamos ao velho exemplo de condições (if) que todo mundo já viu:

1
2
3
4
5
6
7
8
<?
$nota = 4;
if ($nota >= 7) {
echo "Você passou!";
} else {
echo "Você não passou!";
}
?>

Agora veja a versão ternária desse mesmo código:

1
2
3
4
<?
$nota = 4;
echo ($nota >= 7) ? "Você passou!" : "Você não passou!";
?>

A sintaxe do operador ternário é a seguinte:
(< condição >) ? < instruções para verdadeiro > : < instruções para falso >;

Veja outro exemplo de uso do operador ternário:

1
2
3
4
5
6
7
8
9
10
11
<?
// Atribuição de um valor padrão a uma variável
// Versão "padrão"
if (!isset($variavel)) {
$variavel = 'valor padrão';
} else {
$variavel = $variavel;
}
// Versão usando operador ternário
$variavel = (!isset($variavel)) ? 'valor padrão' : $variavel;
?>

Não se esqueçam de ver a documentação oficial sobre operadores de comparação, dentre os quais está o operador ternário.

Espero que tenham gostado! :)

Anderson Dicas, PHP, Programação ,

SQL Injection no PHP

19, fevereiro, 2010

Recentemente tive um site invadido onde o próprio invasor me enviou um e-mail mostrando alguns dados do meu banco e dizendo que poderia corrigir o problema mediante pagamento.
Fiz uma analise procurando saber como o site foi invadido. Depois de muito analizar, chego a conclusão que foi por SQL Injection.
Segue abaixo uma alternativa que evita esse tipo de ataque:

Primeiro crie um arquivo com o seguinte conteúdo:
funcoes.inc.php

<?
function anti_injection_post($array) {
  	foreach ($array as $key=>$value) {
		$array[$key] = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|truncate|#|\*|--|\\\\)/"),"",$array[$key]);
		$array[$key] = trim($array[$key]);
		$array[$key] = strip_tags($array[$key]);
		$array[$key] = addslashes($array[$key]);
  	}
	return $array;
}
?>

Posteriormente nos arquivos do site onde você irá usar os arrays $_POST e $_GET use o seguinte no inicio do arquivo:

<?
include_once('funcoes.inc.php');
$_POST = anti_injection_post($_POST);
$_GET  = anti_injection_post($_GET);
.
.
.
?>

Essa função evita que seja inserido instruções sql em campos ou na barra de endereço do seu site.

é isso ai…

Update:
Agradecimento ao meu irmão Andriel pela colaboração.

Anderson PHP, Programação ,

Enviando emails agendados com Crontab

4, dezembro, 2009

Há tempo venho prucurando soluções rápidas e ágeis para o envio de emails automaticamente por email.
A solução que eu vou apresentar aqui, é uma das mais fáceis, é ESTRUTURADA e funciona (BEM e sem erros).

A primeira coisa, criar uma base de dados qualquer (ou usar a que você já tem) e a tabela. No meu caso vou usar uma base já existente, e uma tabela chamada aniversariantes.

A estrutura da tabela aniversariantes:

1
2
3
4
5
6
7
CREATE TABLE `aniversariantes` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nome` varchar(255) NOT NULL DEFAULT '',
`email` varchar(255) NOT NULL DEFAULT '',
`data` date NOT NULL DEFAULT '0000-00-00',
KEY `id` (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1

Insira alguns registros nesta tabela, para que possamos trabalhar com os mesmos.

Agora vamos criar um script PHP que fará a tarefa de selecionar o aniversariante pela data de aniversário e enviar o email.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?
// dados comuns de conexão
$host = "localhost";
$usuario = "meuusuario";
$senha = "senha";
$base = "teste";
$tabela = "aniversariantes";
 
//Pegamos então q data atual do sistema e quebramos o dia e mes separando-os
//através do explode na variável $date.
$date = date("Y-m-d");
list($anoatual, $mesatual, $diaatual) = explode("-", $date);
 
// efetuando a conexão
$con = mysql_connect($host, $usuario, $senha);
mysql_select_db($base);
 
//Selecionamos todos os usuários do banco que atendam o critério de busca
$aniversario = mysql_query("SELECT * FROM $tabela WHERE dataniver &gt; $date")
or die("Não conectou: " . mysql_error());
 
//Efetuamos um loop com as seguintes condições: se o mês atual for igual ao
//mês atual do aniversário do usuário (gravado no campo dataniver da tabela) e
//se o dia atual for igual ao dia do aniversário do usuário (gravado no mesmo 
//campo) envia o email de aniversário.
while ($row = mysql_fetch_array($aniversario)) {
  list($ano, $mes, $dia) = explode("-", $row[3]);
  if ($mesatual == $mes) {
    if ($diaatual == $dia) {
      mail ($row['email'],"Feliz aniversário","Parabéns pelo seu dia!");
    }
  }
}
 
?>

Então temos um script básico que faz o que tem que fazer. Mas e rodá-lo todos os dias?

Aí é que entra o famoso CRON ou crontab para os mais íntimos (e familiarizados com ambientes IX). Nele podemos agendar uma tarefa para ser executada de tempos em tempos.

Tendo posse do terminal da máquina (ou utilize o Cpanel da sua hospedagem, seguindo as instruções) digite:

# crontab -e

E adicione as seguintes linhas no arquivo:

* * * * * php /var/www/homedosite/enviaemailaniversarios.php

O que significa a linha acima? Significa que todos os dias, de todos os meses e de todos os anos * * * * o crontab irá rodar o script php presente na pasta mencionada por você. Note que ali deve sempre ser informado o caminho abosluto do arquivo php.

Agora, para que o Cron saiba que o que você está executando é um arquivo PHP e deve ser interpretado como tal, adicione a seguinte linha ao seu arquivo enviaemailaniversarios.php antes de abrir qualquer tag PHP, ou seja, na primeiríssima linha:

#!/usr/local/bin/php -q

Isso vai informar ao Cron, que para rodar este arquivo agendado, deve ser utilizado o binário do PHP, ou seja, “o exe” do PHP, para que a aplicação seja interpretada corretamente.

Não podemos esquecer de dar permissão de execução para o arquivo enviaemailaniversarios.php:

# chmod 777 </span><span>enviaemailaniversarios.php

Pronto, já está tudo funcionando.

Abraços!

Fonte

Update:
Descobri que em algumas contas do cpanel, o cron não funcionava corretamente, então achei a seguinte solução:
Deve-se adicionar o parâmetro -q na linha de comando do cron como segue:

* * * * * php -q /home/homedosite/public_html/enviaemailaniversarios.php

e a linha

#!/usr/local/bin/php -q

não é mais necessária no arquivo php.

Anderson Dicas, Linux, Programação ,

Dividir String em delphi

6, outubro, 2009

Com o uso da função

ExtractStrings(delimitador,espaco_branco,string,resultado);

pode-se dividir uma string. Onde:

  • delimitador como o próprio nome diz, é o caracter que separa as sub-strings;
  • espaço_branco é o conjunto de caractes a serem ignorados;
  • string é a string propriamente dita, a qual se deseja dividir;
  • resultado é a lista de sub-strings retornadas.

obs: ExtractStrings não adicona strings vazias na lista de strings.

Um caso de uso.

Suponha que em uma consulta de cep, o resultado venha em uma única string onde as sub-strings estão divididas pelo caracte pipe(|), e você deseja separar os resultados em diferentes variáveis. Para isso ao inves de criar uma função para varrer a string e ir concatenando o resultado em suas variaveis, use a função nativa do delphi ExtractStrings, como veremos logo abaixo.

var

CEP,logradouro,bairro,cidade,estado : string;

lista:TStringList;

begin

lista:=TStringList.Create;

CEP:=ConsultaCEP();

ExtractStrings(['|'],[' '],pchar(CEP),lista);

logradouro:=lista.Strings[0];

bairrro:=lista.Strings[1];

cidade:=lista.Strings[2];

estado:=lista.Strings[3];

FreeAndNil(lista);

Isso resolve todo o problema em dividir uma string;

Achei aqui.

Anderson Delphi, Dicas, Programação ,

Função que valida e-mail

8, setembro, 2009

Função que valida e-mail.
Verifica os caracteres informados, se possui a “@” e “.”, e não pode possuir caracteres inválidos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?
function valida_email($str){ 
  if (ereg("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)+$", $str)){ 
    return 1; 
  } else { 
    return 0; 
  }
}
 
//Modo de usar: 
$email = 'teste@teste.com'; 
if (valida_email($email)) { 
  echo "e-mail valido"; 
} else { 
  echo "e-mail invalido"; 
} 
 
?>

Anderson PHP, Programação ,

Função de diferença entre datas

5, setembro, 2009

Segue uma função que mostra a diferença de dias entre duas data informadas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<? 
function date_diff($from, $to) { 
// Use DD-MM-AA ou DD-MM-AAAA 
  list($from_day, $from_month, $from_year) = explode("-", $from); 
  list($to_day, $to_month, $to_year) = explode("-", $to); 
 
  $from_date = mktime(0,0,0,$from_month,$from_day,$from_year); 
  $to_date = mktime(0,0,0,$to_month,$to_day,$to_year); 
 
  $days = ($to_date - $from_date)/86400; 
 
  return ceil($days); 
} 
 
$de = $_GET['de']; 
$para = $_GET['para']; 
echo 'A diferença de dias entre as duas datas seria: ' . date_diff("$de","$para"); 
?>

é isso….

Anderson Dicas, PHP, Programação ,