[PHP-POO] Seguir Amigo (Estilo Twitter o Ask)

on domingo, 23 de junio de 2013
Bueno empezaremos a crear este pequeño tutorial para mostrar como crear o hacer una lista sencilla donde uno podrá agregar a su lista de seguimiento, sencillamente dando click a un botón Seguir.

Primeramente usare las siguientes herramientas:
- MYSQL (Base de Datos)
- MYSQL Workbench (Para creación de las tablas poderlas mostrar de forma agradable modificar y demás)
- PHP (Lenguaje Usado en nuestro Backend)
- Bootstrap (Para no enfocarnos tanto en el diseño usaremos este framework que nos ayudara a que quede de forma agradable nuestra web)
- HTML (Básico)
- javascript (jQuery para interactuar de forma mas agradable a la hora de dar click a los botones)


Bueno ya explicada las herramientas que usaremos, empezaremos a hacer el desarrollo o creacion de nuestra Base de Datos la cual quedara de la siguiente manera:


SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';

CREATE SCHEMA IF NOT EXISTS `Seguir` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
USE `Seguir` ;

-- -----------------------------------------------------
-- Table `Seguir`.`Usuario`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `Seguir`.`Usuario` (
  `idUsuario` INT NOT NULL AUTO_INCREMENT ,
  `Nombre` VARCHAR(100) NOT NULL ,
  `Email` VARCHAR(45) NOT NULL ,
  `Contrasena` VARCHAR(45) NOT NULL ,
  PRIMARY KEY (`idUsuario`) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `Seguir`.`Seguidor`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `Seguir`.`Seguidor` (
  `idSeguidor` INT NOT NULL ,
  `idUsuario` INT NOT NULL ,
  PRIMARY KEY (`idSeguidor`, `idUsuario`) ,
  CONSTRAINT `FK_Seguidor_Usuario`
    FOREIGN KEY (`idUsuario` )
    REFERENCES `Seguir`.`Usuario` (`idUsuario` )
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB;

USE `Seguir` ;


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;


Bueno la tabla Usuario, pues no hay mucho que explicar son los típicos datos de los usuarios, ahora por otro lado tenemos la tabla Seguidor la cual tendrá 2 Campos:
idSeguidor - Este sera el ID de quien esta logueado y piensa seguir a alguien
idUsuario - Aquí en cambio sera el ID de a quien se va estar siguiendo

Esto es todo lo que ocuparemos de parte de la base de datos, ya creada y agregado algunos datos empezaremos a crear una pequeña pagina empezando con el login el cual pues no explicare mucho ya que no vamos enfocados a eso, aunque igualmente al final podrán ver todo el código.

La pagina de login quedara algo asi:


Bueno ya ahora aplicaremos unas consultas para que despues de estar logueado me muestre todos los usuarios y me muestre un boton que diga Seguir o dejar de Seguir dependiendo de si lo sigo actualmente o no:




Archivo config.php:
con = new mysqli($host, $usuario, $clave, $basededatos);
  if(mysqli_connect_error())
  {
   die('Error de Conexión (' . mysqli_connect_errno() . ') ' . mysqli_connect_error());
  }
 }
}
 // Iniciamos las Sessiones
 @session_start();

 //Inlcuimos nuestras clases
 require_once('clases.php');

?>


Archivo clases.php:
con->prepare("SELECT IDUsuario, Nombre, Email, Contrasena FROM Usuario WHERE Email = ?");
  $stmt->bind_param('s', $em);
  $stmt->execute();
  $stmt->bind_result($this->id, $this->nombre, $this->email, $this->contrasena);
  $stmt->fetch();
  if(empty($this->id))
  {
   $this->err = 'El Email No Se Encuentra en la Base de Datos';
  }else{
   if($this->contrasena != $con)
   {
    $this->id = null;
    $this->err = 'La Contraseña es Incorrecta';
   }else{
    $_SESSION['ME'] = serialize($this);
   }
  }
  $stmt->close();
 }

 function getByID($id)
 {
  parent::__construct();
  $stmt = $this->con->prepare("SELECT IDUsuario, Nombre, Email, Contrasena FROM Usuario WHERE IDUsuario = ?");
  $stmt->bind_param('i', $id);
  $stmt->execute();
  $stmt->bind_result($this->id, $this->nombre, $this->email, $this->contrasena);
  $stmt->fetch();
  $stmt->close();
 }

 function getAll()
 {
  parent::__construct();
  // Obtengo todos los usuarios e igualmente checo si lo sigo, si b.idSeguidor esta vacio significa que aun no lo sigo 
  $result = $this->con->query("SELECT a.IDUsuario, a.Nombre, b.idSeguidor as 'seguidor' FROM Usuario a LEFT JOIN Seguidor b 
ON a.IDUsuario=b.idUsuario WHERE a.idUsuario != ".$this->id." Order By a.Nombre ASC");
  $usuarios = array();
  while($r = $result->fetch_object())
  {
   if(empty($r->seguidor))
    $r->seguidor = 0;
   else
    $r->seguidor = 1;
   $usuarios[] = $r;
  }
  $result->close();
  return $usuarios;
 }

 function seguir($idUser)
 {
  parent::__construct();
  // Checo si ya lo sigo si es asi lo dejo de seguir en caso contrario lo sigo
  $result = $this->con->query("SELECT IDUsuario FROM Seguidor WHERE idSeguidor = ".$this->id." AND idUsuario = ".$idUser);
  if($result->num_rows == 0)
  {
   $result->close();
   $this->con->query("INSERT INTO Seguidor (idSeguidor, IDUsuario) VALUES (".$this->id.", ".$idUser.")");
  }else{
   $result->close();
   $this->con->query("DELETE FROM Seguidor WHERE idSeguidor = ".$this->id." AND IDUsuario = ".$idUser);
  }
  return true;
 }

}

?>
Bueno por el momento hasta ahi lo dejare que por ahora todo ha sido pura logica y nada de implemtentacion ya mañana continuo con la parte dos donde ya pondremos en uso todo esto, igualmente pueden hacer preguntas de las cosas. Tambien pueden revisar todo el codigo del Proyecto en GitHub -> Repositorio

0 comentarios:

Publicar un comentario