Arquivo

Arquivo da Categoria ‘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 ,

Firebird 2.5 is Coming!

10, março, 2010

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 ,

Acentuação no AJAX

4, setembro, 2009

Escrever aplicativos com ajax é a vontade de 11 em cada 10 programadores web atualmente.
A linguagem facilita, e muito, a experiência do usuário no site e, além de ser um dos maiores ícones da web 2.0, coloca o(s) responsável(is) pelo projeto na “vanguarda da tecnologia” (assim dizem os profetas).

Só que nem tudo são flores quando o assunto é AJAX (Asynchronous JavaScript and XML). Principalmente se você for um programador brasileiro, como eu.
Digo isso por causa do nosso belo alfabeto, originado do latim e com seus acentos e caracteres peculiares.

Nós, brasileiros, utilizamos a codificação ISO-8859-1, enquanto que, por padrão, o AJAX trabalha com o UTF-8.
O resultado? Hieróglifos egípcios aparecem no lugar de palavras acentuadas e outros caracteres particulares do nosso idioma.

A solução?

Procurei por diversas soluções, mas nenhuma me atendia satisfatoriamente. Só uma, que posto a seguir:

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

Não vou oferecer explicações a respeito da função nativa do PHP, header(). Deixo que vocês mesmos consultem o manual da linguagem para que entendam como funciona.

Existem outras alternativas, como modificar o header direto no HTML, com a tag META, mas geralmente não funcionam a contento.

Quem tiver outras soluções funcionais, postem nos comentários.

Fonte: Silvio Delgado

Anderson Ajax, PHP, Programação ,

Tabela ASCII – Completa

22, junho, 2009

A Tabela ASCII (American Standard Code for Information Interchange) não é nenhuma novidade para quem já trabalha com informática, principalmente com desenvolvimento de software. A minha intenção em publicar esta tabela é adicionar várias informações em uma única tabela, já que a maioria disponível na internet apresenta poucos dados.

Esta tabela é a junção da tabela ASCII Normal (32 a 127), tabela dos Caracteres de Controle (0 a 31) e a tabela ASCII Estendida (128 a 255).

