Ir para conteúdo

POWERED BY:

Arquivado

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

Mahhbatera

Verificação de amizade em PHP

Recommended Posts

Iai pessoal beleza? minha duvida é a seguinte!

 

To fazendo uma pequena rede social como TCC .. só que constantemente me deparo com muitas dúvidas a respeito..

por ex: tenho o sistema de posts..onde o usuario posta na sua pagina HOME.. e todos e só os seus amigos podem ver..

mas nao sei como fazer o sistema de amizade..

 

criei o documento amigo.php que insere no banco o meu id e o id da pessoa que quero add como amigo

 

<?php
session_start();
if(isset($_SESSION["email"])){
"email:".$_SESSION ["email"];


$id_usuario = $_POST['id_usuario'];

include("conexao.php");


$sql = "INSERT INTO usuario_amigo (id_usuario_amigo, id_usuario) values ('".$id_usuario_amigo."','".$id_usuario."')";

	if ((mysql_query($sql)) ==0){
	?> <script>
	    alert("Erro ao Adicionar pessoa como amigo");document.location="perfil_amigo.php"; </script> <?php 
		}else{
		?><script>
		alert("Solicitação enviada com sucesso!");document.location="perfil_amigo.php";;

		</script><?php
		}


}
else{
echo "usuario:".$_SESSION ["usuario"];
echo '<script>
location.href="login.html";
</script>';
}
?>

 

e aqui está a tabela Usuario_amigo com os dados cadastrados(o id 2 é o meu id)

 

id_usuario_amigo id_usuario

1............................ 2

2............................ 2

3............................ 2

 

minha duvida é: enquanto meu amigo nao aceitar a solicitação, os dados nao podem ir para o banco.. como que eu faço essa verificação se ele aceitou ou nao o pedido?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por que você não cria uma coluna para diferenciar os amigos aceitos e as solicitações pendentes?

create table amigo_usuario(
   id_amigo int unsigned not null,
   id_usuario int unsigned not null,
   aceito int not null default 0
)

Compartilhar este post


Link para o post
Compartilhar em outros sites

como o menino_levado havia falado

crie uma nova coluna para diferenciar qual aceitou e qual esta pendente

então você faz um verificação

 

$sql = "INSERT INTO usuario_amigo (id_usuario_amigo, id_usuario, status) values ('".$id_usuario_amigo."','".$id_usuario."','"pendente"')";

if ((mysql_query($sql)) == 0){
?> <script>
alert("Erro ao Adicionar pessoa como amigo");document.location="perfil_amigo.php"; </script> <?php
}else{
?><script>
alert("Solicitação enviada com sucesso!");document.location="perfil_amigo.php";

 

id_usuario_amigo ..... id_usuario ................ status

1............................ 2 ......................... pendente

2............................ 2 ......................... aceito

3............................ 2 ......................... aceito

 

o amigo numero 1 ainda está pendente aguardando a aceitação

 

se o usuario 1 não for aceito ai você faz uma exclução da linha pelo id

ja o usuario 2 e 3 já foram aceitos

 

espero ter ajudado

Compartilhar este post


Link para o post
Compartilhar em outros sites

e onde tá a solução?!

Oi, Ninguem aqui é obrigado a te dar Soluçao

O que o @menino_levado, falou já e sua base certamente

Você vai verificar se existe um registro nessa tabela pra tal usuario

Se existir, obviamente ele já e amigo, então você faz uma alerta

informando a existencia da amizade para tal amigo, caso não for amigo

Envie para a tabela, que quando o usuario logar, vai verificar se tem registros com a ID

da conta que logou nessa tabela, então mostra o numero de convites( linhas referentes a X usuarios )

então cria uma pagina que vai resgatar essas ids, é caso ele aceitar, você grava na tabela de amigos

é remove da tabela de convites ..

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu postei aonde tava a solução, pq até então o menino levado tinha postado o mesmo codigo que eu postei, e nao falou nada, acho q ele errou.. pq dai depois ele apagou, e depois eu nao vi o que ele posto.. foi um engano... peço desculpas.. ele me ajudou mto!

 

deixa eu ver se entendi..eu tenho a tabela usuario e usuario_amigo.. eu crio outra tabela chamada CONVITE .. dai todo pedido de amizade vai para essa tabela..vai pega o id do usuario meu, e o id do usuario do amigo que eu quero add.. dai depois que o amigo aceitar, esses dados da tabela CONVITE vão para a tabela Usuario_amigo?!?! seria isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A sua dúvida foi a seguinte:

minha duvida é: enquanto meu amigo nao aceitar a solicitação, os dados nao podem ir para o banco..

como que eu faço essa verificação se ele aceitou ou nao o pedido?!

Você estava no caminho certo.

id_usuario_amigo id_usuario

1............................ 2

2............................ 2

3............................ 2

Então eu disse

Por que você não cria uma coluna para diferenciar os amigos aceitos e as solicitações pendentes?

create table amigo_usuario(
   id_amigo int unsigned not null,
   id_usuario int unsigned not null,
   aceito int not null default 0
)

O Edilso entendeu e te deu a solução.

crie uma nova coluna para diferenciar qual aceitou e qual esta pendente

então você faz um verificação

$sql = "INSERT INTO usuario_amigo (id_usuario_amigo, id_usuario, status) 
values ('".$id_usuario_amigo."','".$id_usuario."','"pendente"')";

deixa eu ver se entendi..eu tenho a tabela usuario e usuario_amigo.. eu crio outra tabela chamada CONVITE .. dai todo pedido de amizade vai para essa tabela..vai pega o id do usuario meu, e o id do usuario do amigo que eu quero add.. dai depois que o amigo aceitar, esses dados da tabela CONVITE vão para a tabela Usuario_amigo?!?! seria isso?

Não! Você acrescenta na tabela usuario_amigo a coluna booleana aceito (0 = false, 1 = true). Toda solicitação de amizade é gravada nessa tabela como pendente, ou seja, 0.Daí, quando o usuário aceita a solicitação de amizade o status da coluna aceito muda para 1 e o cidadão passa a aparecer como amigo do usuário. Caso ele negue a solicitação, o registro é apagado da tabela usuario_amigo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

entendi caraa! poxa.. muito obrigado vou fazer os testes aqui! valeu mesmoo! me ajudou pakaaas! =)

 

