BullGuard Antivirus Sale - 60% Off with openElement !
Accueil Forum Accueil Forum >

openElement

> Tutoriaux utilisateurs
  Nouveaux messages Nouveaux messages Fil RSS  - [Tuto] - Livre d'or sans base de données
  FAQ FAQ  Rechercher dans le Forum   Inscription Inscription  Connexion Connexion

[Tuto] - Livre d'or sans base de données

 Répondre Répondre Page  123 11>
Auteur
Message
MicroVinc allez vers le bas
Moderator Group
Moderator Group


Depuis le: 21 Août 2012
Pays: Bretagne
Status: Inactif
Points: 4460
Options des messages Options des messages   Thanks (3) Thanks(3)   Citer MicroVinc Citer  RépondreRéponse Lien Direct à ce Post Sujet: [Tuto] - Livre d'or sans base de données
    Envoyé : 25 Oct 2014 à 15:03
Bonjour, 

suite à une demande qu'on m'a fait pour réaliser un livre d'or sur un site avec un petit hébergement et par conséquent dépourvu d'une base de données MySQL ou autres...
Je vous propose une base de données économique et qui fonctionnera comme les bases de données qui coûtes très chères ! Et si vous ne croyez pas c'elle là, je peux vous en raconter une autre LOL.

J'ai écris pas mal de détails dans les scripts pour que vous puissiez le modifier, l'adapter, l'améliorer, le revendre Confused à votre guise...

Voici la solution de base que je propose :

