BTS SIO SLAM SYSTÈME DE NOTATION EN ÉTOILES. … · Spe_resume_court brève résumer CHAINE 500...

21
BTS SIO SLAM SYSTÈME DE NOTATION EN ÉTOILES. PRODUCTIONS DANS LE PROJET DE LEFEVRE ALEXANDRE .

Transcript of BTS SIO SLAM SYSTÈME DE NOTATION EN ÉTOILES. … · Spe_resume_court brève résumer CHAINE 500...

BTS SIO SLAM

SYSTÈME DE NOTATION EN ÉTOILES.

PRODUCTIONS DANS LE PROJET DE LEFEVREALEXANDRE .

Liste des taches a accomplir.

Tout d'abord nous avons établi la liste des tâches que nous aurions à faire dans ce projet :

Voici la liste des taches :

-Brainstorming.-Réalisation du dictionnaires de données.

• Brainstorming• Entretien avec le président de KOMIDI.

-Réalisation du MCD.-Réalisation du MLD.-Création de la base de données, ses tables et son code SQL.-Création des Vue, Trigger et Cascade.-Création des requête pouvant être effectuer par l'utilisateur.-Créer un utilisateur dans la base de données pour le client et un autre pour les administrateur.-Créer le système d'inscription

• Vérifier si ce n'est pas un robot avec une confirmation d'adresse mail• Créer le formulaire• Vérifier coter client,serveur et BDD• Créer requête pour insérer data.

-Créer la page pour rechercher et noter un spectacle + avant maquette.• Afficher les 5 spectacle les mieux noter• Algorithme de recherche de spectacle.

-Vérifier si un membres a déjà noter un spectacle.• Création de cookies pour ensuite vérifier si la personne a déjà voter a un certain spectacle

pour alléger la bande passante du serveur.• Faire quand même des vérifications coter serveur.

-Mettre en place le système de rating star• Pour voter il faut vérifier l'e-mail, et lancer un mail de confirmation.

-intégrer le système de rating star sur les consultation de spectacle.-faire des test.

• Implémenter PHP UNIT(pour test unitaire)-faire une maquette de la page notation.-Pouvoir administrer le site.-Permettre une redirection des utilisateur vers le sponsor ZEOP.

• Lien permettant d'aller sur le site de ZEOP.

établissement diagramme de gant est division des taches.

Le développeur Robert Steven c'est occuper du développement de :-Conception base de donnée.-Brainstorming et proposition idées.-Maquettage du site.-Partie connexion coté client ,coté serveur.-Partie administration ajout,suppression.

Le développeur Perez Lucas c'est occuper du développement de :-Conception base de donnée.-Brainstorming et proposition idées.-Inscription coté client.-Contact.-Vérification des formulaire en javascript.-Api de google.

Le développeur Lefevre Alexandre c'est occuper du développement de :-Conception base de donnée.-Affichage des spectacles.-Inscription coté serveur.-Notation en étoile.-Barre de recherche.-contact-Affichage des spectacle les mieux noter.

Une fois la liste des tâches établie nous sommes passée à l'édition du diagramme de gant pour diviser les taches entre membre et permettre d'avoir une estimation de fin de projet.

Extrait du diagramme de gant produit :

Conception base de donnée :

Réalisation du dictionnaire des donnée avec les document fournie et les attentes du mettre d'ouvrage :

Dictionnaires des donnée :

Dictionnaire des données

Nom Signification Type TailleGre_code identifiant du genre ENTIER 10Gre_nom Le genre du spectacle CHAINE 30Hor_id identifiant horaire ENTIER 10Hor_Début horaire début d'un spectacle DATE 8Sal_id identifiant d'une sale ENTIER 10Sal_nom nom de la salle CHAINE 30Sal_latitude coordonnées géographique DECIMAL 22Sal_longitude coordonnées géographique DECIMAL 22Sal_jauge ENTIER 5Sal_adresse adresse salle CHAINE 255Sec_date date d'une séance DATE 10Spe_id identifiant spectacle ENTIER 10Spe_titre titre spectacle CHAINE 50Spe_mes message spectacle CHAINE 50Spe_acteur les acteur du spectacle CHAINE 65535Spe_cie CHAINE 80Spe_genre Le genre du spectacle CHAINE 30Spe_duree durée spectacle ENTIER 10Spe_Lang la langue utiliser pour jouer le spectacle CHAINE 30Spe_public le public CHAINE 8Spe_affiche le texte d'affiche CHAINE 50Spe_resume_court brève résumer CHAINE 500Spe_resume_long le long résumé spectacle CHAINE 65535mem_id identifiant membre ENTIER 10mem_email e mail d'un membre CHAINE 200mem_pass Mot de passe d'un membre CHAINE 500mem_nom le nom membre CHAINE 50mem_prenom prénom membre CHAINE 100mem_statut état membre ENTIER 10mem_dateInscrp date inscription membre DATE 19mem_sex son sexe CARACTERE 1nt_note note d'une membre sur un spectacle ENTIER 10

