Giter Site home page Giter Site logo

forumphp's Introduction

ForumPHP


Actividad de Aprendizaje 2ºSIO - DAM Desarrollo de Interfaces

👨🏻‍💻


php mysql MAMP VSCode


En esta actividad se ha desarrollado un foro web, con implementación de php y acceso a base de datos por medio de PHP Data Objects (PDO).


BASE DE DATOS

Para la base de datos se ha utilizado php

La base de datos se compone de 4 tablas

  1. CATEGORIES -> Contiene las distintas categorias del foro
  2. TOPICS -> Los distintos temas de los que se compone cada categoria
  3. POSTS -> Comentarios o mensajes que se encuentran dentro de cada tema
  4. USERS -> Registro de usuarios. En el mismo se emplea encriptación de contraseña y se distinguen el nivel de usuario (Level 0 = Administrador / Level 1 = Usuario Registrado )

Imagen

Existe un usuario "root", password "root" para el control de la Base de Datos y dentro de la misma un usuario "admin" y password "admin", asi como "Pepe" password "pepe" para poder comprobar su funcionamiento. Se incorpora a este repositorio un script dentro del directorio db denominado foro.sql


Dentro de la página podemos ir saltando de categorias a temas y de ahi a los comentarios; pulsando sobre cada uno de ellos. Según el login del usuario, la página distingue si se trata de un ADMINISTRADOR, USUARIO o INVITADO. Y lo irá indicando en el header de la misma.


USUARIOS

Dependiendo del nivel del usuario podrá tener acceso a distintas funciones.

  1. ADMINISTRADORES :
    • Categorias: Añadir, Borrar y Editar
    • Temas: Añadir, Borrar y Editar
    • Mensajes: Añadir, Borrar y sólo editar los que haya grabado el mismo.
  2. USUARIOS:
    • Categorias: Nada
    • Temas: Añadir
    • Mensajes: Añadir. Y sólo Borrar y Editar los que haya creado el mismo.
  3. INVITADO: Sólo podrá visualizar, ni Añadir ni Borrar ni Editar

LOGIN y REGISTRO

Desde la página principal podemos acceder al Login en el sistema y en caso de no disponer de el, podemos realizar un nuevo registro. Al realizar el nuevo registro, se comprobará la validación de campos para asegurar una entrada limpia de la información en la base. En caso de error, nos avisará por medio de un mensaje y refrescará la página.

CODIGO DE INTERES

Se adjunta partes de código de funciones de interes

MVC

En todo el desarrollo se ha implementado el patrón de diseño Model View Controller

ENCRIPTACION CONTRASEÑAS

Encriptación contraseña

$passhash = password_hash($password, PASSWORD_DEFAULT); 

Verificación contraseña

password_verify($password,$pass)

Ejemplo control inyeccion SQL

try {
      //configuramos la consulta a la base de datos
      $stmt = $dbh->prepare("SELECT post_id, post_content, post_date, post_by FROM posts WHERE post_topic = :id");
      $stmt->bindParam(":id", $id, PDO::PARAM_INT);
      $stmt->execute();
      
      $comentarios = $stmt->fetchAll(PDO::FETCH_ASSOC);
      .
      .
      .
       } catch (PDOException $e) {
      echo "ERROR: " . $e->getMessage();
  }

Mail Envio

function sendmail($emailuser,$name){

    ini_set( 'display_errors', 1 ); //Avisará de error si no se ejecuta
    error_reporting( E_ALL );
    $asunto = 'Bienvienido '.$name.' al Foro';
    $cuerpo = 'Gracias por registrarte. '.$name.' Recuerda tener tus claves de acceso en un lugar seguro';

    $date = date('d-m-Y');           //Recuperamos fecha actual en formato dia-mes-año
    $to = $emailuser;                 
    $subject = $asunto;                    
    $message = $cuerpo;  
    $headers = "Date:" . $date;             
    $headers .= "From: Foro PHP";
    $headers .= "User mail ".$emailuser;     
    mail($to,$subject,$message, $headers);  
    echo '<div class="message_login"><div><p class="success">EMAIL ENVIADO</p></div></div></p>';
}

Validacion

function validate_mail($email){
    if(filter_var($email, FILTER_VALIDATE_EMAIL)) {    
        return $email;
    }else{
       return $email = '';}
}

Refreso de pantalla tras tiempo establecido

$sec = 3; 
      $message = 'EMAIL INTRODUCIDO NO VALIDO';
      include('./view/error_header_view.php');
      header("Refresh: $sec; url=indexRegister.php");

Otros Parseado de fechas

function fixdate($date) {
  //Funcion que nos permite modificar el formato de la fecha 
  return date('d-m-Y', strtotime($date));
}

UTILIZACION DE OBJETOS

En el modelo, disponemos de 4 objetos que iremos utilizando durante el desarrollo de la aplicación

CONECCTION En esta clase, se encuentra el constructor para la conexión a la base de datos por medio de PDO por medio de una función a la que se lamará durante las diferentes peticiones.

 function getConection() {
    // Con un array de opciones
    try {
        $dbname = "foro";            //Nombre de la Base de Datos
        $user = "root";             // Usuario
        $password = "root";         // Contraseña
        $server = 'localhost';      // Dirección servidor
        $dbh ="";
        $dsn = "mysql:host=$server;dbname=$dbname;charset=UTF8";
        $dbh = new PDO($dsn, $user, $password);
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        
    } catch (PDOException $e) {
        echo $e->getMessage();
        redirect('errorpagePDO_view.php'); 
    }
    return $dbh;
}

En la misma, tambien encontramos la funcion para comprobar el login del usuario

function getLogin()
{
    if ( isset ($_POST['username']) && ($_POST('userpassword'))) {
        if($_POST['username'] == 'admin' && $_POST['userpassword'] == 'admin ') {
            return $result = 'login';
        } else {
            return $result = 'invalida user';
        }
    }
}

*CATEGORY En modelo correspondiente a la entidad Category de la base de datos. Podemos encontrar diferentes funciones a las que se llamara en distintos momentos, según el tipo de dato que necesitemos de la Base de Datos

*POST Igual que en el modelo Category TOPIC Igual que en el modelo Category

forumphp's People

Contributors

jsenen avatar

Watchers

 avatar

forumphp's Issues

Header C13

Añadir Header de C13
Dejar login para el final y comenzar listando categorías

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.