: formulario, total, recados # # 2001-08-09 nascimento # 2002-06-21 adicionado stripslashes() para evitar os \' e \" # 2002-12-10 criada secao inicial de configuracao, total de mensagens # 2003-07-02 adicionado $intro e configuracao de cores do link e vlink # 2004-06-07 adicionada checagem de tamanho maximo do comentario # 2004-07-01 adicionada mensagem que mostra o tamanho maximo # 2004-08-24 melhorado codigo para mudar a extensao do fonte para .phps # 2004-08-24 melhorada mensagem "valeu pelo comentario" # 2004-08-25 adicionada config $mailto e agora tambem envia e-mails # 2004-09-02 adicionada config $mask_mail, cidade agora obrigatoria # 2004-11-24 adicionado suporte a paginacao # 2005-06-18 mudado formato dos comentarios para usar
(bom pra CSS) # 2006-03-22 juncao do script de visitas com o de comentarios em artigos. # o script agora gera somente os recados, e nao a pagina toda. # assim fica mais facil embuti-lo em qualquer pagina. novidades: # - HTML limpo e com DIVs para CSS # - checagem basica contra SPAM # - removido suporte a paginacao e envio de e-mails # - e-mail do visitante "escondido" como tooltip em seu nome # - atualizado para PHP 4 # 2006-11-18 adicionadas mais checagens anti-spam # 2006-11-26 adicionadas funcionalidades do opine.phps ($older_first) # ############################################################################# ### CONFIG # ## Arquivo que contera os recados dos visitantes. Deve poder ser ## escrito pelo usuario do servidor HTTP (geralmente nobody) $file = 'recados.html'; # ## Tamanho maximo do comentario do usuario (em caracteres) $max_size = 1000; # ## Mascara e-mails, protegendo-os dos robos de SPAM (1 liga, 0 desliga) $mask_mail = 1; # ## O numero inicial de contagem dos recados. Defina algum valor caso ## guarde os recados anteriores em outro arquivo e queira inclui-los ## na contagem total de recados. # $count_offset = 0; # ### Inverte o formato de armazenamento e aparicao dos recados. ### Mais antigos no topo e novos no final. Formulario no final. $older_first = 0; # ## Coloque aqui os endereços (sem o www.) das paginas permitidas. ## De um nome de variavel unico para cada pagina. ## E lembre-se de coloca-la no IF seguinte tambem. # $book_pogo = 'aurelio.net/musica/pogo.php'; $book_pogo = 'iverde.local/~aurelio/www/musica/pogo.php'; # local $book_aurelio = 'aurelio.net/recados.php'; $book_aurelio = 'iverde.local/~aurelio/www/recados.php'; # local $book_zz = 'funcoeszz.net/recados.php'; #$book_zz = 'iverde.local/~aurelio/zz/recados.php'; # local $book_er = 'aurelio.net/er/guia/recados.php'; #$book_er = 'iverde.local/~aurelio/www/er/guia/recados.php'; # local $book_rac = 'aurelio.net/rac/recados.php'; #$book_rac = 'iverde.local/~aurelio/www/rac/recados.php'; # local # ############################################################################# $has_error = 0; $is_php_NG = 1; # Mude para zero se teu PHP eh anterior ao 4.x if ($is_php_NG) { $_txt = $_POST['_txt']; $_nome = $_POST['_nome']; $_email = $_POST['_email']; $_cidade = $_POST['_cidade']; $_estado = $_POST['_estado']; $REQUEST_METHOD = $_SERVER['REQUEST_METHOD']; $script_url = $_SERVER['SERVER_NAME'].$_SERVER['SCRIPT_NAME']; } else { $script_url = $SERVER_NAME.$SCRIPT_NAME; } $this_book = ereg_replace("www\.", "", "$script_url"); ############################################################################# ## Atalhos para testes durante o desenvolvimento # #$REQUEST_METHOD = 'POST'; #$_txt = "Foi-se"; #$_nome = "Eu mesmo"; #$_email = "eu.mesmo@dominio.com"; #$_cidade = "Curitiba"; #$_estado = "PR"; #$this_book = $book_pogo; # ## Conversão do formato anterior dos recados para o atual (Vim) # :%s,\(]*>\)\(....\)-\(..\)-\(..\),\1\4/\3/\2, # dd/mm/aaaa # :%s,\([^<]*\) <\(.*\)>,\1, # mail como title # :%s!\( (.*\), \([A-Z][A-Z]\))!\1 - \2)! # cidade - XX # :%s!\( (.*\), )!\1)! # cidade sem estado # ############################################################################# # Cadastre nesse IF todas as paginas que podem usar este script. # O minimo que se deve setar eh o $file, mas tambem pode-se # configurar o $max_size e $mask_mail. if ($this_book == $book_aurelio) { $file = '/tmp/persistent/aurelio/visitas-aurelio.html'; $file = 'nobody/visitas-aurelio.html'; # local $count_offset = 560; } elseif ($this_book == $book_pogo) { $file = '/tmp/persistent/aurelio/visitas-pogo.html'; $file = '../nobody/visitas-pogo.html'; # local $older_first = 1; } elseif ($this_book == $book_zz) { $file = '/tmp/persistent/aurelio/visitas-zz.html'; # $file = '/a/www/nobody/visitas-zz.html'; # local } elseif ($this_book == $book_er) { $file = '/tmp/persistent/aurelio/visitas-er.html'; # $file = '/a/www/nobody/visitas-er.html'; # local } elseif ($this_book == $book_rac) { $file = '/tmp/persistent/aurelio/visitas-rac.html'; # $file = '/a/www/nobody/visitas-rac.html'; # local } else { MyError("A página '$this_book' não tem permissão para acessar este script"); exit; } $estados = split(':','AC:AL:AM:AP:BA:CE:DF:ES:GO:MA:MG:MS:MT:PA:PB:PE:PI:PR:RJ:RN:RO:RR:RS:SC:SE:SP:TO'); # Funcoes # function MyError($msg){ global $has_error; $has_error = 1; echo "\n