MCD :

MLD :

Requête SQL de création de la base de donnée :

#------------------------------------------------------------# Script MySQL.#------------------------------------------------------------

#------------------------------------------------------------# Table: kdi_genre#------------------------------------------------------------

CREATE TABLE kdi_genre( Gre_code Int NOT NULL , Gre_nom Varchar (30) NOT NULL , PRIMARY KEY (Gre_code ))ENGINE=InnoDB;

#------------------------------------------------------------# Table: kdi_horaire#------------------------------------------------------------

CREATE TABLE kdi_horaire( Hor_id Int NOT NULL , Hor_Debut Time NOT NULL , PRIMARY KEY (Hor_id ))ENGINE=InnoDB;

#------------------------------------------------------------# Table: kdi_salle#------------------------------------------------------------

CREATE TABLE kdi_salle( Sal_id Int NOT NULL , Sal_nom Varchar (30) NOT NULL , Sal_latitude Double , Sal_longitude Double , Sal_jauge Smallint , Sal_adresse Varchar (255) , PRIMARY KEY (Sal_id ))ENGINE=InnoDB;

#------------------------------------------------------------# Table: kdi_seance#------------------------------------------------------------

CREATE TABLE kdi_seance( Sec_date Date NOT NULL , Sal_id Int NOT NULL , Hor_id Int NOT NULL , Spe_id Int NOT NULL , PRIMARY KEY (Sec_date ))ENGINE=InnoDB;

#------------------------------------------------------------# Table: kdi_spectacle#------------------------------------------------------------

CREATE TABLE kdi_spectacle( Spe_id Int NOT NULL , Spe_titre Varchar (50) NOT NULL , Spe_mes Varchar (50) NOT NULL , Spe_acteur Text , Spe_cie Varchar (80) NOT NULL , Spe_genre Varchar (30) , Spe_duree Int NOT NULL , Spe_Lang Varchar (30) , Spe_public Enum , Spe_affiche Varchar (50) NOT NULL , Spe_resume_court Varchar (500) NOT NULL , Spe_resume_long Text , PRIMARY KEY (Spe_id ))ENGINE=InnoDB;

#------------------------------------------------------------# Table: menbres#------------------------------------------------------------

CREATE TABLE menbres( mem_id Int NOT NULL , mem_email Varchar (200) NOT NULL , mem_pass Varchar (500) NOT NULL , mem_nom Varchar (50) NOT NULL , mem_prenom Varchar (100) NOT NULL , mem_statut Int NOT NULL , mem_dateInscrip Datetime NOT NULL , mem_sex Char (1) NOT NULL , PRIMARY KEY (mem_id ) , INDEX (mem_email ))ENGINE=InnoDB;

#------------------------------------------------------------# Table: noter#------------------------------------------------------------

CREATE TABLE noter( nt_note Int NOT NULL , mem_id Int NOT NULL , Spe_id Int NOT NULL , PRIMARY KEY (mem_id ,Spe_id ))ENGINE=InnoDB;

ALTER TABLE kdi_seance ADD CONSTRAINT FK_kdi_seance_Sal_id FOREIGN KEY (Sal_id) REFERENCES kdi_salle(Sal_id);ALTER TABLE kdi_seance ADD CONSTRAINT FK_kdi_seance_Hor_id FOREIGN KEY (Hor_id) REFERENCES kdi_horaire(Hor_id);ALTER TABLE kdi_seance ADD CONSTRAINT FK_kdi_seance_Spe_id FOREIGN KEY (Spe_id) REFERENCES kdi_spectacle(Spe_id);ALTER TABLE noter ADD CONSTRAINT FK_noter_mem_id FOREIGN KEY (mem_id) REFERENCES menbres(mem_id);ALTER TABLE noter ADD CONSTRAINT FK_noter_Spe_id FOREIGN KEY (Spe_id) REFERENCES kdi_spectacle(Spe_id);

