Ir para conteúdo

Arquivado

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

lucaswxp

Sistema de usuario utilizando SESSIONS e POO

Recommended Posts

Primeiro tuto aqui http://forum.imasters.com.br/public/style_emoticons/default/assobiando.gif Bom, acho que aqui é a seção certa ^^

O codigo vai meio que se auto explicando com comentarios entao vou ensinar como instalar...

È um sistema de usuarios com direito a:

 

Adicionar usuario;

Editar proprio perfil;

Suspender usuarios;

Ativar usuarios;

Deletar usuarios;

Adicionar usuarios;

 

Primeiramente vamos criar um db com o nome de 'login_sistema':

CREATE DATABASE IF NOT EXISTS `login_sistema`

Agora vamos criar a tabela 'usuarios':

CREATE TABLE IF NOT EXISTS `usuarios` (
  `id` int(6) NOT NULL auto_increment,
  `nome` varchar(62) NOT NULL,
  `login` varchar(12) NOT NULL,
  `senha` char(32) NOT NULL,
  `email` varchar(30) NOT NULL,
  `ativo`  int(1) NOT NULL,
  PRIMARY KEY  (`id`)
)

Inserimos um usuario com o login de 'teste' e senha criptografada em md5 com o valor de 'teste':

INSERT INTO `usuarios` VALUES (NULL,'besha','teste','698dc19d489c4e4db73e28a713eab07b ','asd@hota.com',1)

No arquivo config.php altere o array $path['classes'] para o destino de onde esta a pasta classes

Altere $path['caminhoraiz'] para o caminho raiz do sistema

Altere $path['raiz'] para o nome do arquivo 'raiz' (exemplo, você colocou como nome a pasta que esta o script de users 'login' entao ficará assim: logain/index.php)

 

Altere o array dados de acordo com seu user e senha do mysql o padrao esta como:

servidor: localhost

user: root

senha: (vazia)

 

config.php

<?php
/*
 * Sistema criado por 'Lucas Pelegrino'
 * Email: lucas_wxp@hotmail.com
 * Não conhece alguma função? http://br.php.net/ da uma pesquisadinha;D
*/
if (basename($_SERVER["PHP_SELF"]) == "config.php")
		header ("location: index.php");

$path = array();

// Caminho da pasta classes
$path['classes'] = "D:/EasyPHP/www/sistema_login/classes/";

// Caminho da pasta raiz
$path['caminhoraiz'] = "D:/EasyPHP/www/sistema_login";

// Nome do arquivo raiz
$path['raiz'] = "sistema_login/index.php";

// AUTOLOAD inclui as funções na pasta classes/ sem precisar utilizar include manualmente
function __autoload ($class){
	global $path;
	require_once ($path['classes'] . $class . ".class.php");
}

class mysql{
###########################
# Insera os dados do mysql#
###########################
	private $dados = array("servidor" => "localhost", "usuario" => "root", "senha" => "", "link_id" => NULL);

	function conecta (){
	// Nos conectamos com o BD usando os dados da array $dados
		$this->dados["link_id"] = mysql_connect($this->dados["servidor"],$this->dados["usuario"],$this->dados["senha"]) or
		exit (mysql_error());
		mysql_select_db("login_sistema") or exit (mysql_error());
	}
	// Fechamos a conexão
	function desconecta (){
		mysql_close($this->dados["link_id"]) or exit (mysql_error());
	}
}
?>

index.php

<?php
define ("login_sis",1);
include_once "config.php";
	// Abre uma conexão com o banco de dados
	$mysql = new mysql();
	$mysql->conecta();
	$login = new login();

if (@$_GET['act'] == "loga"){
	// Efetua login
	$login = new login();
	$login->loga();
	$mysql->desconecta();

}
// Se ele ja tiver com as sessões registradas redireciona ele para o painel
elseif ($login->logado() == true){
	header  ("location: admin/index.php");
	}
else {
?>
	<html>
	<head>
		<title>Sistema de Autenticação</title>
	</head>
	<body>

	<div style="width:400px;padding: 10px;border: 1px dotted #000;margin:0 auto;">
		<h1>Administração</h1><br />
		<form action="index.php?act=loga" method="POST">
		Login: <input type="text" name="login" /><br />
		Senha <input type="password" name="senha" /><br />
		<input type="submit" value="Autenticar" />
		</form>
		</div>
	</div>
		</body>
</html>

<?php }  ?>

loga.php

<?php
include_once "seguranca.php";
$mysql->conecta();
$login->loga();
$mysql->desconecta();
?>

