Logomarca Downs Master

Mini Twitter com jQuery e PHP - Parte 12

30/11/2015 Mini twitter com jQuery e PHP, PHP 2933

Nesta vídeo aula usaremos a biblioteca WideImage para fazer um upload inicial da nova imagem de perfil do usuário. Essa imagem será redimensionada para 500 px de largura, de modo que o crop seja possível. Salvando a imagem como uma imagem temporaria "temp_iddousuario" podemos tratá-la e em seguida apaga-la do servidor.

Posteriormente veremos como fazer uma verificação que garantirá que mesmo que o usuário tenha parado na metade do crop, a imagem temporária ainda sim será apagada da pasta de upload. Espero que gostem, e até a próxima.

Comentários

Charles Borges disse:

Muito bom Lucas, parabéns estou acompanhando as vídeo-aulas desde o início, e a pergunta " no final do curso irá disponibilizar para download "?

Lucas Silva disse:

Vou sim... Bom, eu só não chamaria de "CURSO" por que foi meio em cima da hora que decidi fazer o sisteminha, mas vou disponibilizar sim. No github!

Matteus Sousa disse:

Essa série realmente tá ficando cada vez melhor, parabéns...
ps: "tá aí minha cara feia"
rsrs rachei...

Lucas Silva disse:

Olá Matteus... que bom que gostou!
Só não zoa minha feiura ¬¬ kkkk abrs!

Jonathan Silva disse:

Lucas essa serie merece ser chamada de curso, SIM! nao é um sisteminha kkkkk parabéns cara, você é fod@

Lucas Silva disse:

kkkkkkkkk ok então!
Valeu pelo apoio!

Juliane sanchez disse:

Olá Lucas, boa noite!
Ótima vídeo aula.
O problema com o tamanho da textarea também pode ser resolvido com o CSS resize:none;
O problema que acontece ao clicar mais de uma vez no cadastre-se pode ser resolvido desta forma: http://pastebin.com/0ZLJpgPL
Até mais.

Lucas Silva disse:

Então, sobre o bindValues.. eu sei pra que eles servem, eu só não tinha entendido como vc tava pegando eles ali mas dps que vi que vc tava usando o parse_str.
Quanto ao lance dos comentários que vc citou, isso foi por que eu vacilei na epoca que fiz o downs. Em meados de 2012 ou algo do tipo (não lembro mais). Que eu fiz o banco separando as tabelas de comentario e a tabela de respostas, o que acontece é que eu esqueci de somar as duas contagens de resultados.
Na verdade to planejando remodelar pra usar igual fiz na sequencia sobre comentarios e respostas e usar tudo numa tabela só pra poupar tempo e saco kkkk..
Abraços!

Juliane disse:

Olá Lucas, os buind values foi utilizado pois é um dos métodos seguros do PDO, essa classe é baseada em prepared statements. Talvez o motivo de você não entender a funcionalidade do mesmo na classe seja pelo fato de que você não compreendeu a forma de uso.
Estive fazendo testes desta forma, Um dos funcionamentos é assim: http://pastebin.com/wUcm2bzb
O outro será para métodos mais específicos como por exemplo duplo SELECT.

A classe foi feita desta forma porque eu prefiro privar as funções que não são necessárias acesso publico, ou seja, eu permito ao método public 2 funções, uma para informar os dados requeridos e outra para receber os dados.

Usei fetch assoc como retorno de dados também porque eu sempre dou preferência em desenvolver com array.
Quando você iniciar as vídeo aulas com padrões MVC provavelmente você desenvolverá algo similar e então eu verei sua lógica na pratica!

No momento estou satisfeita com os resultados da minha classe!

Obs: A sua página inicial, na área que tem uma espécie de contador de comentários em cada postagem está com um funcionamento parcial, quero dizer, você esqueceu de fazer a verificação se os comentários foram aprovados ou não!

Obrigada mais uma vez.

Lucas SIlva disse:

Olá Juliane. Dei uma olhada na sua classe. Ficou legal, mas teve algumas coisas que não entendi e tem uns conceitos que vc não deveria aplicar nesse caso. Não tem por que um Read extender ao banco... um extends, do ponto de vista semãntico do OO significa que uma classe "É" a outra.. por exemplo. Se eu tiver uma classe Pessoa que possui caracteristicas para uma pessoa, e eu crio uma classe Joao eu posso extender Joao a Pessoa por que João é uma pessoa. No seu caso não seria legal. Pra isso eu uso registry.
O que eu falei que não entendi foi a parte que vc usou bindValues... mas enfim. Eu fiz um exemplo de uma classe Read usando registy, abaixo segue o link do gist no exemplo estou usando meu banco mini_twitter pra testes. Espero que ajude. Abraço. https://gist.github.com/lukasdev/049467b29888f92926e9