Après avoir importer le jeu d’essais j'ai développer l'affichage d'unspectacle.

Code de développement pour afficher spectacle :

<?php/** * Ce fichier permet d'afficher les informations sur spectacle précis, * et permet la notation si cette personne est connecter sinon elle ne le permet pas. * @copyright ailtech * @author Lefevre Alexandre * @since 1 Premiéres version * @since 2 Affichage des spectacles retravailer * @version 2 */

//On inclue le fichier de configurationrequire 'include/config.php';

//Titre onglet$titretab = "Komidi Accueil";

// Menu de la pageob_start();foreach($menupage as $page_name => $page_url){ $class = ''; if ($current_page == $page_url) { $class = 'active'; } echo "<li class='$class'>

<a href='$page_url'>".$page_name ."</a>". "</li>";}$menupage = ob_get_clean();

//Contenu de la pageob_start();echo "<div class='row affiches'>";

//on verifie si un l'identifiant de spectacle a bien étè envoyer.if( !isset( $_GET['id'] ) or empty( $_GET['id'] ) ){ //erreur l'id na pas etait envoyer}else{ //On met l'identifiant du membres zero, c'est en quelque sort un netoyage de la variable $idMembre = "";

//on extraite et echape l'identifiant du spectacle $id = htmlentities(htmlspecialchars( $_GET['id'] ));

//On récupere les informations sur le spectacle $spectacle = $spectacles->getSpectacle($id);

//On récupéres la note moyenne du spectacle $note = $spectacles->getVueNote($id); $noteArrondi = round($note['moyenneNote']);

//partit pour un membres connecter if( isset( $_SESSION['id'] ) and !empty( $_SESSION['id'] ) ) { //idMembre possede l'identifiant de l'utilisateur actuellement connecter $idMembre = $_SESSION['id']; echo "<div class=\"container\">

<!-- titre--><div class=\"alert alert-success\" role=\"alert\" id='alertNotation' style='display:none;'></div><h1>$spectacle[Spe_titre]</h1><div class='row'>

<div class='col-md-4'><img src=\"image/$spectacle[Spe_affiche]\" alt='Affiche' width='197px' height='263px'><!-- image preview-->

</div><div class='col-md-8'>

<!-- Liste --><ul class='list-unstyled'>

<li> <h5>

<span class='glyphicons glyphicons-one-day'></span>Durée : <small>$spectacle[Spe_duree] minute</small>

</h5></li><li>

<h5><span class='glyphicons glyphicons-gender-ori-hetero'></span>Genres :

<small>$spectacle[Spe_genre]</small></h5>

</li><li>

<h5><span class='glyphicons glyphicons-family'></span>Nationalités :

<small>$spectacle[Spe_Lang]</small></h5>

</li><li>

<h5><span class='glyphicons glyphicons-old-man'></span>Acteurs :

<small>$spectacle[Spe_mes]</small></h5>

</li><li>

<h5><span class='glyphicons glyphicons-group'></span>Public :

<small>$spectacle[Spe_public]</small></h5>

</li></ul>

</div> <!-- notation --><form action='#' method='POST'><label for='input-7-xs' class='control-label'>Noter le Spectacle:</label><input id='input-7-xs' class='rating rating-loading' value='$noteArrondi' data-min='0' data-max='5' data-step='1'

data-size='xs' ><hr/>$noteArrondi/5 ($note[nbDenote] votes)

<input type='hidden' name='idSpectacle' value='$spectacle[Spe_id]'>

<input type='hidden' name='idMembre' value='$idMembre'><input type='submit' value='Voter' id='note'>

</form>

</div><!-- texteau sujet du spectacle -->

<H2>Synopsis</H2><p class=''>

$spectacle[Spe_resume_long]</p>

</div>"; } else//cas ou c'est une personne non connecter { //partit pour une personne non conecter echo "<div class=\"container\">