seguranca.php

<?php
include_once "config.php";
	// Abrimos uma conexão com o banco de dados
	$mysql = new mysql();
	$mysql->conecta();
	$login = new login();
		// Se a função logado() retornar false oo "login_sis" não estiver definido (definimos no topo de cada pagina "index", isso ajuda a proteger as paginas já que só a queremos através de query-string) exibe mensagem de erro e encerra o script
if ($login->logado() == false || !defined("login_sis")) exit("<strong style=\"color:red\";>Acesso restrito</strong>");
	$mysql->desconecta();
		?>

admin/index.php

<?php
define ("login_sis",1);
// Arquivo protetor de pagina
include_once "../seguranca.php";
include_once "../config.php";
if (@$_GET['act'] == "logout"){
	$login = new login();
	$login->logout();
}
if (@$_GET['act'] == "editar" && @$_GET['act2'] == "perfil"){
	include "perfil.php";
}

if (@$_GET['act'] == "add" && @$_GET['act2'] == "users"){
	include "usersadd.php";
}
if (@$_GET['act'] == "editar" && @$_GET['act2'] == "users"){
	include "users_edit.php";
}
elseif (!isset($_GET['act'])) {
?>
		<html>
	<head>
		<title>Sistema de Autenticação</title>
	</head>
	<body>

	<div style="width:400px;padding: 10px;border: 1px dotted #000;margin:0 auto;">
		<h1>Administração</h1><br />
			<a href="index.php?act=editar&act2=perfil">Editar Perfil</a> | <a href="index.php?act=add&act2=users">Add usuarios</a> | <a href="index.php?act=editar&act2=users">Editar usuarios</a> | <a href="index.php?act=logout">Logout</a><br />
			</div>
	</div>
		</body>
</html>

 <?php } ?>

admin/perfil.php

<?php
include_once "../seguranca.php";
include_once "../config.php";
	$mysql->conecta();
	$user = new user();
if (@$_GET['act'] == "editar" && @$_GET['act2'] == "perfil" && @$_GET['act3'] == "done"){
	$user->alteraperfil();
}
else {
?>
	  <html>
	<head>
		<title>Sistema de Autenticação</title>
	</head>
	<body>

	<div style="width:400px;padding: 10px;border: 1px dotted #000;margin:0 auto;">
		<h1>Administração</h1><br />
			<a href="index.php?act=editar&act2=perfil">Editar Perfil</a> | <a href="index.php?act=add&act2=users">Add usuarios</a> | <a href="index.php?act=editar&act2=users">Editar usuarios</a> | <a href="index.php?act=logout">Logout</a><br />
	<form action="index.php?act=editar&act2=perfil&act3=done" method="POST">
		Nome: <input type="text" name="nome" value="<?php $user->pegaperfil("nome") ?>" /><br />
		E-mail: <input type="text" name="email" value="<?php $user->pegaperfil("email") ?>" /><br />
		Antiga senha (Opcional): <input type="password" name="senha" /><br />
		Nova senha: <input type="password" name="newsenha" /><br />
		<input type="submit" value="Alterar" />
		</form>
				</div>
	</div>
		</body>
</html>
<?php } $mysql->desconecta(); ?>

admin/users_edit.php

<?php
include_once "../seguranca.php";
include_once "../config.php";

	$mysql->conecta();
	$user = new user();
	
if (@$_GET['act'] == "editar" && @$_GET['act2'] == "users" && @$_GET['act3'] == "suspender"){
	$user->suspender();
}
elseif (@$_GET['act'] == "editar" && @$_GET['act2'] == "users" && @$_GET['act3'] == "ativar"){
	$user->ativar();
}
elseif (@$_GET['act'] == "editar" && @$_GET['act2'] == "users" && @$_GET['act3'] == "deletar"){
	$user->deletar();
}
else{
	?>
		<html>
	<head>
		<title>Sistema de Autenticação</title>
	</head>
	<body>

	<div style="width:400px;padding: 10px;border: 1px dotted #000;margin:0 auto;">
		<h1>Administração</h1><br />
			<a href="index.php?act=editar&act2=perfil">Editar Perfil</a> | <a href="index.php?act=add&act2=users">Add usuarios</a> | <a href="index.php?act=editar&act2=users">Editar usuarios</a> | <a href="index.php?act=logout">Logout</a><br />   
		<div style="margin-top: 10px;">
	<?php echo $user->listar(); ?>
			</div>
	</div>
		</body>
</html>
<?php
 } $mysql->desconecta(); ?>