Juliane sanchez disse:

Ficou melhor?
Arquivo: http://pastebin.com/S0Zpx8JH
Vou documentar a classe e partir para a próxima etapa, desenvolver classe para deletar dados!

Lucas Silva disse:

Agora sim. Ficou bem mais simples. Em resumo o problema do outro era só os returns rsrsr.. Eu mencionei isso mas enrolei demais explicando outras coisas kkk... Ficou legal :)

Juliane sanchez disse:

Resolvi meu problema, não implementando interfaces mais sim modificando o código que já havia feito.
Agora que já finalizei o mesmo, eu posso estudar novas formas para fazer este processo.
Da forma que você explicou acima percebi que eu poderia passar todos os valores que eu preciso para efetuar a leitura através de um array, isto reduziu meu código.
Deixei desta forma: http://pastebin.com/JHXrZpRT
Até mais.

Lucas Silva disse:

Você pode manter assim se preferir. Mas você não ta fazendo os retornos nas duas funções que citei, então não recebe nada na setValues!

Juliane sanchez disse:

Entendi, eu fiz desta forma porque eu li em um site que era melhor para evitar SQLInjection, porém vou fazer modificações nesta classe, vou estudar um pouco sobre interface para eu poder aplica-la corretamente da forma que eu necessito!
Obrigada mais uma vez.

Lucas Silva disse:

Olá Juliane. Seguinte: Aparentemente a montagem da consulta ta correta.. no caso, os comandos SQL. Já a forma como você ta fazendo pra retornar os valores está errada.
Você tem uma variavel $SQL que no ponto de instancia é um objeto. Desse objeto você ta usando um metodo e esperando retornar um valor. Entretanto esse valor que você espera receber não está sendo DIRETAMENTE retornado pelo metodo setValues. por que dentro dele você está chamando um metodo find e dentro desse metodo find vc tem um terceiro metodo execute e ELE SIM é que está retornando. O php tem uma hierarquia em cadeia nesse caso. O execute retorna o valor pro find, o find deveria retornar pro setValues se você espera receber ele direto na pagina.

Porém eu não faria dessa forma. Na minha opinião você está complicando demais o que poderia ser simplificado drasticamente. Por exemplo: você poderia ter um contrato para bancos de dados - interface - e uma classe que conteria os métodos principais de rotinas. o método read, o método insert, o método update e o método delete. Cada um faria sua função separadamente. Tenho uma classe em off aqui que faz exatamente isso. Está organizado assim:
class Registry - para criar a instancia de conexão do banco
Interface BancoDeDados - pra declarar quais métodos classes de banco devem possuir
class DataAccessObject que implementa banco e nela tenho os métodos citados. o read faz uma seleção e guarda o execute numa propriedade em seguida retorna o próprio objeto pra usar encadeamento de metodos eu eu poder fazer:
$banco->read(parametros)->listar() em seguida uso foreach.. fica bem mais pratico! enfim eu extendi demais meu raciocínio mas espero ter ajudado!

Juliane sanchez disse:

Entendo, o importante é funcionar!
Lucas, Poderia me ajudar com estes códigos?, quando tiver um tempo...
Até onde eu vi ele não está executando meu método prepare, ele retorna os valores passados mais não faz a consulta, saberia me dizer uma alternativa ou solução para este problema?

Estou estudando PDO MVC, porém queria fazer umas modificações na minha classe de leitura, consegui fazer na de criação porém está apresentando problema na de Leitura.

Não consigo retornar Array nesta minha classe: http://pastebin.com/dj7yq8yz
Minha conexão é: http://pastebin.com/13eVCAZy
Executei a função desta forma: http://pastebin.com/F8bQEYS4

Obrigada.

Lucas Silva disse:

Olá Juliane. O lance do cadastre-se eu fiz algo similar, mas usei uma classe alternativa pra o botão. Ao clicar nele retiro, ao fechar o cadastre-se eu reponho... Mas assim é mais pratico tbm!