Executando verificação de segurança...
1

Como fazer um sistema de likes?

Gostaria de fazer um sistema de likes utilizando PHP e a db MYSQL, por onde devo começar? Conteúdo muito limitado no youtube.

Carregando publicação patrocinada...
1

Confesso, que tenho utilizado bastante o ChatGTP, para praticamente tudo, primeiro olho pra ele, se não for satisfatório ai vou procurar pela internet, youtube, entre outros.

Utilizei o seu questionamento, e obtive uma resposta que nem imagninava, neste caso, todo o crédito vai para o GPT:

Para criar um sistema de likes utilizando PHP e a base de dados MySQL, você pode seguir os seguintes passos:

  1. Crie uma tabela no seu banco de dados MySQL para armazenar as informações dos likes. A tabela pode ter os seguintes campos:
  • id: o id do like (pode ser definido como auto_increment)
  • user_id: o id do usuário que deu o like
  • post_id: o id do post que recebeu o like
  • created_at: a data e hora em que o like foi dado (pode ser definido como TIMESTAMP DEFAULT CURRENT_TIMESTAMP)
  1. Na página do post, você pode exibir o número de likes que o post recebeu. Para isso, você pode fazer uma consulta no banco de dados para contar o número de registros na tabela de likes que correspondem ao post_id.

  2. Adicione um botão "Like" na página do post, que envia uma requisição para uma página PHP que adiciona um registro na tabela de likes com o user_id e o post_id correspondentes. A página PHP pode ser chamada de "like.php" e pode ser acessada por meio de uma solicitação AJAX.

  3. Para evitar que um usuário dê vários likes no mesmo post, você pode verificar se já existe um registro na tabela de likes com o user_id e o post_id correspondentes. Se o registro já existe, você pode impedir que o usuário dê outro like.

  4. Na página do post, você pode alterar o botão "Like" para exibir o número de likes que o post recebeu e desativar o botão se o usuário já deu um like no post.

  5. Para remover um like, você pode adicionar um botão "Desfazer Like" na página do post, que envia uma requisição para uma página PHP que exclui o registro correspondente da tabela de likes. A página PHP pode ser chamada de "unlike.php" e pode ser acessada por meio de uma solicitação AJAX.

  6. Na página do post, você pode alterar o botão "Desfazer Like" para remover o like e atualizar o número de likes que o post recebeu.

Espero que esses passos ajudem você a criar um sistema de likes utilizando PHP e a base de dados MySQL. Lembre-se de sempre se certificar de que seu código esteja seguro e protegido contra possíveis vulnerabilidades.

E como se não basta-se ainda veio com direito a exemplos de código:

Claro, aqui está um exemplo de como implementar um sistema de likes em PHP e MySQL:

  1. Criando a tabela de likes no banco de dados MySQL:
CREATE TABLE likes (
  id INT NOT NULL AUTO_INCREMENT,
  user_id INT NOT NULL,
  post_id INT NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (id),
  UNIQUE KEY user_post_idx (user_id, post_id)
);
  1. Exibindo o número de likes em um post:
// Conexão com o banco de dados
$db = new mysqli('localhost', 'usuario', 'senha', 'nome_do_banco');

// Query para contar o número de likes no post
$post_id = 123; // id do post
$query = "SELECT COUNT(*) as count FROM likes WHERE post_id = $post_id";
$result = $db->query($query);
$row = $result->fetch_assoc();
$likes_count = $row['count'];

// Exibindo o número de likes
echo "Este post recebeu $likes_count likes.";
  1. Adicionando um like em um post:
// Conexão com o banco de dados
$db = new mysqli('localhost', 'usuario', 'senha', 'nome_do_banco');

// Verificando se o usuário já deu like no post
$user_id = 456; // id do usuário
$post_id = 123; // id do post
$query = "SELECT * FROM likes WHERE user_id = $user_id AND post_id = $post_id";
$result = $db->query($query);
if ($result->num_rows > 0) {
  // O usuário já deu like no post
  die('Você já deu like neste post.');
}

// Adicionando o like no banco de dados
$query = "INSERT INTO likes (user_id, post_id) VALUES ($user_id, $post_id)";
$db->query($query);

// Exibindo o número de likes atualizado
$query = "SELECT COUNT(*) as count FROM likes WHERE post_id = $post_id";
$result = $db->query($query);
$row = $result->fetch_assoc();
$likes_count = $row['count'];
echo "Este post recebeu $likes_count likes.";
  1. Removendo um like em um post:
// Conexão com o banco de dados
$db = new mysqli('localhost', 'usuario', 'senha', 'nome_do_banco');

// Removendo o like do banco de dados
$user_id = 456; // id do usuário
$post_id = 123; // id do post
$query = "DELETE FROM likes WHERE user_id = $user_id AND post_id = $post_id";
$db->query($query);