admin/usersadd.php

<?php
include_once "../seguranca.php";
include_once "../config.php";
	$mysql->conecta();
	$user = new user();
if (@$_GET['act'] == "add" && @$_GET['act2'] == "users" && @$_GET['act3'] == "done"){
	$user->adduser();
}
else{
?>
	<html>
	<head>
		<title>Sistema de Autenticação</title>
	</head>
	<body>

	<div style="width:400px;padding: 10px;border: 1px dotted #000;margin:0 auto;">
		<h1>Administração</h1><br />
			<a href="index.php?act=editar&act2=perfil">Editar Perfil</a> | <a href="index.php?act=add&act2=users">Add usuarios</a> | <a href="index.php?act=editar&act2=users">Editar usuarios</a> | <a href="index.php?act=logout">Logout</a><br />
			
		<div style="margin-top: 10px;">
		<form action="index.php?act=add&act2=users&act3=done" method="POST">
		Nome: <input type="text" name="nome" /><br />
		Login <input type="text" name="login" /><br />
		E-mail: <input type="text" name="email" /><br />
		Senha: <input type="password" name="senha" /><br />
		Novamente: <input type="password" name="againsenha" /><br />
		<input type="submit" value="Cadastrar" />
		</form>
	</div>
	</div>
		</body>
</html>
<?php } $mysql->desconecta(); ?>

classes/login.class.php

<?php
// Arquivo protetor de acesso direto ao arquivos de classe
include "protetor_classes.class.php";
class login{
	## Loga
	function loga(){
		
		// Remove magic quotes
		$security = new security();$security->remove_mq();
		// Atribui array POST
		$login = addslashes($_POST['login']);
		$senha = md5(addslashes($_POST['senha']));
		// Faz consulta no banco de dados
		$query = mysql_query("SELECT * FROM `usuarios` WHERE login='$login' AND senha='$senha' AND ativo='1'");
		$fetch = mysql_fetch_row($query);
		$num_rows = mysql_num_rows($query);
		// Se o numero de resutados for diferente de 1 ou o resultado do campo "ativo" (do banco de dados) estiver com valor 0 exibe erro
		if ($num_rows != 1 || $fetch[5] == 0){
			echo "<strong style=\"color:red;\">Usuario não encontrado</strong>";
			}
		// Caso contrario registra a sessão e redireciona para o painel
		else{
			session_start();
			$_SESSION["login_sistema"] = 1;
			$_SESSION["id"] = $fetch[0];
			$_SESSION["login"] = $login;
			$_SESSION["senha"] = $senha;
			header ("location: index.php");
			}
		}
	## Verifica se esta logado
	function logado(){
			session_start();
			if(isset($_SESSION['login_sistema'])){
				$query = mysql_query("SELECT `ativo` FROM `usuarios` WHERE login='".$_SESSION['login']."' AND senha='".$_SESSION['senha']."'");
				$result = mysql_fetch_row($query);
				return ($result[0] == 1) ? true : false;
				
			}
			else
			return false;
		}
	## Seta a variavel $_SESSION como um array vazio, assim efetuando logout
	function logout(){
			session_start();
			$_SESSION = array();
			header ("location: ../index.php");
	}
}
?>

classes/users.class.php

