[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