<!-- titre--><div class=\"alert alert-success\" role=\"alert\" id='alertNotation' style='display:none;'></div><h1>$spectacle[Spe_titre]</h1>

<div class='row'><div class='col-md-4'>

<img src=\"image/$spectacle[Spe_affiche]\" alt='Affiche' width='197px' height='263px'><!-- image preview-->

</div><div class='col-md-8'>

<!-- Liste --><ul class='list-unstyled'>

<li> <h5>

<span class='glyphicons glyphicons-one-day'></span>Durée : <small>$spectacle[Spe_duree] minute</small>

</h5></li><li>

<h5><span class='glyphicons glyphicons-gender-ori-hetero'></span>Genres :

<small>$spectacle[Spe_genre]</small></h5>

</li><li>

<h5><span class='glyphicons glyphicons-family'></span>Nationalités :

<small>$spectacle[Spe_Lang]</small></h5>

</li><li>

<h5><span class='glyphicons glyphicons-old-man'></span>Acteurs :

<small>$spectacle[Spe_mes]</small></h5>

</li><li>

<h5><span class='glyphicons glyphicons-group'></span>Public :

<small>$spectacle[Spe_public]</small></h5>

</li></ul>

</div> <!-- notation --><form action='#' method='POST'><label for='input-7-xs' class='control-label'>Noter le Spectacle:</label><input id='input-7-xs' class='rating rating-loading' value='$noteArrondi' data-min='0' data-max='5' data-step='1'

data-size='xs' readonly><hr/>$noteArrondi/5 ($note[nbDenote] votes)

<input type='hidden' name='idSpectacle' value='$spectacle[Spe_id]'>

<input type='hidden' name='idMembre' value='$idMembre'><!-- <input type='submit' value='Voter' id='note'> -->

</form>

</div><!-- texteau sujet du spectacle -->

<H2>Synopsis</H2><p class=''>

$spectacle[Spe_resume_long]</p>

</div>"; }

}

echo "</div><!-- .row affiches -->";$contenupage = ob_get_clean();

//Appel de template et barre de navigation latéralerequire "vue/vueSidebar.php";require "vue/template2.tpl";?>

Notation en étoiles :

Pour la notation en étoiles j'ai utilisé l'affichage de notation en étoiles du Bootstrap de Twitter, et créer un script Javascript en AJAX qui écoute le clique sur le bouton de voter et qui prend en compte la notation, bien sûr la personne ne peut voter que lorsqu'elle est connectée et elle ne peut noter qu’une seule fois pour un spectacle.

Affichage quand personne non connecter, elle ne peut pas voter :

Affichage quand une personne est connecter, elle peut donner son vote mais uniquement une seul fois :

Extrait de code permettant le vote :

code php :

<?php

/**

* Ce fichier permet de noter un spectacle,

* ce fichier est executée et lu de façon asynchronyme par le fichier se trouvant dans /bootstrap/js/noter.js.

* C'est pour sa que nous fesont afficher du texte avec des echo pour ensuite traiter plus facilement la réponse dans le fichier javascript

* se trouvant dans /bootstrap/js/noter.js

* @copyright ailtech

* @author Lefevre Alexandre

* @since 1

* @version 1

*/

//on inclue le fichier de configuration

require 'include/config.php';

//on vérifie si on a bien envoyer l'identifiant du membres, du spectacle et le nombre d'étoile donnée au spectacle.A noter qu'on utilise la negation pour vérifier

if( !isset( $_GET['idMembres'] ) or empty( $_GET['idMembres'] ) or !isset( $_GET['idSpectacle'] ) or empty( $_GET['idSpectacle'] ) or !isset( $_GET['nbEtoile'] ) or empty( $_GET['nbEtoile'] ) or $_GET['nbEtoile'] > 5 or $_GET['nbEtoile'] < 0)

{

echo "false";// si une des information et manquante ont affiche false

}

else// cas ou il existe tous

{

//On extrait les donnéee et échappe les caractéres spéciaux.

$idMembre = htmlspecialchars(htmlentities( $_GET['idMembres'] ));

$idSpectacle = htmlspecialchars(htmlentities( $_GET['idSpectacle'] ));

$nbEtoile = htmlspecialchars(htmlentities( $_GET['nbEtoile'] ));

//On la methode noter de l'objet Komidi qui retourne soit 1 pour réeussi et 0 pour non réussie

$veriter = $spectacles->noter($idMembre,$idSpectacle,$nbEtoile);

//on affiche le résultat

echo $veriter;// si réussi

}