<?php
// Arquivo protetor de acesso direto ao arquivos de classe
include "protetor_classes.class.php";
class user{
	####################PERFIL####################
	## Loga
	function pegaperfil($dado){
		// Seleciona os dados ($dado) do usuario com o id SESSION['id'] que foi coocado no server na hora do cadastro
		$query = mysql_query("SELECT `$dado` FROM `usuarios` WHERE id=".$_SESSION['id']);
		$fetch = mysql_fetch_row($query);
		// Exibe os dados
		echo ($dado == "nome" || $dado == "email") ? $fetch[0] : "";
		}
	function alteraperfil(){
		// Atribuição das variaveis POST
		$nome = $_POST['nome'];
		$email = $_POST['email'];
		$senha = $_POST['senha'];
		$newsenha = $_POST['newsenha'];
		// Se a senha não estiver vazia a nova senha estiver exibe mensagem de erro
		if (!empty ($senha) && empty ($newsenha)) {
			echo "<strong style=\"color:red;\">Você deve informar a nova senha</strong>";
		}
		// Se a senha estiver vazia e a nova senha não estiver exibe erro
		elseif (empty ($senha) && !empty ($newsenha)) {
			echo "<strong style=\"color:red;\">Você deve informar a senha</strong>";
		}
		#### Realiza alteração com senha informada
			// Se as duas senhas informadas conter algum dado realiza uma consulta
		elseif (!empty ($senha) || !empty ($newsenha)) {
			// Puxa do banco de dados a senha cadastrada para verificar com a informada no formulario
		$selectSenha = mysql_query ("SELECT `senha` FROM `usuarios` WHERE id={$_SESSION['id']}");
		$result = mysql_fetch_array($selectSenha);
			// Caso sejam diferentes exibe erro
			if (md5($senha) != $result['senha']){
				echo "<strong style=\"color:red;\">A senha que você informou não consta com a do banco de dados</strong>";
			}
			// Caso contrario realiza as alterações
			else {
				$query = mysql_query ("UPDATE `usuarios` SET nome='$nome', email='$email', senha='".md5($newsenha)."' WHERE id={$_SESSION['id']}");
				// Alteramos os dados da sessao atual
				$_SESSION['senha'] = md5($newsenha);
				echo "<strong style=\"color:red;\">Alterações efetuadas com sucesso!</strong>";
			}
		}
		#### Realiza alteração sem senha informada
		else {
				$query = mysql_query ("UPDATE `usuarios` SET nome='$nome', email='$email' WHERE id={$_SESSION['id']}");
				echo "<strong style=\"color:red;\">Alterações efetuadas com sucesso!</strong>";
			}
		}
	####################ADD USER####################
	
	function adduser(){
		// Atribuição das variaveis POST
		$nome = addslashes($_POST['nome']);
		$login = addslashes($_POST['login']);
		$email = addslashes($_POST['email']);
		$senha = addslashes($_POST['senha']);
		$againsenha = addslashes($_POST['againsenha']);
		// Se nome, login, email estiverem vazios exibe erro
		if (empty($nome) || empty($login) || empty($email))  exit ("<strong style=\"color:red;\">Todos os campos devem ser preenchidos!</strong>");
		// Faz verificação com as senhas
		if ($senha != $againsenha || empty($senha) || empty($againsenha))  exit ("<strong style=\"color:red;\">Digite as senhas corretamente!</strong>");
		// Verifica se o login ja não foi cadastrado antes no banco de dados
		$checa = mysql_query("SELECT `login` FROM `usuarios` WHERE login='$login'") or exit (mysql_error());
		$num = mysql_num_rows($checa);
		if ($num >= 1) exit ("<strong style=\"color:red;\">Este login ja esta sendo utilizado por outra pessoa!</strong>");		
		// Insere o usuario
		$query = mysql_query ("INSERT INTO `usuarios` VALUES (NULL,'$nome','$login','".md5($senha)."','$email',1)");
		echo "<strong style=\"color:red;\">Usuario adicionado com sucesso!</strong>";
	}
	####################EDITAR####################
	
	function listar(){
		// Seleciona nome, id, ativo da tabela usuarios
		$query = mysql_query("SELECT `nome`,`id`,`ativo` FROM `usuarios` ORDER BY `nome` ASC");
		// Pega o numero de resultados para efetuar um loop
		$num = mysql_num_rows($query);
		// Se não houver usuarios exibe um erro
		if ($num == 1) exit ("<strong style=\"color:red;\">Não existem usuarios a serem listados!</strong>");
		// Efetua o loop
		for ($i=0;$i<$num;$i++){
		$fetch = mysql_fetch_row($query);
		// Faz uma condição para não mostrar o seu proprio nome no painel (para ele não poder se auto-excluir)
		if ($fetch[1] != $_SESSION['id']){
			// Mostra nome
		echo ($fetch[0] . " | ");
			// Faz uma condição, caso ele esteja ativo exibe "Suspender", caso esteja inativo exibe "Ativar"
		echo  ($fetch[2] == 1) ? ('<a href="index.php?act=editar&act2=users&act3=suspender&id='.$fetch[1].'">Suspender</a> | ') : '<a href="index.php?act=editar&act2=users&act3=ativar&id='.$fetch[1].'">Ativar</a> | ';
		// Mostra deletar
		echo '<a href="index.php?act=editar&act2=users&act3=deletar&id='.$fetch[1].'">Deletar</a><br />';
			}
		}
	}
	function suspender (){
		// Suspende um usuario setendo o campo 'ativo' do banco de dados como 0 utilizando como clausula WHERE o ID passado na query string (?id=)
		mysql_query ("UPDATE `usuarios` SET ativo=0 WHERE id={$_GET['id']}");
		echo "<strong style=\"color:red;\">Usuario suspenso com sucesso!</strong>";
	}
	