Decimal Binário Hex Referência
0
00000000
00
Null – NUL
1 00000001 01 Start of Heading – SOH
2
00000010
02
Start of Text – STX
3
00000011
03
End of Text – ETX
4
00000100
04
End of Transmission – EOT
5
00000101
05
Enquiry – ENQ
6
00000110
06
Acknowledge – ACK
7
00000111
07
Bell, rings terminal bell – BEL
8
00001000
08
BackSpace – BS
9
00001001
09
Horizontal Tab – HT
10
00001010
0A
Line Feed – LF
11
00001011
0B
Vertical Tab – VT
12
00001100
0C
Form Feed – FF
13
00001101
0D
Enter – CR
14
00001110
0E
Shift-Out – SO
15
00001111
0F
Shift-In – SI
16
00010000
10
Data Link Escape – DLE
17
00010001
11
Device Control 1 – D1
18
00010010
12
Device Control 2 – D2
19
00010011
13
Device Control 3 – D3
20
00010100
14
Device Control 4 – D4
21
00010101
15
Negative Acknowledge – NAK
22
00010110
16
Synchronous idle – SYN
23
00010111
17
End Transmission Block – ETB
24
00011000
18
Cancel line – CAN
25
00011001
19
End of Medium – EM
26
00011010
1A
Substitute – SUB
27 00011011 1B Escape – ESC
28
00011100
1C
File Separator – FS
29
00011101
1D
Group Separator – GS
30
00011110
1E
Record Separator – RS
31
00011111
1F
Unit Separator – US
32 00100000 20 Space – SPC
33 00100001 21 !
34 00100010 22
35 00100011 23 #
36 00100100 24 $
37 00100101 25 %
38 00100110 26 &
39 00100111 27
40 00101000 28 (
41 00101001 29 )
42 00101010 2A *
43 00101011 2B +
44 00101100 2C ,
45 00101101 2D -
46 00101110 2E .
47 00101111 2F /
48 00110000 30 0
49 00110001 31 1
50 00110010 32 2
51 00110011 33 3
52 00110100 34 4
53 00110101 35 5
54 00110110 36 6
55 00110111 37 7
56 00111000 38 8
57 00111001 39 9
58 00111010 3A :
59 00111011 3B ;
60 00111100 3C <
61 00111101 3D =
62 00111110 3E >
63 00111111 3F ?
64 01000000 40 @
65 01000001 41 A
66 01000010 42 B
67 01000011 43 C
68 01000100 44 D
69 01000101 45 E
70 01000110 46 F
71 01000111 47 G
72 01001000 48 H
73 01001001 49 I
74 01001010 4A J
75 01001011 4B K
76 01001100 4C L
77 01001101 4D M
78 01001110 4E N
79 01001111 4F O
80 01010000 50 P
81 01010001 51 Q
82 01010010 52 R
83 01010011 53 S
84 01010100 54 T
85 01010101 55 U
86 01010110 56 V
87 01010111 57 W
88 01011000 58 X
89 01011001 59 Y
90 01011010 5A Z
91 01011011 5B [
92 01011100 5C \
93 01011101 5D ]
94 01011110 5E ^
95 01011111 5F _
96 01100000 60 `
97 01100001 61 a
98 01100010 62 b
99 01100011 63 c
100 01100100 64 d
101 01100101 65 e
102 01100110 66 f
103 01100111 67 g
104 01101000 68 h
105 01101001 69 i
106 01101010 6A j
107 01101011 6B k
108 01101100 6C l
109 01101101 6D m
110 01101110 6E n
111 01101111 6F o
112 01110000 70 p
113 01110001 71 q
114 01110010 72 r
115 01110011 73 s
116 01110100 74 t
117 01110101 75 u
118 01110110 76 v
119 01110111 77 w
120 01111000 78 x
121 01111001 79 y
122 01111010 7A z
123 01111011 7B {
124 01111100 7C |
125 01111101 7D }
126 01111110 7E ~
127 01111111 7F Delete
128 10000000 80 Ç
129 10000001 81 ü
130 10000010 82 é
131 10000011 83 â
132 10000100 84 ä
133 10000101 85 à
134 10000110 86 å
135 10000111 87 ç
136 10001000 88 ê
137 10001001 89 ë
138 10001010 8A è
139 10001011 8B ï
140 10001100 8C î
141 10001101 8D ì
142 10001110 8E Ä
143 10001111 8F Å
144 10010000 90 É
145 10010001 91 æ
146 10010010 92 Æ
147 10010011 93 ô
148 10010100 94 ö
149 10010101 95 ò
150 10010110 96 û
151 10010111 97 ù
152 10011000 98 ÿ
153 10011001 99 Ö
154 10011010 9A Ü
155 10011011 9B ø
156 10011100 9C £
157 10011101 9D Ø
158 10011110 9E ×
159 10011111 9F ƒ
160 10100000 A0 á
161 10100001 A1 ù
162 10100010 A2 ó
163 10100011 A3 ú
164 10100100 A4 ñ
165 10100101 A5 Ñ
166 10100110 A6 ª
167 10100111 A7 º
168 10101000 A8 ¿
169 10101001 A9 ®
170 10101010 AA ¬
171 10101011 AB ½
172 10101100 AC ¼
173 10101101 AD ¡
174 10101110 AE «
175 10101111 AF »
176 10110000 B0
177 10110001 B1
178 10110010 B2
179 10110011 B3
180 10110100 B4
181 10110101 B5 Á
182 10110110 B6 Â
183 10110111 B7 À
184 10111000 B8 ©
185 10111001 B9
186 10111010 BA
187 10111011 BB
188 10111100 BC
189 10111101 BD ¢
190 10111110 BE ¥
191 10111111 BF
192 11000000 C0
193 11000001 C1
194 11000010 C2
195 11000011 C3
196 11000100 C4
197 11000101 C5
198 11000110 C6 ã
199 11000111 C7 Ã
200 11001000 C8
201 11001001 C9
202 11001010 CA
203 11001011 CB
204 11001100 CC
205 11001101 CD
206 11001110 CE
207 11001111 CF ¤
208 11010000 D0 ð
209 11010001 D1 Ð
210 11010010 D2 Ê
211 11010011 D3 Ë
212 11010100 D4 È
213 11010101 D5 ı
214 11010110 D6 Í
215 11010111 D7 Î
216 11011000 D8 Ï
217 11011001 D9
218 11011010 DA
219 11011011 DB
220 11011100 DC
221 11011101 DD ¦
222 11011110 DE Ì
223 11011111 DF
224 11100000 E0 Ó
225 11100001 E1 ß
226 11100010 E2 Ô
227 11100011 E3 Ò
228 11100100 E4 õ
229 11100101 E5 Õ
230 11100110 E6 µ
231 11100111 E7 þ
232 11101000 E8 Þ
233 11101001 E9 Ú
234 11101010 EA Û
235 11101011 EB Ù
236 11101100 EC ý
237 11101101 ED Ý
238 11101110 EE ¯
239 11101111 EF ´
240 11110000 F0 ­­
241 11110001 F1 ±
242 11110010 F2
243 11110011 F3 ¾
244 11110100 F4
245 11110101 F5 §
246 11110110 F6 ÷
247 11110111 F7 ¸
248 11111000 F8 °
249 11111001 F9 ¨
250 11111010 FA ·
251 11111011 FB ¹
252 11111100 FC ³
253 11111101 FD ²
254 11111110 FE
255 11111111 FF

Anderson Programação