Meu primeiro projeto foi um plágio!

Sim, eu confesso, meu primeiro projeto foi um plágio, mas calma...

Estou aprendendo a programar em PHP, e como aprendo na prática, me veio a ideia de me testar e criar o meu primeiro projeto, mas enfrentei algo que enfrento constante, A FALTA DE IDEIAS! Porém, quando olhei para os meus sites aberto em meu navegador eu vi um site que não seria uma má ideia de criar um "clone" do mesmo, esse site é o tabnews.com.br.

Subi o código em meu github, e peço que, se algum programador (de preferência back-end) tiver tempo livre para avaliar o meu código, e apontar formas de melhorar, dar uma nota, agradecia.

Repositório: https://github.com/silvaleal/myopost-php

Manjo zero de php.

Mas pelo que vi do código, acho que dá pra fazer umas SQL Injection. Isso é uma vunerabilidade grave.

O que quero dizer é o seguinte, tu tem a query (peguei esse de exemplo, mas c tem várias nesse modelo): SELECT * FROM postagens WHERE author_id = $userID ORDER BY post_date DESC;

Se você não tiver cuidado com o tratamento do dado $userID, o teu usuário pode mandar uma string ao invés de um valor numérico. Aí vamo supor que ele manda '' or 1.

A busca vai ficar assim: SELECT * FROM postagens WHERE author_id = '' or 1 ORDER BY post_date DESC; E o resultado dessa busca são todas as postagens independente do usuário.

Eu ia até testar, porque pode ser que o tratamento exista, só que não identifiquei, mas não achei nenhum link publicado do seu site.

Eu já pensei nisso, e pelo que eu aprendi por enquanto, para evitar SQL injection, eu preciso filtrar os dados que o usuário inseriu dentro do input, então existe uma função chamada de "validate". Ainda não testei as vunerabilidade, pós não manjo muito, mas tenho um contato que sabe sofre segurança, e pretendo pedir para ele fazer uns testes.
A forma correta de blindar seu código contra SQL Injection é utilizando prepared statements. Vi no código que você já utiliza o PDO para se conectar ao banco, portanto basta algumas alterações no seu código. Por exemplo a sua função `deletePostByID()` ficaria assim: ``` function deletePostByID($id) { $connect = dbConnect(); $sql = "DELETE FROM postagens WHERE post_id = :id"; $statement = $connect->prepare($sql); $statement->execute(['id'=>$id]) // como extra, eu verificaria se algum post foi deletado de fato, retornando um booleano return $statement->rowCount() > 0; } ```
Valeu Elias, adicionei o prepared statements na minha lista de estudos.

Essa news dá várias ideias de projetos gringos que geram grana de vdd, dá uma olhada: https://insightsdigitais.substack.com/

"Nada se cria, tudo se copia e aperfeiçoa"!

Meio que normal todo mundo começa assim, não se culpe, o próprio TabNews é uma versão com menos recursos do HackerNews

O próprio curso do Felipe Deschamps é um "plágio" do TabNews, e ele não parece nem se incomodar se fizessem um TabNews de sei lá, culinária. O projeto é open source, afinal

"Nosso projeto"☭ No começo o que importa é por a mão na massa, melhor fazer um projeto copiando de alguém do que não fazer projeto nenhum.

Copiar acho que é uma das melhores formas de aprender, acredito que você está no caminho certo.

Quando algum iniciante está sem ideias de projetos, eu normalmente digo que uma das formas de ter ideias para sistemas é pesquisar por planilhas prontas de Excel, tem um pessoal que faz muita coisa interessante com Excel e certamente poderiam ser bons sistemas. Esse site até vende planilhas, então se alguém compra uma planilha, poderia muito bem pagar por um sistema que faça a mesma coisa de forma melhorada.

Ótima ideia No geral fazer algum projeto que automatize ou facilite algo, mesmo que simples, é ótimo para iniciantes(ou mesmo mais avançados)

Por mais que seja contra intuitivo e até parecer meio errado... na minha opinião, o melhor projeto para se fazer, é aquele projeto que já existe (Ou com proposta similar). Isso serve tanto para projetos pessoais, como para projetos profissionais.

Isso se deve a diversos fatores que incluem:

  • Nunca vai ser a mesma coisa, sempre vai ter um plus extra;
  • Mais fácil divulgação e trafêgo orgânico;
  • O mercado é muito grande e existe públicos que pode não gostar do produto XYZ e curtir muito o seu (Mesmo que tenham propostas parecidas);
  • etc

Parabéns pela iniciativa! Uma das maiores dificuldades é justamente decidir "O que eu vou fazer?" e muitas vezes perdemos tanto tempo pensando nisso que, se simplesmente tivéssemos começado algo, já estaria pronto.

Trabalho com PHP há um bom tempo, mas não utilizo PHP puro porque o tempo não permite. No ambiente de trabalho, provavelmente você utilizará frameworks (Laravel, no meu caso).

Novamente, parabéns pelo projeto, pois com certeza você aprendeu muito ao optar por não utilizar frameworks. Entretanto, ao analisar o código, achei um pouco complicado de entender e manter. Hoje o projeto é pequeno, então ainda é possível compreendê-lo depois de algum tempo. Porém, caso ele comece a crescer, pode perder o controle e qualquer alteração se tornar um pesadelo.

Minha sugestão é: Continue a fazer "plágios" para estudar. Tente aprender e aplicar o máximo possível de boas práticas e padrões de projeto.

Grande abraço e boa sorte!

No fundo, sabia que o código estava bem "melhorável", se soube alguma parte iu lógica que eu poderia melhorar, agradecia se falar. Quando tiver tempo, irei mexer na estrutura de arquivos, já que dei uma pesquisada e vi alguns projetos php open source. A meta é um dia mexer em laravel, mas por enquanto, tou montando a minha base na linguagem.

Até hoje tenho esse mesmo problema que mencionou a FALTA DE IDEIAS. Hoje trabalho com PHP e com toda certeza fazer "clones" ajudam bastante nos estudos, principalmente se for algo que você goste ou que resolva um problema do dia a dia.

Deixando minha contribuição. Verifiquei que o seu método registerUser() não está fazendo o hash da senha pesquise na doc por password_hash e password_verify.

Bons Estudos.

Parabéns pela iniciativa. Plágio em aprendizado é um ótimo caminho.Show!