	function ativar (){
		// Ativa um usuario setendo o campo 'ativo' como 1 utilizando como clausula WHERE o ID passado na query string (?id=)
		mysql_query ("UPDATE `usuarios` SET ativo=1 WHERE id={$_GET['id']}");
		echo "<strong style=\"color:red;\">Usuario ativado com sucesso!</strong>";
	}
		// Deleta um usuario utilizando como clausula WHERE o ID passado na query string (?id=)
	function deletar (){
	mysql_query ("DELETE FROM `usuarios` WHERE id={$_GET['id']}");
	echo "<strong style=\"color:red;\">Usuario deletado com sucesso!</strong>";
	}
}
?>

classes/security.class.php

<?php
include "protetor_classes.class.php";
class security{
	function remove_mq (){
	if (get_magic_quotes_gpc()) {
		function stripslashes_deep($value)
	{
		$value = is_array($value) ?
			array_map('stripslashes_deep', $value) :
			stripslashes($value);

		return $value;
	}

	$_POST = array_map('stripslashes_deep', $_POST);
	$_GET = array_map('stripslashes_deep', $_GET);
	$_COOKIE = array_map('stripslashes_deep', $_COOKIE);
	$_REQUEST = array_map('stripslashes_deep', $_REQUEST);
		}
	}
}
?>

classes/protetor_classes.class.php

<?php
	if (basename(getcwd()) == "classes") header ("location: ../index.php");
?>

Bom, ai esta http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Só configurar o arquivo config.php como falei la em cima e tudo certo ^^

Criticas construtivas são bem-vindas :rolleyes:

 

DOWNLOAD DO SCRIPT COMPLETO AQUI

Compartilhar este post


Link para o post
Compartilhar em outros sites

De mais cara, to um tempo procurando algo assim...

 

Sou designer, e gosto de fuçar bastante com php e mysql... e estou estudando classes... e esse tuto tah me tirando várias duvidas...

 

Valew!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

ae amigo eu estou tentando usar seu sistema de login mas infelizmente eu estou me deparando com um erro na pagina que nao estou entendendo o pq dele se puder me dar uma mãosinha eu agradeço!

 

Fatal error: Class 'mysql' not found in C:\xampp\htdocs\sistema_login\seguranca.php on line 4

 

configurei o arquivo config.php como você informou e mesmo assim continua dando esse erro após me logar!

seguranca.php

<?php
include_once "config.php";
// Abrimos uma conexão com o banco de dados
$mysql = new mysql();
$mysql->conecta();
$login = new login();
	// Se a função logado() retornar false oo "login_sis" não estiver definido (definimos no topo de cada pagina "index", isso ajuda a proteger as paginas já que só a queremos através de query-string) exibe mensagem de erro e encerra o script
if ($login->logado() == false || !defined("login_sis")) exit("<strong style=\"color:red\";>Acesso restrito</strong>");
$mysql->desconecta();
	?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu achei esse erro:

 

Warning: require_once(C:/server/htdocs/news/cad_user/classes/user.class.php) [function.require-once]: failed to open stream: No such file or directory in C:\server\htdocs\news\cad_user\config.php on line 24

 

Fatal error: require_once() [function.require]: Failed opening required 'C:/server/htdocs/news/cad_user/classes/user.class.php' (include_path='.;C:\php5\pear') in C:\server\htdocs\news\cad_user\config.php on line 24

 

$path = array();

// Caminho da pasta classes
$path['classes'] = "C:/server/htdocs/news/cad_user/classes/";

// Caminho da pasta raiz
$path['caminhoraiz'] = "C:/server/htdocs/news/cad_user/";

// Nome do arquivo raiz
$path['raiz'] = "news/cad_user/index.php";