?>

code JavaScript :

$(document).ready(function(){

$("#note").click(function(e){

//alert("ajax load");//debug

//on arrete l action par default

e.preventDefault();

//on va chercher les info

var idSpectacle,nbEtoile,idMembres;

idSpectacle = $("[name='idSpectacle']").val();

nbEtoile = $("#input-7-xs").val();

idMembres = $("[name='idMembre']").val();

//alert(idSpectacle+" : "+nbEtoile+" : "+idMembres);//debug

//lance de la requete avec ajax

$.ajax({

url : 'index.php',

type : 'GET',

data : 'action=noter&nbEtoile='+nbEtoile+'&idSpectacle='+idSpectacle+'&idMembres='+idMembres,

dataType : 'html', // On désire recevoir du HTML

success : function(retour, statut){

//alert(retour);//debug

if( retour == "1"){

$("#alertNotation").attr("style", "");

$("#alertNotation").text("Votre vote a bien était enregistrer, nous vous remercions de tout coeur de participer au devellopement de nos acteur!");

}

else if ( retour == "0"){

$("#alertNotation").removeClass("alert alert-success");

$("#alertNotation").addClass("alert alert-danger");

$("#alertNotation").attr("style", "");

$("#alertNotation").text("On peut voter q'une seul fois,on doit être membres et le spectacle doit exister, désoler :( ");

}

else{

$("#alertNotation").removeClass("alert alert-success");

$("#alertNotation").addClass("alert alert-danger");

$("#alertNotation").attr("style", "");

$("#alertNotation").text("Une erreur est survenue, veuiller réesayer, si l'erreur persiste veuiller nous contacter.");

}

},

error : function(resultat, statut, erreur){

//alert(resultat);//debug

$("#alertNotation").removeClass("alert alert-success");

$("#alertNotation").addClass("alert alert-danger");

$("#alertNotation").attr("style", "");

$("#alertNotation").text("Une erreur est survenue, veuiller réesayer, si l'erreur persiste veuiller nous contacter.");

}

});

});

});

Barre de recherche pour spectacle :

Pour la barre de recherche du spectacle j'ai créé un fichier Javascript qui écoute l'événement d'un clique sur une touche dans l'élément de la barre de recherche c'est dire que lorsque la personne recherche un mot la recherche se fait instamment grâce à Ajax coter Javascript, ensuite je retourne comme résultat une mise en forme d'affichage et je l'insérais dans le DOM.

Barre de recherche :

Code permettant l'affichage :

Code PHP :

<?php

/**

* Ce fichier permet de réaliser une recherche dans la base de donnée,

* il est exécutée et lu de façon asynchronyme par le fichier se trouvant dans /bootstrap/js/recherche.js

*La page affiche le résultat de la recherche sous forme html qui sera ensuite lu et intégrer au dom asynchronymement

* @copyright ailtech

* @author Lefevre Alexandre

* @since 1

* @since 2 Affichage des spectacles dans la bar de recherche retravailer

* @version 2

*/

//On inclut le fichier de configuration

require 'include/config.php';

//On vérifie que l'utilisateur a bien envoyer le texte a rechercher

if( !isset( $_GET['texte'] ) or empty( $_GET['texte'] ) )// cas ou le texte a rechercher n'existe pas ou est vide

{

echo "O";// on affiche 0 qui indique que l'action est impossible, cette valeur sera traiter par le fichier /bootstrap/js/recherche.js

}

else//cas ou le texte à recherchée est présent et non vide.

{

//On extrait est échape le texte

$texteRechercher = htmlentities(htmlspecialchars( $_GET['texte'] ));

//On utilise la méthode recherche de l'objet Komidi pour récupérer tout les eléments que la requête retourne.

$resultatRequete = $spectacles->recherche($texteRechercher);

//on parcours le résultat de la requête et on affiche les éléments renvoyer en les formattant.

while ( $row = $resultatRequete->fetch(PDO::FETCH_ASSOC) )

{

echo "<div class=\"media\">

<div class=\"media-left\">

<img src=\"image/$row[Spe_affiche]\" class=\"media-object\" style=\"width:60px;height:60px\">

</div>

<div class=\"media-body\">

<h4 class=\"media-heading\"><a href=\"index.php?action=getSpectacle&id=$row[Spe_id]\">$row[Spe_titre]</a></h4>

<p>$row[Spe_genre]</p>

</div>

</div>";

}

}

