begin process at 2013 05 22 05:08:58
  Trouver un code source :
 
dans
 
Accueil > 

Tutoriels

 > 

Tutoriaux

 > [POO] EXEMPLE ALTERNATIVE À UN CAPTCHA

[POO] EXEMPLE ALTERNATIVE À UN CAPTCHA


 Information sur le tutoriel

Note :
Aucune note

 Description

Le tuto présente une alternative au captcha lors de l'utilisation d'un formulaire de contact(applicable également pour un livre d'or).

Tutorial

Alternative au captcha



Avant-propos : Suite à quelques messages sur le forum concernant des problèmes liés aux captchas, je propose une petite alternative (déjà existante) à ceux-ci. L’alternative que nous allons voir est dans le cadre d’un formulaire de contact (applicable au livre d’or également). Il s’agit de la confirmation par email avant l’envoie définitive du message dans notre boîte mail; un peu comme pour confirmer un mot de passe.
Alors, pour changer nous allons faire de l’objet avec du MVC, parce qu’il y a un peu marre de voir/faire QUE du procédural avec des codes mélangés partout dans les applications comme ceux qui traînent sur le forum notamment. Attention ! Je n’explique pas l’objet, ce n’est pas le but ici. D’ailleurs je n’explique pas grand-chose, partant du principe que le tout à été très simplifié pour un résultat optimum. La compréhension n’est donc pas difficile.

Niveau requis : Novice et initié

Pré-requis : il faut avoir une base d’objet et de MVC embarquée dans le cerveau.

Avantages :
- Pas de codes illisibles à taper (même pour ceux qui voient correctement)
- L’envoie doit être confirmer.
- On pourrait blacklisté les adresses emails indésirables au lieu des ips.

Inconvénients :
- L’internaute doit « sortir » de la page, et effectuer des opérations supplémentaires (ouvrir sa boîte mail, confirmer l’envoi)


Notre site
On supposera notre site web sous l’intituler ‘MonSite.com’
On bossera dans 1,2,3…6 dossiers, qui sont :

- http://www.MonSite.com/classes/

- http://www.MonSite.com/config/

- http://www.MonSite.com/controllers/

- http://www.MonSite.com/mails/

- http://www.MonSite.com/themes/

- http://www.MonSite.com/tools/phpmailer/



Dossier tools/

Ce dossier contiendra la classe phpmailer. Cette classe permet d’envoyer des emails en toutes simplicités. On se servira donc d’une solution existante et performante. Je ne m’attarderais pas sur la façon de l’utiliser ! De toute façon vous le verrez (de visu) par vous-même au cours de ce tuto.

Dossier config/

On va crée un fichier, qu’on nommera : config.inc.php
Ce fichier est la pièce maîtresse de notre site c’est dedans qu’on initialisera notre site

La fonction __autoload() s’occupera de charger nos classes automatiquement.
Le reste c’est du classique.


Dossier mails/

Dans ce dossier nous allons y placés tous les ‘gabarits’ pour nos emails.
Pour les besoins de notre tuto il va en falloir 2 :
Fichier valid_contact.txt

Ce fichier est celui qui envoie un lien de confirmation, pour vérifier que c’est bien un humain qui a pris contact avec nous.

Fichier send_contact.txt


Ce fichier contiendra le message que l’internaute a voulu nous envoyer. En gros c’est l’email envoyé par l’internaute.



Dossier themes/

Fichier contact.tpl
Il s’agit tout simplement du formulaire de contact


Dossier classes/

Le nom de nos classes porte le nom de nos fichiers. Donc quand je ferais référence à la classe ‘Kapout’, le nom du fichier est également Kapout ; ceci fait parti intégrante du chargement automatique des classes par __autoload().



Classe Database
Elle contient les méthodes qui permettent d’effectuer la connexion avec la base de données ainsi que l’exécution des requêtes.

- Méthode instance() : Effectue la connexion avec la base de donnée et affiche un message d’erreur en cas d’impossibilité.

- Méthode query() : Prend 3 arguments dont 2 facultatifs ; $query est la requete SQL avec marqueur ‘ ?’, $args est la/les valeur(s) de remplacements des marqueurs, $mode désigne si on veut récupérer toutes lignes ou une seule du jeu de résultats. Uniquement utilisé pour les SELECT

- Méthode exec() : Prend 2 arguments dont 1 facultatif. Les mêmes que pour la méthode query(). Utilisés pour les autres types de requêtes.



Classe Mail
Gère l’envoie des emails à l’aide de la classe phpmailer, et les gabarits d’emails.

Prend 5 arguments dont 1 faculatif :
- $to = destinataire du mail
- $from = expéditeur
- $fromName = nom de l’expéditeur
- $subject = sujet du mail
- $mailName = nom de l’email-template à charger
- $mailVars = valeurs à remplacer dans le template {X}
- $toName = nom du destinataire


Classe Template
Ce n’est pas du lourd comme moteur de template ! Mais il fera ce qu’on lui dit pour les besoins du tuto.
P.S : il ne gère pas les boucles…j’ai prévenu !!

setBundle() prend 2 arguments dont 1 facultatif :
- $file = noms des templates à charger « array(‘head.tpl’, ‘foot.tpl’) ; »
- $vars = valeurs à remplacer dans le template {X}

getContentFile() prend un argument, le fichier à charger


Classe Contact

Enregistre dans la base de données le message que l’internaute tente de nous envoyer.

Confirme qu’il s’agit bien d’un humain à l’aide de l’id de confirmation contenu dans le lien de confirmation fournit en url.


cleannerMessage() effectue le nettoyage de la base pour les messages vieux de plus de 2 jours ou supprime un message précédemment confirmer.
returnkey() renvoie un code id pour la confirmation



Dossier controllers/

Fichier contact.php
Ce fichier effectue les opérations de contrôlent, pour la validation et l’envoie du formulaire ainsi que la confirmation du message par l’id.
Ce fichier utilise une classe de gestion pour formulaire nommée « Form », que j’ai développé auparavant et qui est disponible sur ‘phpcs’



Et pour finir…Dossier racine/

Fichier contact.php

C’est le fichier qui sera appelé par l’internaute : http://www.MonSite.com/contact.php.
C’est lui qui imbriquera les fichiers pour la page contact.php


Screenshots

Page contact.php initialisée


Aucuns champs remplies

Champs invalides



Envoie du mail de confirmation


Tentative de confirmation un id erroné

Id validé

Mot de la fin
Quand on regarde le tout on se dit c’est beaucoup de lignes pour une seule petite chose : OUI !
On aurait pu faire le tout avec moins de lignes de codes, moins de dossiers, moins de fichiers. Mais quand on fait de l’objet (du bon !) avec du MVC ce n’est pas possible de faire petit. Mais on y gagne en lisibilité !! L’application est propre et on sait qui fait quoi.
Je tiens à préciser que chaque ligne de codes a été spécifiquement crée pour ce tuto, donc certaines choses ne sont pas forcément réutilisable pour d’autre cas de figure. Alors ce n’est même pas la peine de me dire « ben j’ai fait ci, j’ai fait ça et ça marche pas quand je veux… » Je ne répondrai pas !


Outils externes utilisés dans le tuto

Lien pour la télécharger la classe PhpMailer: http://phpmailer.worxware.com/
Lien pour la télécharger ma classe Form :
http://www.phpcs.com/codes/CLASSES-VALIDATION-FORMULAIRE_52367.aspx


Autres informations :
- Y a-t-il une page de teste ? Non et il n’y en aura pas ! L’appli a été testé par mes soins tout est ok donc fonctionnel et puis je n’en ai pas envie !
- Je le redis : « Aucune demande d’aide ne sera traitée ici, il y a le forum pour ça ! »

 Historique

17 février 2011 14:56:46 :
- Pitis mises à jours de textes
17 février 2011 17:31:37 :
...
17 février 2011 19:06:17 :
Ajout de screenshots
17 février 2011 19:09:48 :
Ajout de screeshots

Commentaires

Commentaire de cod57 le 20/02/2011 12:07:40

bonjour

Ton cours est très complet et ce n'est pas qu'un cours sur l'alternative captcha tu y présentes
beaucoup d'objets utiles dans le développement php. je vais essayer tout ça.
Merci pour ton travail.

a++

Commentaire de phpAnonyme le 20/02/2011 15:40:32

Merci pour ton commentaire COD57 ;)
Oui pour celui-ci j'ai pas voulu faire les choses à moitié...humm quoique !
En toute franchise faire le tuto m'a pris plus de temps que pour le code en lui-même; '''Expliquer''' c'est pas ce que je fais de mieux si je puis dire !  

Commentaire de popsicle le 08/04/2011 22:40:23

Super le tuto vraiment sais ce que je recherche, mais c'est des captures d'écrans alors je ne peut pas copier / coller le script!?
Es-ce possible d'avoir le script s-v-p?

Merci

Commentaire de NextGenration le 07/05/2011 00:39:39

Bravo !!! Si on pouvait noter . . .

C'est en (grosse) partie ce que je cherchais, reste maintenant à modifier et adapter à mon existant.

Merci pour ce très beau travail.

Commentaire de begueradj le 08/06/2011 16:05:19

je vais tester ce code sur mon site même
ceci dit, il ne faut pas être raciste contre ceux qui programment en procédural: le fonctionnel a précédé l'objet, il faut respecter les vieux

Commentaire de begueradj le 08/06/2011 16:07:12

remarque: il y a trop de codes pour un résultat min (même s'il est très intéressant)

Commentaire de begueradj le 08/06/2011 16:12:02

PHP = MYSQL
à bas PDO et vive MYSQL

Commentaire de phpAnonyme le 08/06/2011 22:59:29

---
il ne faut pas être raciste contre ceux qui programment en procédural: le fonctionnel a précédé l'objet, il faut respecter les vieux
---
Le terme " raciste " ne convient pas quand on parle de choix de styles pour un langage....on aime ou on n'aime pas faire, de tel ou de tel façon. Et même si, comme tu le soulignes, le procédural à précédé l'objet, il n'en reste pas moins qu'il faille savoir évoluer avec les langages. Libre à toi de rester dans un déni conscient d'évolution, mais je ne suis pas sure que tu puisses trouver écho auprès des autres programmeurs. Faire un tutoriel régressif plutôt qu'évolutif n'est pas dans mon conscient profond.


---
remarque: il y a trop de codes pour un résultat min (même s'il est très intéressant)
---
Dans mon " Mot de la fin " tu peux y lire :
## Quand on regarde le tout on se dit c'est beaucoup de lignes pour une seule petite chose : OUI !...... ##
La moindre des choses aurait été de lire celui-ci. Le pourquoi du comment y est clairement indiqué. Donc j'y reviendrais pas.

---
PHP = MYSQL
à bas PDO et vive MYSQL
---
Il vaut mieux éviter de dire des conneries pareilles !! PHP n'est pas MYSQL et réciproquement. Pas plus que le " à bas PDO et vive MYSQL " !
Je t'invite donc à t'informer sur les langages avant de dire des inepties pareilles(désolés mais ça me révolte).

Cordialement

Commentaire de begueradj le 08/06/2011 23:26:28

php = mysql: je n'ai pas voulu dire qu'un sgbd est un langage de programmation, mais juste une façon de dire que mysql est taillé presque sur mesure pour php et vice versa

pas la peine de vous révolter: on a besoin du sang froid pour programmer :)

Commentaire de begueradj le 12/06/2011 15:40:52

salut,
je ne comprends pas les notations {truc}, comme dans les fichiers contact.tpl et send_contact.txt

Commentaire de stay le 09/07/2011 18:58:40

(string, int, array ou object) truc = variable assignées de valeurs.
Elle va de paire avec les délimiteurs gauche et droite {}.

Exemple :
{speudo = "stay"}

je suis {speudo}

---------------
PS: ce n'est qu'une déduction.
J'utilise Smarty en moteur de Template.
Logiquement, il y a un $ après le délimiteur gauche {$speudo}.

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2013
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,172 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales