Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Thiago Sales

[Tutorial] - [Notificações (1)] PHP + MYSQL Simples.

Recommended Posts

Bom, não sei se estou na área certa, mais vamos lá:

Eu andei pesquisando, já que não achava nada sobre tutoriais de notificações (1) e também ninguém dizia como fazer, eu pesquisei sobre como listar dados em números aqui mesmo no fórum e me deram num_rows que funcionou perfeitamente, não sou aquele cara FOOOOD## em php, eu sou um newbie que ta aprendendo as coisas agora, meio que na cagada por ter lógica mais ta fluindo... Não vim aqui no fórum só pra pedir ajuda, vim pra compartilhar o que aprendi que achava que nunca conseguiria e que continuaria no mesmo nível de bost# de sempre... Agradeço aqueles que me ajudaram aqui.

Bom vamos lá.

Vou ensinar no básico de sistema de likes(Curtidas) como curtindo um post ou frase.

 

Primeiro no banco de dados( Para facilitar vou postar logo a base de dados ).

 

Cria um banco de dados chamado notifications

A base está abaixo para exportar.

 

--
-- Estrutura da tabela `notifications`
--

CREATE TABLE IF NOT EXISTS `notifications` (
`id` int(255) NOT NULL AUTO_INCREMENT,
`id_post` varchar(500) NOT NULL,
`para` varchar(500) NOT NULL,
`notification` text NOT NULL,
`total` int(255) NOT NULL,
`data` varchar(500) NOT NULL,
`lido` int(50) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=76 ;

--
-- Extraindo dados da tabela `notifications`
--


 

No seu painel de usuario ou administrador você deve chamar o script e ter um variável que tenha o nome do usuário da sessão (Atualmente logado).

Lógico que você precisa ter dados no banco de dados, comece adicionando lido como 0, caso não importe, queria adiciona manualmente, abaixo alguns valores para demostração.

 

(62, '63', 'Elita Barcelar', 'Ana Carollyne curtiu sua frase, que possui', 1, '', 0),
(64, '69', '- AnaCarollyne', 'Thiago Sales curtiu sua frase, que possui', 1, '', 0),
(65, '65', '- AnaCarollyne', 'Raiane curtiu sua frase, que possui', 1, '', 0),
(67, '73', 'Nery', 'Sua frase possui', 1, '', 0),
(68, '72', '- AnaCarollyne', 'Sua frase possui', 1, '', 0),
(69, '74', 'Jancyelle Nayara', 'Jancyelle curtiu sua frase, que possui', 1, '', 0),
(70, '74', 'Jancyelle Nayara', ' curtiu sua frase, que possui', 2, '', 0),
(71, '79', '- AnaCarollyne', ' curtiu sua frase, que possui', 1, '', 0),

 

No seu painel de usuário com já os valores no banco de dados aplique no código entre tags php junto ou separado de dados da sua sessão.

Na sua index.php ou página declare:

<?php
// Caso você tenha os dados da sessão.
$PerfilUsuarioLogin = $SESSION['UsernameLogin'];
//

// Entendendo o código:
$notificacoes = mysql_query("SELECT notification FROM notifications WHERE para = '$PerfilUsuarioLogin' AND lido = 0"); // Aqui ele seleciona toda notificação na tabela notificações onde para(No caso o usuário ou eu) se for igual eu no caso quem está logado e tiver notificações não lidas ele seleciona.
$num_notificacoes = mysql_num_rows($notificacoes); // Aqui ele retorna os valores das notificações como números.

// No caso se tiver 8 Notificações como não lida. ele vai retornar 8. Caso estiver 7 não lidas, ele vai retornar 7.

?>

com isso se você fizer um ECHO ele vai retornar o total de notificações.

 

Com qual variável eu faço o echo? com a $num_notificacoes simples...

 

<?php echo $num_notificacoes;?>

No caso isso já apareceria. agora como coloca-lo no menu?

Simples... Caso tenha um menu vou fazer um exemplo simples:

 

<a href="?pagina=notifi">Notificações (<?php echo $num_notificacoes;?>)</a>
<a href="?pagina=editar">Editar Perfil</a>
<a href="?pagina=cadastrar postagem"> </a>

É simples, coloquei o ECHO depois das notificações.

Mas poderemos melhorar esse código fazendo o seguinte:

 

 

<a href="?pagina=notifi">Notificações (<?php if($num_frases != 0){ echo $num_notificacoes;}?>)</a>
<a href="?pagina=editar">Editar Perfil</a>
<a href="?pagina=cadastrar postagem"> </a>

// Entendendo o código: O que basicamente eu fiz? { Caso o número de frases for diferente ou igual a 0 ele ale mostra as notificações, se ele for igual a zero, no caso não aparecerá nada.

Com isso ele já mostrará as notificações, agora vamos para a parte da sua página de curtir, como adicionar uma notificação?

 

No meu caso na minha página eu fiz de duas formas: Caso haja e caso não haja sessões.

<?php
$NomeUsuarioLogado = $_SESSION['usuarioNome']; // Pega o usuário logado atualmente caso tenha.
$Pegatitulo = $_GET['titulo']; // Ele pega o titulo da postagem.
$PegaId = $_SESSION['idPost']; // Pega o id do post

$total = + 1; // Adiciona + 1
$perfil = $_SESSION['usuarioLogin']; // Pega o perfil do usuário caso tenha algum logado.

if(!isset($_SESSION['usuarioNome'])){
mysql_query("INSERT INTO notifications (id_post, para, notification, total) VALUES ('$pegaId', '$perfil', 'Sua frase possui', '$total')");
}else if(isset($_SESSION['usuarioNome'])){
mysql_query("INSERT INTO notifications (id_post, para, notification, total) VALUES ('$pegaId', '$perfil', '$PerfilNUser curtiu sua frase, que possui', '$total')");
}

// Explicando código: Caso haja uma sessão ou um usuário logado ele insere de um jeito. Caso não haja usuários logados ou não exista uma sessão, ele insere de outro jeito.
?>

Mais eu fiz a sessão e na minha página não aparece.

Chame o session_start(); Na página inicial do seu site no caso na index.php

E abaixo coloque as variáveis da sessão:

Citado no código acima ..

$NomeUsuarioLogado = $_SESSION['usuarioNome'];

 

Com isso ele adiciona no banco de dados uma notificação.

Após adicionado volte ao seu menu e veja como está tudo lá certinho apareceu uma notificação além das outras.


Agora como faço para exibir e mostrar como lido a notificação?

Também é simples:

 

Fiz um código simples:

 

<h2>Notificações:</h2>
<p style="font-size:12px;">Veja as notificações sobre curtidas em suas frases.</p>
</br>
</br>

<?php
$PerfilUser = $_SESSION['usuarioLogin'];
$seleciona = mysql_query("SELECT * FROM notifications WHERE para = '$NomedoUsuarioLogado' ORDER BY ID DESC");
$conta = @mysql_num_rows($seleciona);

if($conta <= 0){
echo "<center>Você não possui notificações.</center>";
}else{
while($ln = mysql_fetch_array($seleciona)){
$idPost = $ln['id'];
$id_Post = $ln['id_post'];
$notification = $ln['notification'];
$total = $ln['total'];
$curtidas = NULL;

if($total == 1){
$curtidas = "curtida";
}else if($total >= 2){
$curtidas = "curtidas";
}
if($total == 1){
$total = "uma";
}

mysql_query("UPDATE notifications SET lido = '1' WHERE para = '$PerfilUser'");
?>

<p align="left">Frase #Id: <a href="../?pagina=frase&?frase=true&id=<?php echo $id_Post;?>"><?php echo $id_Post;?></a></p>
<p><?php echo $notification;?> <?php echo $total;?> <?php echo $curtidas;?> </p>
<hr color="#99FF99">
<?php }} ?>


// Entendendo o código: Ele faz a busca no banco de dados, e se tiver notificações ele faz o while(Lista) todos dados que tem no banco e dados... depois ele atualiza para 1 todas as notificações.

Com isso ele já vai listar todas a notificações. Como no caso eu adicionei um UPDATE para quando o usuário entrar nessa página, todos os campos que estão como lido = 0 vai para 1, mas também você pode criar uma outra página para que ele adicione assim que o usuário ou administrador acessar a tal página, aí ele vai lá e marca como lido.

 

 

Bom, esse foi meu primeiro tutorial, não sei se saiu muito bem como deveria, tentei explicar o máximo possível, mas espero estar ajudando algumas pessoas aí que tem dificuldade e querem esse sistema, com o tempo pode ir adaptando se esse for o caso, ou até estilizar o texto, deixar ele mais realista, com background etc... estilo Ask.FM facebook entre outras redes sociais...


Espero ter ajudado !!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa iniciativa porém, não ficou legal.

Você poderia ter usado PDO (mysql_* estão obsoletas).

Não se deve utilizar @ para omitir erros.

 

Olhando rápidamente seu código vi esses detalhes, não cheguei a testar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Concordo com o Marcos Xavier, poderia sim usar PDO, conexão mais complexa e segura, e nunca usar @ "Esconder os erros".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Concordo com o Marcos Xavier, poderia sim usar PDO, conexão mais complexa e segura, e nunca usar @ "Esconder os erros".

 

 

Boa iniciativa porém, não ficou legal.

Você poderia ter usado PDO (mysql_* estão obsoletas).

Não se deve utilizar @ para omitir erros.

 

Olhando rápidamente seu código vi esses detalhes, não cheguei a testar.

 

 

É, mais eu não sei utilizar o DPO, ainda não pesquisei sobre isso, breve quem sabe eu pesquisarei.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Legal. Uma dica, quando for estudar PDO, dê uma pesquisada no PHP Orientado a Objetos, uma forma mais organizada de programar PHP, e até outras Linguagens.

Boa Sorte!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tranquilo @Thiago Sales. Foi uma critica construtiva.

Com certeza se a galera geek do fórum ver também irá apontar erros no seu code.

PDO é bem tranquilo de aprender, dá uma olhada no manual que te ajudará bem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Legal. Uma dica, quando for estudar PDO, dê uma pesquisada no PHP Orientado a Objetos, uma forma mais organizada de programar PHP, e até outras Linguagens.

Boa Sorte!

Ok obrigado vou estudar sim.

 

Tranquilo @Thiago Sales. Foi uma critica construtiva.

Com certeza se a galera geek do fórum ver também irá apontar erros no seu code.

PDO é bem tranquilo de aprender, dá uma olhada no manual que te ajudará bem.

Eu também mecho com C# no unity3D, agora estou meio parado mexendo em PHP.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.