mas agora eu tenho outra dúvida.. a tabela usuario_amigo tem que ter duas chaves primárias? primary key id_usuario_amigo e primary key id_usuario?

 

e não vão ser nenhuma auto increment né?

 

 

ah e pra criar la a coluna aceito seria

 

aceito boolean not null default 0

?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

e onde tá a solução?!

 

como disseram, ele te deu a base...

com essa tabela criada, você manda o post, so pro amigo adicionados,

nos q estão com a aprovação pendente, ñ recebem...

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas agora eu tenho outra dúvida.. a tabela usuario_amigo tem que ter duas chaves primárias? primary key id_usuario_amigo e primary key id_usuario?

e não vão ser nenhuma auto increment né?

você pode fazer

CREATE TABLE IF NOT EXISTS teste (
 id1 int(11) NOT NULL DEFAULT '0',
 id2 int(11) NOT NULL DEFAULT '0',
 PRIMARY KEY (id1,id2)
) ENGINE=InnoDB;

ou

CREATE TABLE IF NOT EXISTS teste (
 id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
 id1 int(11) NOT NULL DEFAULT '0',
 id2 int(11) NOT NULL DEFAULT '0',
 PRIMARY KEY (id),
 UNIQUE KEY id1 (id1),
 UNIQUE KEY id2 (id2)
) ENGINE=InnoDB;

Em ambos os casos id1 e id2 serão únicos.

 

ah e pra criar la a coluna aceito seria

aceito boolean not null default 0

?!

você até pode fazer assim, mas o MySQL vai acabar convertendo para int.

você pode definir a coluna assim:

aceito set('0','1') not null default 0

Para garantir que apenas o valor 0 e 1 será aceito.

ou

aceito int(1) not null default 0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi.. mas esse comando IF NOT EXISTS pra que ele serve?

 

e se eu fizer desse jeito, a tabela USUARIO e a tabela USUARIO_AMIGO vao estar ligadas? não preciso de uma chave estrangeira?

 

desculpa as duvidas, eh que estou iniciando agora!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi.. mas esse comando IF NOT EXISTS pra que ele serve?

Cria a tabela se ela não existir.

 

e se eu fizer desse jeito, a tabela USUARIO e a tabela USUARIO_AMIGO vao estar ligadas? não preciso de uma chave estrangeira?

Assim é uma possibilidade:

CREATE TABLE usuario(
   id BIGINT( 20 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
   login VARCHAR( 50 ) NOT NULL ,
   senha VARCHAR( 800 ) NOT NULL ,
   PRIMARY KEY ( id )
) ENGINE = INNODB;

CREATE TABLE amigo_usuario(
   id BIGINT( 20 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
   usuario_id BIGINT( 20 ) UNSIGNED NOT NULL ,
   amigo_id BIGINT( 20 ) UNSIGNED NOT NULL ,
   aceito INT( 1 ) NOT NULL DEFAULT 0,
   PRIMARY KEY ( id ) ,
   CONSTRAINT fk_usuario FOREIGN KEY ( usuario_id ) REFERENCES usuario( id ) ON DELETE CASCADE,
   UNIQUE KEY solicitacao_amizade (usuario_id,amigo_id)
) ENGINE = INNODB;

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.