?>

Code Javascript :

$(document).ready(function(){

//alert("Jquery Recheche Initialiser");

//alert($("#recherche").val());

$("#recherche").keyup(function(e){

e.preventDefault();

//alert("ouch ne me presse plus!");

//alert($("#recherche").val());

var codeTouche = [65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,9,16,32,46];

var texte = $("#recherche").val();

if( $.inArray( e.keyCode , codeTouche ) == -1){

//sa veut dire que la personne a presser une autre touche que une lettre

}

else{

//alert(e.keyCode);

//alert(texte);

$.ajax({

url : 'index.php',

type : 'GET',

data : 'action=recherche&texte='+texte,

dataType : 'html', // On désire recevoir du HTML

success : function(retour, statut){

//alert(retour);//debug

$("#emplacementRecherche").html(retour);

//alert(retour);

},

error : function(resultat, statut, erreur){

//alert(resultat);//debug

alert("erreur!");

}

});

}

});

//************************RETIRE LES RECHERCHE

$("#recherche").keyup(function(){

var texte = $("#recherche").val();

if( texte.length == 0){

$("#emplacementRecherche").html("<span></span>");

}

else{

//on fait rien

}

});

});

Affichage des spectacles les mieux noter :

Pour afficher les spectacles les mieux noter j ai du créer 2 vue une qui va rechercher la liste des 5 spectacles les mieux noter et une autre qui va rechercher la note moyenne des spectacle.

Pour ensuite récupérer le résultat et l 'afficher dans la page.

Vue permettant de recuperer les 5 meilleur note moyenne donner au spectacles :

SELECT count( `db_komidi`.`noter`.`Spe_id` ) AS `nbDenote` , `db_komidi`.`noter`.`Spe_id` AS `Spe_id` , avg( `db_komidi`.`noter`.`nt_note` ) AS `moyenneNote` FROM `db_komidi`.`noter` WHERE (`db_komidi`.`noter`.`Spe_id` = `db_komidi`.`noter`.`Spe_id` )GROUP BY `db_komidi`.`noter`.`Spe_id`

Vue permettant de récupérer les 5 meilleurs spectacles :

SELECT `db_komidi`.`kdi_listenbNote_Moyenne`.`Spe_id` AS `Spe_id` FROM `db_komidi`.`kdi_listenbNote_Moyenne` ORDER BY `db_komidi`.`kdi_listenbNote_Moyenne`.`moyenneNote` DESC LIMIT 5

Affichage coter client :

Page Contact :

Nous sommes rendu compte que, si un bug ou de demande de contact se fessait il faut un moyen de prévenir l'administrateur du site pour cela j'ai développer la partit contact cotée serveur.

Je récupère les données du message et je les enregistres dans la base de donnée,et ensuite envoie un mail à un administrateur pour le prévenir avec le message.

Dictionnaire des donnéée :

Nom Description Type Commentaire Conntraintes et regle de calcul

id_msg Clées identifiant un message.

Entier(3) Cette cléé servira de clée primaire et sera auto incrementer

msg_civilite Décrit la civilitée d'une personne

Chaine de caracteres(12)

Sert determiner le sexe de la personne

Sera obligatoirement egale a Monsieur ou mademoiselle oumadame.

msg_nom Nom de la personne

Chaine de caractere(25)

Connaître la personne

Doit etre inferieur a 26 caractere

msg_prenom Prenom de la personne

Chaine de caractere(25)

Connaitre la personne

Doit etre inferieur a 26 caractere

msg Mesage de la personne

TEXT Le message envoyer par la personne

msg_ville Ville de la erssonne

Chaine de caractere.(35)

Permet de connaître de quelle ville il vient

Inferieur a 36 caractere

msg_cde Code postal de la ville

Chaine de caractere(5)

Permet de connaître dans quelle ville se situe la personne qui a lancer le message

Inferieur a 6 caractere