Erro: $msg

"; } function WriteAtBottom($file,$txt){ $fd = fopen($file, 'a'); fwrite($fd, "\n$txt"); fclose($fd); } function WriteAtTop($file,$txt){ $lines = file($file); $fd = fopen($file,'w'); fwrite($fd, "$txt\n" . join($lines)); fclose($fd); } function FormIni($php){ return "\n
\n"; } function FormButton($txt='Enviar'){ return "\n"; } function FormInput($nome,$tam,$val=''){ if ($val) $val = "value=\"$val\""; return "" ; } function FormSelect($nome,$arr){ # array2select $r = "\n"; } # Se for POST, le os dados dos campos, trata e adiciona no arquivo if ($REQUEST_METHOD == 'POST') { # Apaga espacos no inicio e fim $_txt = trim($_txt); $_nome = trim($_nome); $_email = trim($_email) ; $_cidade = trim($_cidade); # Chegamos no firewall if(!$_txt) MyError('Faltou escrever o seu recado'); if(!$_cidade) MyError('Faltou preencher a sua cidade'); if (strlen($_txt) > $max_size) { # (valeu h4ck3r k1dz) MyError("Voce ultrapassou o limite de $max_size caracteres no texto."); } if (strlen($_nome) > 50 || strlen($_email) > 50 || strlen($_cidade) > 50) { MyError("Nome, e-mail ou cidade muito extensos, abrevie."); } # Ok, vou tentar resistir um tempo sem apelar pro CAPTCHA # foo123@yahoo.com, (... - MG), (yshozbefjk - MS) if (eregi('@aurelio.net', $_cidade) || eregi('[0-9]{3,}@yahoo.com', $_email) || eregi('([bcdfghjklmnpqrstvwxyz]{4,}|\.\.\.)', $_cidade) || eregi('href=|url=|\[URL\]|Content-Transfer-Encoding:|ibdanswers.com|Hi! Very nice site!|Hello! Great site|sejaconsultor.rg.com.br|', $_nome.$_email.$_cidade.$_txt)) { MyError("Seu recado parece um SPAM. Use apenas texto, sem códigos."); } $_txt = strip_tags($_txt); # remove HTML # Se algum erro ocorreu, nao tenta cadastrar o comentario if(!$has_error) { # Nome padrao para comentarios anonimos if(!$_nome) $_nome='-Anônimo-'; # Obtem a data atual (mude o formato se quiser) $data = date("d/m/Y"); # Tratamento no texto do usuario pra evitar "mulekez rakerz" $_txt = ereg_replace(" +"," ",$_txt); # ^M sux $_txt = nl2br(htmlspecialchars($_txt)); # quebrando/escapando (valeu steil) $_txt = stripslashes($_txt); # Mascara o e-mail (se necessario) e coloca entre <> if ($_email) { if ($mask_mail) { $_email = str_replace('@',' (a) ',$_email); $_email = str_replace('.',' ' ,$_email); } $_email = " title=\"$_email\""; } # Formata o estado, caso informado if ($_estado) { $_estado = " - $_estado"; } # Aqui eh o formato final do comentario (usando
) $comm = "
$data $_nome ($_cidade$_estado)
"; $comm.= "
\n$_txt
\n"; # Grava o comentario em arquivo if($older_first) { WriteAtBottom($file,$comm); } else { WriteAtTop($file,$comm); } # Avisa o usuario que tudo ocorreu bem echo "

((( $_nome, obrigado pelo recado! )))

"; # Apaga os dados preenchidos $_txt = $_nome = $_email = $_cidade = $_estado = ''; } } # O formulario function showForm() { global $PHP_SELF, $_txt, $_nome, $_email, $_cidade, $estados; $r = '
'; $r.= FormIni($PHP_SELF); $r.= ''; $r.= "\n".'"; $r.= "\n"; $r.= "\n".'\n'; $r.= "\n".'\n'; $r.= "\n".'\n'; $r.= "\n'; $r.= "\n
'; $r.= "Recado:
'; $r.= "Nome:".FormInput('nome', 30, $_nome).'
'; $r.= "E-mail:".FormInput('email', 30, $_email).'
'; $r.= "Cidade:".FormInput('cidade', 20, $_cidade); $r.= "\n".FormSelect('estado',$estados).'
".FormButton().'
\n\n"; echo $r; } # Mostra o numero total de recados function showTotals() { global $file, $count_offset; echo '

'; system("expr $(grep -c '^'; echo '

'; } # Le todos os recados, que ja estao prontos em HTML function showScraps() { global $file; echo "\n\n
\n"; readfile($file); echo "
\n\n"; } if ($older_first) { showTotals(); showScraps(); showForm(); } else { showForm(); showTotals(); showScraps(); } # vim: ts=4 ?>