[Cascavel-pm] contra barra Obrigado pelo conselho

Ricardo Stock ricardostock em bol.com.br
Quinta Outubro 18 20:40:25 PDT 2007


Ola Luis, mais uma vez obrigado, me fez ver algo que sutilmente, me fez na 
necessidade de reescrever quase que todos os scripts em perl...bo mas vamos 
la.


On Thu, Oct 18, 2007 at 11:26:15AM -0300, Ricardo Stock wrote:
> Obrigado a ajuda que tive, ao igor e ao "Chomp"
>
> ficou assim o código
>
> $caminho=sprintf('local\usuario\%s', $numero);
> my $sth = $dbh->prepare( q{UPDATE usuarios
>     SET caminho = ? WHERE numero = ?} );
> $sth->execute($caminho, $numero);
>
> Explicando melhor funciona assim
>
> 1 - Recebe os dados via form html (os erros de preenchimento são tratados
> via JS)

>Eu nao devia, mas vou apontar FALHA GRAVE DE SEGURANCA no teu sistema,
>por voce confiar no JS para verificacao de erros de preenchimento. Tome
>cuidado, e trate de validar seus dados SERVER SIDE - JS pode ser
>reescrito, invalidado, ignorado e torcido de uma infinidade de maneiras
>diferentes.

O JavaScript eu utilizo para testar os campos do formulário, para obrigar 
que o usuário digite exatamente aquilo que eu quero que ele digite. roda no 
cliente.
mas voce disse uma coisa que não havia pensado, e se o cliente ignorar o 
javascript.....

>E, jah que voce esta escrevendo CGI, pelo menos diga que voce estah
>usando o CGI::Application, ou , melhor ainda, o Catalyst... ;)

indelizmente não, mas vou começar a aprender a usar, vou procurar 
documentação e alterar meus códigos, eu utilizo cgi puro, foi o que aprendi, 
e sempre serviu, ta caindo, é uma pena, mas tenho que andar junto com a 
tecnologia. por isto que o perl nunca morre, e sempre exite mais de uma 
maneira de fazer.


> 2 - Chama função para cadastrar.
> 3 - uma vez cadastrado, como o campo numero é auto incrementado, faça uma
> busca pelo numero e obtenho o mesmo para fazer o caminho

Bom, jah que voce estah usando MySQL (espero que seja pelo menos o 5.1 -
mas voce deveria mesmo era usar Postgres, que eh uma base de dados
seria), use $dbi->last_insert_id() para obter o numero do insert que
voce terminou de fazer. Assim, voce economiza um SELECT.

eu uso o mysql porque é gratuito, robusto, e me serviu quando fui aprender 
banco de dados, pode não acreditar, mas vim o access.... hoje, só mysql....

> 4 - crio a pasta no local indicado pelo numero do usuário
> 5 - Atualizo o banco com o numero no caminho exe local/ususario/1234

>Eu ateh tenho medo de perguntar, mas o senso do dever fala mais alto:
>Voce pode por favor me explicar para que precisa ter uma interface web
>que cadastra usuarios e associa um diretorio server-side para cada um
>deles? Isso estah me cheirando a idiosincrasia empresaral aguda, e eu
>acho que existe pelo menos uns 5 jeitos mais limpos, elegantes e
>economicos de resolver o teu problema... quer falar mais sobre isso
>antes de continuar?


realmente exite... e o certo seria fazer isto no banco, ou seja criar o 
registro do usuario e guardar tudo nele, não ficar com uma pasta por usuário 
e fazer um file upload como estava fazendo.

> 6 - dou o retorno em html do registro.

>"Retorno em html" ? Bom, outra vez, eu vou apontar voce para o jeito
>certo de fazer, meu caro... use o HTML::Template, ou o TT (Template
>Toolkit) para gerar seu HTML a partir de templates. Desta forma, voce
>mantem seu codigo longe do tipo de caca que estraga programas com
>interface web: o HTML.

bom neste caso, somente quando eu aprender a usar o HTML::Template para pode 
responder, no meu retorno html, vem no maximo 10 linhas de código html, o 
resto é variavel......

Mas mesmo assim obrigado, pode ter certeza, vou reescrever tudo, ai o que eu 
não entender eu posto :-) mas com certeza voce tem mais experiencia nisto 
que eu, por isto vou seguir seu conselho......


Por enquanto Obrigado

Ricardo Stock
ricardostock em bol.com.br 



Mais detalhes sobre a lista de discussão Cascavel-pm