FORO PHP Y MYSQL – PARTE 3

Stay hungry, stay foolish

Steve Jobs

En esta tercera parte se realizaron los siguientes cambios:

  • Termine la paginación de los temas en cada foro
  • Registro de usuarios
  • Logueo de usuarios
  • Crear temas en cada foro
  • Realizar comentarios en los temas


Para poder crear un tema o comentario debemos estar registrados en el foro, para ello creamos  un archivo php llamado registrarse y creamos el formulario y la clase usuarios que registrara el usuario:

<form action="registrar.php" method="post" class="formulario">
            <label>Nombre completo</label>
            <input type="text" name="nombre" placeholder="Nombre completo" required="required">
            <label>Email</label>
            <input type="email" name="correo" placeholder="Email" required="required">
            <label>Usuario</label>
            <input type="text" name="usuario" placeholder="Usuario" required="required">
            <label>Contraseña</label>
            <input type="password" name="clave" placeholder="Contraseña" required="required">
            <br/>
            <button type="submit" name="iniciar" class="btn">Iniciar</button>
        </form>

luego creamos el archivo que procesa la información del formulario.

<?php
require_once 'class/usuarios.php';
$obj = new Usuarios();
$obj->nuevousuario();

Luego creamos la función nuevousuario que registra el nuevo usuario.

<?php
require_once 'principal.php';
class Usuarios extends Principal {

    private $usuarios;
    public function __construct() {
        $this->usuarios = array();
    }

    // agregar usuario
    public function nuevousuario() {
        parent::Conectar();
        // encriptamos la clave en sha1
        $pass = sha1($_POST["clave"]);
// insertamos algunos campos por default ya que solo se
// actualizaran cuando un usuario modifique su perfil
       $tipo = 2;
       $facebook = "";
       $twitter = "";
       $activo = 1;
       $avatar = "default.jpg";
       $firma = "";
// validamos que el nick este disponible, de lo contrario mandamos un mensaje
// que indica que no esta disponible
        $consulta = sprintf(
                "select nick from usuarios where nick = %s;",
                parent::comillas_inteligentes($_POST['usuario'])
        );
        $result = mysql_query($consulta);
        if (mysql_num_rows($result) == 0) {
// si el nick esta disponible lo registramos
// el now() es una función que ingresa la fecha actual
            $consulta = sprintf(
                    "INSERT INTO usuarios values(null, %s, %s, %s, %s, %s, %s, %s, now(), now(), %s, %s, %s);",
                    parent::comillas_inteligentes($_POST['usuario']),
                    parent::comillas_inteligentes($pass),
                     parent::comillas_inteligentes($_POST['nombre']),
                    parent::comillas_inteligentes($_POST['correo']),
                    parent::comillas_inteligentes($tipo),
                    parent::comillas_inteligentes($facebook),
                    parent::comillas_inteligentes($twitter),
                    parent::comillas_inteligentes($activo),
                    parent::comillas_inteligentes($avatar),
                    parent::comillas_inteligentes($firma)
            );
            //echo $consulta;exit;
            mysql_query($consulta);
            $id = mysql_insert_id();
            // creamos las sesiones para que automaticamente puedas comentar o publicar
            $_SESSION["id"] = $id;
            $_SESSION["nombre"] = $_POST['nombre'];
            $_SESSION["tipo"] = $tipo;

            echo "<script type='text/javascript'>
			window.location='index.php';
			</script>";
        } else {
            echo "<script type='text/javascript'>
			window.location='registrarse.php?m=1';
			</script>";
        }
    }
    // ****************************************

}

Si necesitas saber más sobre sprintf puedes leer el siguiente enlace
http://php.net/manual/es/function.sprintf.php

Continuamos con el login, su formulario quedaría de la siguiente manera.


<form method="post" action="login.php">
<h2>Iniciar sesión</h2>
<label>Usuario</label>
<input type="text" name="usuario" placeholder="Usuario" required autofocus>
<label>Contraseña:</label>
<input type="password" name="password" placeholder="Contraseña" required>
<br>
<button class="btn" type="submit">Entrar</button>
</form>

creamos nuestra class para la session

<?php

require_once 'principal.php';

class Sesion extends Principal {

 private $login;

 public function __construct() {
 $this->login = array();
 }

 public function logueo() {
 $pass = sha1($_POST["password"]);
 parent::Conectar();
 $consulta = sprintf(
 "select id, nombre, tipo
 from usuarios
 where nick = %s and password = %s",
 parent::comillas_inteligentes($_POST["usuario"]),
 parent::comillas_inteligentes($pass)
 );
 //echo $consulta; exit;
 $result = mysql_query($consulta);

 while ($reg = mysql_fetch_assoc($result)) {
 $this->login[] = $reg;
 }

 if (sizeof($this->login) > 0) {
 foreach ($this->login as $key) {
 $_SESSION["id"] = $key["id"];
 $_SESSION["nombre"] = $key["nombre"];
 $_SESSION["tipo"] = $key["tipo"];
 switch ($_SESSION["tipo"]) {
 case 1: header("Location: panel.php");
 break;
 case 2: header("Location: index.php");
 break;
 }
 }
 } else {
 header("Location: entrar.php?m=1");
 }
 }

}

el lunes termino la redacción.
Código fuente Mega.