Difficulté : Débutant si connaissance du langage (php, js) sinon, Avancé (qui connait quand même bien l'environnement du logiciel OE)
Intégration : Totale avec l’environnement OE
Tests et fonctionnement : Sur le serveur distant (sur le serveur local généré par OE, le livre d'or ne fonctionnera pas)
Fonctions du script : 
  1. Base de données des posts dans un fichier txt
  2. Contrôle, et censure les mots vulgaires d'un post (mot remplacé par *bip*, paramétrable)
  3. Envoie un mail à l'administrateur du site lorsqu'un nouveau post est émis sur le livre d'or
  4. Sécurité anti-touche F5 (pour ne pas envoyer 2 ou plusieurs fois un post après un send)
  5. Limiter à un post toutes les 24 heures (via un cookie)
  6. Enregistrement de l'adresse IP de l'émetteur du post dans la base de données

Exemple :

ETAPE 1

NOTE : vous pouvez ne pas faire le petit 1 et 2 ci-dessous, lors d'un premier message, le fichier Guesbook.txt sera créé s'il n'existe pas sur votre serveur
1-Créer un fichier text nommé : Guesbook.txt
2-Le mettre à la racine de votre site sur le serveur distant (via FileZilla par exemple)

3-Ajouter une image de 30px x 30px en .png et portera le nom de Plume.png pour l'exemple, cette image sera au début de chaque post sur le livre d'or, mettre cette image dans le dossier Files/Image/

ETAPE 2 : gestion des champs des saisies

1-Ajouter une nouvelle page nommée Livre-or.php (avec le logiciel OE lui mettre les propriétés scripts server php)
2-Sur cette page, ajouter l'élément Panneau d'élément  avec la classes personnalisées : Panel_LivreOr
3-Dans ce panneau d'élément, ajouter 3 champs de saisie 
  • champ de saisie 1 il faut mettre le style Masquer  , il contiendra un numéro aléatoire afin d'éviter un re-send via la touche F5
  • champ de saisie 2 servira pour le Prénom/NOM (modifier la règles de validation en champ obligatoire)
  • champ de saisie 3 servira pour la Ville (modifier la règles de validation en champ obligatoire)
4-Toujours dans ce panneau d'élément, ajouter 1 champs de saisie multi-lignes   ,  (modifier la règles de validation en champ obligatoire)
  • Le champ de saisi servira pour le message
5-Toujours dans ce panneau d'élément, ajouter un bouton de formulaire 
  • Il servira pour valider le formulaire
6-Sur la page, ajouter l'élément de redirection du formulaire 
  • Programmé le comme ceci
  • Ne pas oublier de basculer tous les éléments dans "éléments pris en compte"
7-Ajouter un bloc de code source 
  • Paramétrer le en Javascript et position EndBody
  • Ajouter le script suivant en modifiant l'id en rouge par l'id de votre élément champs de saisie qui est en mode masqué, il servira à recevoir le chiffre aléatoire...
  • // Pour éviter un send via F5
  • $AntiRefresh = <?php echo $_SESSION['AntiF5']; ?>;
  • $('input[name="WEcc0fafedee"]').val($AntiRefresh);
ETAPE 3 : gestion de l'affichage des messages du livre d'or

1-Ajouter l'élément Panneau d'élément à positionner dessous les champs de saisie et du bouton envoyer afin d’accueillir les messages de la base de données (largeur 675px, hauteur jusqu'au pied de page) 
2-Dans ce panneau d'élément, ajouter un bloc de code Visuel (largeur 650px, hauteur jusqu'au pied de page) 
  • Ajouter le script suivant (changer en rouge le nom de l'image ou le chemin)
  • <?php

  • // Affichage d'un message si un champ de saisie contient des mots censurés
  • if(!empty($MsgErreur)) {
  • echo '<p class="CensoredField">&nbsp;'.$MsgErreur.'</p>';
  • }


  • // Lecture du GUESTBOOK
  • $LinesBDD = file($file);
  • // array_reverse : affichage dans l'ordre ANTI-CHRONOLOGIQUE
  • $LinesBDD = array_reverse($LinesBDD);
  • // lecture dans le fichier ligne par ligne
  • foreach($LinesBDD as $LineBDD) {
  • $LineBDD = trim($LineBDD);
  • if(strlen($LineBDD) > 2){

  • $SingleArgument = explode($delimit,$LineBDD);
  • $nom = $SingleArgument[0];
  • $message = html_entity_decode($SingleArgument[1]);
  • $date = $SingleArgument[2];
  • $ville = $SingleArgument[3];
  • $ip = $SingleArgument[4]; // Option affichage de l'ip
  • $ShowMessages = '<p><span class="GUESTBOOK-Nom"><img src="Files/Image/Plume.png" height=30 width=30></img>De <b>'.$nom.'</b>'; // Affichage de l'image
  • $ShowMessages .= '&nbsp;&nbsp;<i>('.$ville.')</i>';
  • $ShowMessages .= '</span><span class="GUESTBOOK-Date">';
  • $ShowMessages .= '<i><font color=#A4A4A4>le '.substr($date, 0, -8).'&nbsp;</font></i>';
  • $ShowMessages .= '</span></p>';
  • $ShowMessages .= '<p class="GUESTBOOK-Message"><br><font color=#0489B1>'.$message.'</font></p><hr/>';
  • echo $ShowMessages;
  • }
  • }
  • ?>
3-Ajouter un bloc de code source  (gestion de l'affichage du livre d'or)
  • Paramétrer le en CSS et position Header
  • Ajouter le script suivant 
  • /* Gestion de l'affichage */
  • .GUESTBOOK-Nom { float:left; cursor:default;}
  • .GUESTBOOK-Date { float:right; cursor:default;}
  • .GUESTBOOK-Message { margin:5px 40px; clear:both; text-align:justify; cursor:default;}
  • .CensoredField { color:red; cursor:default;}
ETAPE 4 : gestion de l'enregistrement du message

1-Ajouter un bloc de code source 
  • Paramétrer le en php et position StartDocument
  • Ajouter le script suivant
  • Modifier les id en rouge par vos id d'éléments
  • Modifier en bleu par votre e-mail perso afin d'être averti d'un nouveau post sur votre livre d'or (e-mail coupé en plusieurs partie pour se protéger des robots spammer)
  • Modifier en violet les mots ou expression censurés (ne pas oublier de mettre un espace avant et après le mot ou expression)
  • Modifier le nom du cookie en vert si vous le désirez
  • session_start();
  • date_default_timezone_set('Europe/Paris'); // Enlever l'erreur "Warning: strftime()" en local
  • // Livre d'or - GUESTBOOK
  • $file = 'Guesbook.txt';
  • $delimit = '-*-'; // délimiteur dans le fichier afin de retrouver les arguments
  • $nom = $_POST['WE89f46f91b0']; // Nom
  • $ville = $_POST['WE42a5e0935a']; // Ville
  • $message = $_POST['WE1e5ed06eba']; // Message
  •         $AntiF5Refresh = $_POST['WEcc0fafedee']; // AntiF5

  • $ipvisiteur = $_SERVER["REMOTE_ADDR"];
  • $CookieName = 'NomDuCookie'; // Nom du cookie

  • // Affichage date en fr
  • setlocale(LC_TIME, 'fr_FR.UTF8');
  •     $date = strftime('%A %d %B %Y à %H'.h.'%M'); // Date avec l'heure sous le format : dimanche 19 octobre 2014 à 18h58

  • // Initialisation des variables
  • $MsgErreur = '';
  • $validForm = true;

  • // Récupération des données
  •     // Assigner les variables au POST

  • // TRAITEMENT du formulaire au POST

  • if(isset($nom, $ville, $message, $AntiF5Refresh, $_SESSION['AntiF5']) && $AntiF5Refresh==$_SESSION['AntiF5'])
  • {

  • // Début - Gestion du Cookie
  •     // Pour éviter qu'une unique personne poste 50 fois dans le livre d'or, création d'un cookie
  •   setcookie($CookieName,$_SERVER['REMOTE_ADDR'],time()+3600*24); // 24 heures soit 3600 secondes = 1 heures x 24 = 24 heures
  • // Si le cookie est égal à l'ip du client, alors on le stop
  • if (isset($_COOKIE[$CookieName]) && $_COOKIE[$CookieName]==$_SERVER['REMOTE_ADDR'])
  • {

  • } else {

  • // Fin - Gestion du Cookie

  • // On convertit les caracteres html
  • $nom = htmlspecialchars(stripslashes(trim(strip_tags($nom))));
  • $ville = htmlspecialchars(stripslashes(trim(strip_tags($ville))));

  •     // Champs de texte multi-ligne : Gestion des injections de code "html"
  • $allowable_tags = '<b><a>'; // On autorise les balises <b> (gras) et <a> (lien) - (facultatif)
  • $message = htmlspecialchars(stripslashes(trim(strip_tags($message, $allowable_tags))));
  • $message = nl2br($message); // nl2br() : Change les sauts de ligne en <br />
  • $message = preg_replace("/(\r\n|\n|\r)/", " ", $message); // Enlève les sauts de ligne, formatage du texte sur une seule ligne dans le fichier txt

  • // Vérification du message

  • // DÉBUT - Censure de certains mots
  • function CensureMots($text){
  • // Liste des mots a filtrer ou les expressions, ne pas oublier de mettre un espace avant et après le mot ou l'expression
  • $words_to_censor = array(' conne ',' merde ', ' salope ', ' connasse ', ' bite ', ' nul ', ' bof ', ' voleur ', ' arnaque '); // Les espaces pour éviter de censurer les mots comme "contenir"
  •         return str_replace($words_to_censor, ' *bip* ', $text); // On remplace la censure par *bip*
  • }
  • // On censure
  • $WasCensoredNom = CensureMots($nom);
  •     $WasCensoredVille = CensureMots($ville);
  • $WasCensoredMessage = CensureMots($message);

  • $Field_Censored = array();
  • if ($nom!=$WasCensoredNom) { $Field_Censored[] = ' "Nom" a été censuré'; }
  • if ($ville!=$WasCensoredVille) { $Field_Censored[] = ' "Ville" a été censuré'; }
  • if ($message!=$WasCensoredMessage) { $Field_Censored[] = ' "Message" a été censuré'; }
  • if(count($Field_Censored)>0) {
  • $MsgErreur .= 'Attention le champ de saisie : '.implode(', ',$Field_Censored).'<br />';
  • }
  •     // FIN - Censure de certains mots

  • // Champs obligatoires
  • $Field_Obligatory = array();
  • if ($nom=='' || $WasCensoredNom=='') { $validForm = false; $Field_Obligatory[] = 'Votre Prénom et le Nom'; }
  • if ($ville=='' || $WasCensoredVille=='') { $validForm = false; $Field_Obligatory[] = 'Votre ville'; }
  • if ($message=='' || $WasCensoredMessage=='') { $validForm = false; $Field_Obligatory[] = 'Votre message'; }
  • if(count($Field_Obligatory)>1) { $MsgErreur .= 'Vous devez remplir tous les champs obligatoires : '.implode(', ',$Field_Obligatory).'<br />'; }


  • // Le formulaire a été contrôlé, on écrit les données dans le fichier txt
  • if($validForm === true) 
  • {
  • if($WasCensoredNom!='' && $WasCensoredVille!='' && $WasCensoredMessage!='')
  • {
  • //Écriture dans le GUESTBOOK
  • //Ouverture du fichier en écriture
  • $fp = fopen($file,'a');
  • $line = $WasCensoredNom.$delimit.$WasCensoredMessage.$delimit.$date.$delimit.ucfirst(strtolower($WasCensoredVille)).$delimit.$ipvisiteur."\n";
  • //On rajoute le message dans le fichier
  • fwrite($fp, $line, strlen($line));
  • //fermeture du fichier
  • fclose($fp);

  • // Send mail à l'admin pour l'informer qu'un nouveau message dans le livre d'or vient d'être ajouté (votre mail d'une façon découpé pour éviter les robots spammer...)
  • $nommail = "Moi";
  • $arob = "@";
  • $nomdomaine = "NomDeDomaine";
  • $nomdomaineext = ".fr"; // l'e-mail de l'exemple est : Moi@NomDeDomaine.fr

  • // Send mail à l'admin pour l'informer qu'un nouveau message dans le livre d'or vient d'être ajouté
  • $sujetmail = 'Nouveau message dans le livre d\'or';
  • $messagemail = "Vous avez un nouveau message de ".$nom." dans le livre d'or,<br /><br /><strong>-Message :</strong><br />$message";
  • $destinatairemail = ''.$nommail.$arob.$nomdomaine.$nomdomaineext;
  • $headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";
  • // Envoie du message en html
  • mail($destinatairemail,$sujetmail,$messagemail,$headers);

  • // echo "<script>alert(\"Vous avez posté avec succès sur le livre d'or, merci...\")</script>"; Ne pas dé-commenter en responsive

  • }

  • session_unset(); // Détruit toutes les variables de la session courante.
  • session_destroy(); // Détruit toutes les données associées à la session courante. Cette fonction ne détruit pas les variables globales associées à la session, de même, elle ne détruit pas le cookie de session.

  • }
  • }
  • }
  • unset($_POST);
  • // Anti-F5 (évite de re-poster le formulaire en cas d'appuis sur la touche F5 ("Actualiser la page")
  • $_SESSION['AntiF5'] = rand(100000,999999);
ETAPE 5 : gestion du message qui explique que l'utilisateur ne peut pas envoyer 2 fois de suite un message et doit attendre 24 heures : (temps d'expiration du cookie)

1-Ajouter l'élément Text multi-lignes  avec la classes personnalisées : LivreOr_AlreadySend
  • ATTENTION, il ne doit pas être dans un des deux panneaux d'élément !
  •  il faut mettre le style Masquer 
2-Ajouter un bloc de code source 
  • Paramétrer le en php et position EndBody
  • Ajouter le script suivant en modifiant les id en rouge par vos id d'éléments
  • if ($_COOKIE[$CookieName]==$_SERVER['REMOTE_ADDR'] || isset($AntiF5Refresh)) // Après un post
  • {
  • echo "<script>$('.LivreOr_AlreadySend').css('visibility', 'visible');</script>"; // Text multi-lignes qui explique qu'on peut envoyer un message que toutes les 24h

  • echo "<script>$('.Panel_LivreOr').css('visibility', 'hidden');</script>"; // Panneau d'élément Nom/Ville/Message
  • }
  • else // Affichage normal
  • {
  • echo "<script>$('.LivreOr_AlreadySend').css('visibility', 'hidden');</script>"; // Text multi-lignes qui explique qu'on peut envoyer un message que toutes les 24h

  • echo "<script>$('.Panel_LivreOr').css('visibility', 'visible');</script>"; // Panneau d'élément Nom/Ville/Message
  • }
Dead 

Voilà Tongue


 Big smile Bonne nouvelle, le script fonctionne chez "Free" !

Mise à jour :
31 mai 2017 - Mise à jour pour fonctionnement avec le template Senslight




Edité par MicroVinc - 10 Feb 2018 à 16:17
-Éléments pour OpenElement : ICI
-Tutoriels pour OpenElement : ICI


La Bretagne, un État dans l'État
Haut de la page
dpann allez vers le bas
Newbie
Newbie


Depuis le: 06 Nov 2014
Pays: France
Status: Inactif
Points: 8
Options des messages Options des messages   Thanks (0) Thanks(0)   Citer dpann Citer  RépondreRéponse Lien Direct à ce Post Envoyé : 22 Nov 2014 à 11:00
Merci infiniment pour ce tuto vraiment très bien fait  et très pédagogique !  Tongue
dpann

Haut de la page
MicroVinc allez vers le bas
Moderator Group
Moderator Group


Depuis le: 21 Août 2012
Pays: Bretagne
Status: Inactif
Points: 4460
Options des messages Options des messages   Thanks (1) Thanks(1)   Citer MicroVinc Citer  RépondreRéponse Lien Direct à ce Post Envoyé : 22 Nov 2014 à 15:06
Bonjour, merci...

Je viens de faire une petit mise à jour "cosmétique" au niveau du css (Etape 3 partie 3)...
-Éléments pour OpenElement : ICI
-Tutoriels pour OpenElement : ICI


La Bretagne, un État dans l'État
Haut de la page
Dmit OE allez vers le bas
Admin Group
Admin Group


Depuis le: 31 Mai 2012
Status: Inactif
Points: 13971
Options des messages Options des messages   Thanks (0) Thanks(0)   Citer Dmit OE Citer  RépondreRéponse Lien Direct à ce Post Envoyé : 24 Nov 2014 à 09:56
Merci!
Haut de la page
Maurice306 allez vers le bas
Senior Member
Senior Member


Depuis le: 20 Avr 2008
Pays: France
Status: Inactif
Points: 2066
Options des messages Options des messages   Thanks (0) Thanks(0)   Citer Maurice306 Citer  RépondreRéponse Lien Direct à ce Post Envoyé : 28 Nov 2014 à 14:58
Bonjour à tous, et merci pour ce tuto de MicroVinc

Bon l'assos est chez "free" ! j'ai tenté l'opération mais soit j'ai pas tout compris ou free ne permet pas la chose (mais comme les formulaires mail marchent bien !) Confused

Si d'autres on tenté la création merci de nous faire savoir quel a été le résultat.

il me semble pourtant avoir suivi tout à la lettre.
La vie est belle !!!....., elle est comme chacun se la fait. Ne soyez pas pressé, partez plus tôt, car il n'y a pas de personnes pressée elles ne sont qu'en retard !!!
Haut de la page
MicroVinc allez vers le bas
Moderator Group
Moderator Group


Depuis le: 21 Août 2012
Pays: Bretagne
Status: Inactif
Points: 4460
Options des messages Options des messages   Thanks (0) Thanks(0)   Citer MicroVinc Citer  RépondreRéponse Lien Direct à ce Post Envoyé : 28 Nov 2014 à 15:18
Bonjour, si vous êtes chez Free il y a quoi qui ne marche pas exactement ?

l'envoie du e-mail ou le remplissage/l'accès au fichier txt ?
-Éléments pour OpenElement : ICI
-Tutoriels pour OpenElement : ICI


La Bretagne, un État dans l'État
Haut de la page
Maurice306 allez vers le bas
Senior Member
Senior Member


Depuis le: 20 Avr 2008
Pays: France
Status: Inactif
Points: 2066
Options des messages Options des messages   Thanks (0) Thanks(0)   Citer Maurice306 Citer  RépondreRéponse Lien Direct à ce Post Envoyé : 28 Nov 2014 à 16:53
Bonjour MicoVinc

En fait j'ai positionné les éléments, j'ai mis sur la page d'accueil un lien pour la page "Livre d'Or"où l'élément formulaire appariait correctement lorsque j'envoi le message, il ne se passe rien, sinon que les textes dans les champs disparaissent.

Lors du paramétrage de l'élément "redirection du formulaire" le nom de la page n'est pas pris en compte et reste grisé. Je n'ai pas crée d'élément d'envoi du formulaire, je ne sais pas s'il était nécessaire.
La vie est belle !!!....., elle est comme chacun se la fait. Ne soyez pas pressé, partez plus tôt, car il n'y a pas de personnes pressée elles ne sont qu'en retard !!!
Haut de la page
MicroVinc allez vers le bas
Moderator Group
Moderator Group


Depuis le: 21 Août 2012
Pays: Bretagne
Status: Inactif
Points: 4460
Options des messages Options des messages   Thanks (0) Thanks(0)   Citer MicroVinc Citer  RépondreRéponse Lien Direct à ce Post Envoyé : 28 Nov 2014 à 17:46
Embarrassed je ne suis pas sûr d'avoir tout compris...

1-le livre d'or ne fonctionne qu'en ligne et pas en mode prévisualisation

Dans la redirection du formulaire, il faut sélectionner  la même page dans le champ "URL de redirection".
Pour l'élément "envoie du formulaire", je ne comprend pas... 

Sinon, chez free peut-être qu'il faut modifier le CHMOD du fichier txt sur votre serveur en 777 pour les essais...

Bref tout est nécessaire dans le tuto, pas plus et pas moins. Ensuite quand il est fonctionnel on peut élaguer ou embellir...


Edité par MicroVinc - 28 Nov 2014 à 17:47
-Éléments pour OpenElement : ICI
-Tutoriels pour OpenElement : ICI


La Bretagne, un État dans l'État
Haut de la page
Maurice306 allez vers le bas
Senior Member
Senior Member


Depuis le: 20 Avr 2008
Pays: France
Status: Inactif
Points: 2066
Options des messages Options des messages   Thanks (0) Thanks(0)   Citer Maurice306 Citer  RépondreRéponse Lien Direct à ce Post Envoyé : 28 Nov 2014 à 18:23
Je reviens après un autre essai : le site http://lecosaque.free.fr

Sur la page livre d'or il se trouve les inscriptions suivantes :

en haut :

"; } session_unset(); // Détruit toutes les variables de la session courante. session_destroy(); // Détruit toutes les données associées à la session courante. Cette fonction ne détruit pas les variables globales associées à la session, de même, elle ne détruit pas le cookie de session. } } } unset($_POST); // Anti-F5 (évite de re-poster le formulaire en cas d'appuis sur la touche F5 ("Actualiser la page") $_SESSION['AntiF5'] = rand(100000,999999);

sous les champs nom :

Warning: array_reverse() [function.array-reverse]: The argument should be an array in/mnt/113/sdb/8/0/lecosaque/Livre-or.php on line 244

Warning: Invalid argument supplied for foreach() in /mnt/113/sdb/8/0/lecosaque/Livre-or.php on line 246



Edité par Maurice306 - 28 Nov 2014 à 18:25
La vie est belle !!!....., elle est comme chacun se la fait. Ne soyez pas pressé, partez plus tôt, car il n'y a pas de personnes pressée elles ne sont qu'en retard !!!
Haut de la page
MicroVinc allez vers le bas
Moderator Group
Moderator Group


Depuis le: 21 Août 2012
Pays: Bretagne
Status: Inactif
Points: 4460
Options des messages Options des messages   Thanks (0) Thanks(0)   Citer MicroVinc Citer  RépondreRéponse Lien Direct à ce Post Envoyé : 28 Nov 2014 à 18:39
Bonjour, commencer par vérifier l'étape 4 : 
  • Paramétrer le en php et position StartDocument



Edité par MicroVinc - 28 Nov 2014 à 18:42
-Éléments pour OpenElement : ICI
-Tutoriels pour OpenElement : ICI


La Bretagne, un État dans l'État
Haut de la page
 Répondre Répondre Page  123 11>
  Partagez ce sujet   

Aller au Forum Permissions du forum allez vers le bas

Forum Software by Web Wiz Forums® version 12.04
Copyright ©2001-2021 Web Wiz Ltd.

Cette page a été affichée en 0.078 secondes.