// Exibindo o número de likes atualizado
$query = "SELECT COUNT(*) as count FROM likes WHERE post_id = $post_id";
$result = $db->query($query);
$row = $result->fetch_assoc();
$likes_count = $row['count'];
echo "Este post recebeu $likes_count likes.";

Este é apenas um exemplo básico e simplificado de como implementar um sistema de likes em PHP e MySQL. É importante lembrar que é necessário adicionar mais validações e tratamentos de erros para tornar o sistema mais seguro e robusto.

2

Esse post mostra como o ChatGPT está longe de ser infalível e ainda precisa de alguém conferindo tudo que ele faz (de preferência, alguém que saiba o que está fazendo, em vez de aceitar cegamente tudo que ele responde).

O código que ele gerou é vulnerável a ataques de SQL injection. Afinal, em uma aplicação web espera-se que os ids do post e do usuário venham como parâmetros do request (seja POST ou GET). E concatenar parâmetros diretamente na query (ainda mais quando vem de fora da aplicação) é pedir pra tomar um SQL injection. Inclusive, na própria documentação tem um aviso sobre isso.

Uma solução melhor é usar bind_param, consulte a documentação para mais detalhes. Por exemplo:

$stmt = $db->prepare('SELECT COUNT(*) as count FROM likes WHERE post_id=?');
if(!$stmt){
    echo 'erro na consulta: '. $db->errno .' - '. $db->error;
}

$stmt->bind_param('i', $post_id);
$stmt->execute();
$stmt->bind_result($likes_count);
$stmt->fetch();
// mostrar o $likes_count, etc

Claro que uma validação evitaria o problema, mas outra vantagem é que acima usamos prepare, e com isso as consultas preparadas são implementadas no lado do servidor do banco de dados. Com isso, o PHP manda somente os parâmetros a cada vez que a mesma consulta preparada é enviada para o servidor quando usa a mesma conexão persistente, mesmo que esteja atendendo uma requisição HTTP diferente. Ou mesmo se estiver executando em um loop, da segunda execução em diante ele só manda os parâmetros, reaproveitando o plano de execução da query.

Para mais informações, leia aqui e aqui.

2

Isso é bem grave. E o pior é que geralmente quem usa o ChatoGePeTo não costuma ter a criticidade para pegar esses problemas, a pessoa obtém a resposta e usa. Quem verificaria costuma ser quem não confia em um gerador de texto que não é um programador e não usa.

E é um ciclo vicioso porque a pessoa que tenta usar esse mecanismo de LLM precisa aprender ainda, e usado ele a pessoa aprende errado e não consegue evoluir, e m vários sentidos.

Fora que isso gera algo sem contexto, que não seria um problema para alguém que consegue fazer um questionamento do resultado. Aí a pessoa começa usar a solução e torce o problema para ela se encaixar no que foi entregue pela IA.

Em outros tempos eu diria que isso acabaria rápido, mas já aprendi que não acontece. Então é torcer para que os resultados se tornem muito melhores, dando mais contexto (o que depende muito da entrada de dados, o que ainda exigiria a pessoa entender bem o que está fazendo) e evitando entregar coisas com erros graves, o que eu achamo que LLM não é a solução para isso, ainda mais porque usa como base de dados a internet que sabemos que em alguns assuntos tem mais o erro que o acerto.

E não adianta alertar, quase sempre haverá, como sempre, duas bolhas, e uns vão embarcar nessa sem dó, e outros vão perceber de uma forma ou de outra, mesmo sem o alerta, por isso eu estou estou formando material para escrever algo canônico meu sobre o assunto e depois não vou ficar falando tanto.

Faz sentido?

Espero ter ajudado.

Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).

1

Concordo com vocês, porem as vezes para quem está começando é um ponto de partida a ser utilizado para sair da inercia, ai com estudo vai se evoluindo o código e a aplicação.

Confesso que com o passar dos anos, me acostumei com os frameworks e a forma como trabalho com eles, afinal já são uns 8 ou 9 anos trabalhando com codeigniter, algumas coisas o proprio framework faz por mim, acabei ficando meio preguiçoso.

Recentemente comecei alguns estudos com Laravel, e tenho gostado bastante, principalmente nas questões de trabalho com base de dados.

1

Eu conheço 2 formas que poderia ser feito isso:

  • um campo likes no conteúdo
  • uma tabela separada

Na minha visão acho mais simples uma campo no conteúdo.
ex: Tabela artigo - campos: titulo, url, texto, tags e likes

Quando alguém ve o artigo, aparece um botão de like.
Quando clicado o sistema soma 1 nos likes.

Primeira versão pode ser um form simples, que faz um post
pro sistema, e lá tem os dados do artigo a qual deve ser somado 1 like.
isso se o site for um mpa(site normal, não com framework, tipo react)

Segunda versão ainda em site normal sem framework usa ajax, ou seja vai
mandar um post igual pro mesmo lugar, mas sem dar reload na página!

Não é complicado nem nada!