msg_email Email de lapersonne

Chaine de caracterre(255)

Permet de repondre a la personne

msg_date Date du message

datetime ON recupere la date et l' heure de l'nvoie du message

MLD

kdi_contact

id_msgmsg_civilitemsg_nommsg_prenommsgmsg_villemsg_cdemsg_emailmsg_date

MCD

kdi_contact(id_msg, msg_civilite, msg_nom, msg_prenom, msg, msg_ville, msg_cde, msg_email, msg_date)id_msg Clée primaire.

SQL

USE db_komidi;DROP TABLE if exists kdi_contact;CREATE TABLE kdi_contact(

id_msg INT(3) AUTO_INCREMENT NOT NULL,msg_civilite VARCHAR(12) NOT NULL,msg_nom VARCHAR(25) NOT NULL,msg_prenom VARCHAR(25) NOT NULL,msg TEXT NOT NULL,msg_ville VARCHAR(35),msg_cde VARCHAR(5),msg_email VARCHAR(255) NOT NULL,msg_date DATETIME NOT NULL,

PRIMARY KEY(id_msg)

)ENGINE=InnoDB;

Code permettant enregistrement message et envoie mail à l'administrateur :<?php/** * Created by PhpStorm. * User: alexandre * Date: 24/04/17 * Time: 16:23 */

require_once 'include/config.php';

if( !empty( $_POST['civilite'] ) and !empty( $_POST['nom'] ) and !empty( $_POST['prenom'] ) and !empty( $_POST['msg'] ) and !empty( $_POST['ville'] ) and!empty( $_POST['codepostal'] ) and !empty( $_POST['email'] ) ){ //on extrait les variables global dans des simple variable en echapant les caratere special. $civilite = htmlspecialchars( $_POST['civilite'] , ENT_NOQUOTES); $nom = htmlspecialchars( $_POST['nom'] , ENT_NOQUOTES); $prenom = htmlspecialchars( $_POST['prenom'] , ENT_NOQUOTES); $msg = htmlspecialchars( $_POST['msg'] , ENT_NOQUOTES); $ville = htmlspecialchars( $_POST['ville'] , ENT_NOQUOTES); $cde = htmlspecialchars( $_POST['codepostal'] , ENT_NOQUOTES); $email = htmlspecialchars( $_POST['email'] , ENT_NOQUOTES); //on verifie si les dimension requis pour les variable sont exacte if( ( strlen($nom) >= 0 and strlen($nom) <= 25) and ( strlen($prenom) >= 0 and strlen($prenom) <= 25) and ( strlen($cde) >= 0 and strlen($cde) <= 5 ) and filter_var($email,FILTER_VALIDATE_EMAIL) and ( strlen($ville) >= 0 and strlen($ville) <= 35 ) ) { // on verifie de quelle civilitée et la personne et on l'enregistre switch ($civilite) { case 2: $civilite = "Mademoiselle"; break; case 3: $civilite = "Madame"; break; default: $civilite = "Monsieur"; } //echo $civilite; //on envoie un mail pour l'administrateur recevoir le message et on enregistre le message dans la base de donnee

//on prepare le message $message = "<!DOCTYPE html> <html> <head>

<title>Contact Komidi via plateforme komidiscope</title> </head> <body>

<h1>$civilite, $nom $prenom</h1> <p>Résident à $ville,$cde,</p> <h1>Message: <p>$msg</p></h1>

</body> </html>"; //on définit les entete $headers = 'MIME-Version: 1.0' . "\r\n"; $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; $headers .= 'From: '.$nom.' '.$prenom.' <'.$email.'>' . "\r\n"; //on stanciation d'un objet mail $mail = new Mail("[email protected]","Contact Komidi",$message,$headers); //on lance le mail et enregistre if( $mail->envoyeMail( $civilite, $nom, $prenom,$ville, $cde, $email ) ) { //echo "action traiter avec sucées"; echo 0; // 0 pour tout ces bien passer } else { //echo "action non traitée"; echo 1; // 1 pour envoie message echouer }

} else { //echo "dimension incorect"; echo 2; // 2 pour un des champ dépasse la limite de caratéres possible.

}}else{ //echo "Une variable manquante"; echo 3; // 3 pour un des champ non renseigner.}?>