// AUTOLOAD inclui as funções na pasta classes/ sem precisar utilizar include manualmente
function __autoload ($class){
	global $path;
	require_once ($path['classes'] . $class . ".class.php");
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, ele nao achou os caminhos das pastas o.O

tenta mudar:

$path['caminhoraiz'] = "C:/server/htdocs/news/cad_user/";

para:

$path['caminhoraiz'] = "C:/server/htdocs/news/cad_user";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lucas!

 

Estava verificando na parte de usuários, e apenas o primeiro usuario selecionado, eu consigo editar!

 

Cadastrei uns 3 novos usuarios, e to quebrando a cabeça para mudar o script para editar esses novos!

 

Teria como me ajudar com isso?

 

Valew

Compartilhar este post


Link para o post
Compartilhar em outros sites

Legal.

Mas tem como alguem posta o arquivo compactado ai, pq aqui ta dificil copiar e colar todo esse código, trava toda hora =/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Salve amigo tentei baixar o arquivo mas no site rapidshare informa erro

 

pode postar novo link..

 

estou a procura de algo assim para colocar em meu site ,, se possivel gostaria de usar o pot que deixou aqui ..

Compartilhar este post


Link para o post
Compartilhar em outros sites

bacana..

 

me ajudou a entender mais POO :D

 

nao uma critica, mas sim uma sugestao:

só axei q o uso do '@' nos if's ta errado

 

você poderia usar o isset() pra verificar se está setado ^^

 

mas ficou show. . parabens

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Crash®

Então cara, este script já é um pouco antigo, tem + de 6 meses que postei, eu ja formatei meu PC, não tenho mais =/.

 

@Imao

Bom poder ajudar, e obrigado pela sugestão :P. Como eu disse é meio antigo, e acho que eu tinha acabado de aprender OO, então eu não empreguei o uso de OO e código tem alguns erros xD

 

Acho que farei outro, com um código mais sofisticado :) aí eu posto aqui

Compartilhar este post


Link para o post
Compartilhar em outros sites

oi tou com este problema podem-m a judar???

 

 

Fatal error: Class 'mysql' not found in C:\xampp\htdocs\testes_ralha\sessoes\seguranca.php on line 4

 

será por usar uma versao mais actualizada do php?

cumprimentos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, tudo bom?

 

Seguinte, eu sou iniciante em PHP e mySQL.. E estou fuçando bastante com isso ultimamente..

No momento estou com um sisteminha praticamente igual ao criado ai..

 

O que ta pegando agora é como eu poderia criar uma relação de "amigos" de usuário.. Por exemplo, em um site de relacionamento.. O usuário tem sua página de perfil e nessa página tem uma área que mostra outros usuários ligados ao primeiro.. Numa relação de "amigos".

 

Enfim, minha dúvida é como que eu indicaria essa relação no mySQL.. Para que eu pudesse listá-los.

 

Poderia me dar uma luz?? Não precisa criar o sistema.. Mas só indicar como poderia ser feito... Eu ficaria muito agradecido!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso depende.

Eles irão adicionar amigos ou irão aparecer amigos aleatoriamente (que o sistema definiu que, suspostamente, seja seu amigo), caso seja o primeiro você terá que fazer uma tabela extra em sua tabela para guardar o ID dos amigos, é o que chamamos de Has And Belongs To Many (Tem e Pertence a Muitos), é muito comum em framework. De uma olhada num rascunho de tabela:

### TABELA amigos AQUI


CREATE TABLE usuarios_amigos (
   id INT NOT NULL auto_increment,
   usuario_id INT NOT NULL,
   amigo_id INT NOT NULL,
   PRIMARY KEY(`id`)
)

Esta é a tabela HABTM, vamos inserir um registro para ter uma ideia melhor:

 

INSERT INTO usuarios_amigos VALUES (1, 15, 2);
Assim, o usuario com ID 15 seria amigo do usuario com ID 2, ou seja, usuario_id e amigo_id apontam para outra tabela (foreign Key).

Aí para selecionar bastaria relacionar as três tabelas (usuarios, amigos e usuarios_amigos)

Pode parecer meio complicado, ainda mais quando a pessoas não sabe explicar ashuhasu, mas é por ae :P

 

Caso se a segunda basta fazer um LIKE baseado nos criterios :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

To entendendo mais ou menos, essa idéia de criar essa tabela usuario_amigos já abriu uma visão nova que eu não tinha..

 

Mas eu ainda não entendi a idéia por inteira.. Essa tabela amigos vai ser populada pelo que? Porque no fundo são todos usuários.. "Amigo" seria só uma relação entre 2 usuários...

 

Pelo que eu entendi, nesse meu caso eu invés de criar uma tabela amigos e referenciar o id na tabela usuario_amigos, eu faça uma segunda referência para id de usuário..

 

Tomando o mesmo exemplo dado por você:

insert into usuario_amigos values (1, 15, 2);

O usuário de id 15 é amigo do usuário id 2. Só que nesse caso o 2 estaria na própria tabela usuarios.

 

E no final eu teria apenas as tabelas usuarios e usuario_amigos.

 

Não sei se fui muito claro... hehe.

 

Valew,

abraços

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.