Class Mail - FormMailDrk

Mammouth du PHP | 985 Messages

16 mars 2010, 20:18

Bonjour,
Ma première class en php.
Donc, soyez compréhensif et cool svp :wink:

Par contre vue que je débute en programmation objet en php, vos conseils et remarques seront les bienvenues :)

Une class mail pratique, portable et simple...

Visionner la class:
http://palacesec.freehostia.com/scripts/class-mail.php
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Mammouth du PHP | 985 Messages

17 mars 2010, 07:06

Mis à jour importante de la Class.
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

ViPHP
ViPHP | 5462 Messages

17 mars 2010, 15:37

cool, t'as mis ton code en class :wink:

petit truc j'ai pas encore tester mais la fonction __toString doit etre public et pas private

EDIT : bon ca a marcher du premier coup, par contre attention a vérification de mail, même si c'est tordu un mail accepte les caractères suivant aussi :
! $ & * - = ^ ` | ~ # % ' + / ? _ { }

ViPHP
ViPHP | 3607 Messages

17 mars 2010, 15:56

D'ailleurs vu qu'on est en php5 visiblement, autant utiliser les fonctions filter ;) ( http://php.net/manual/fr/book.filter.php )
Par ailleurs, il manque cruellement de commentaires dans le code de la classe :)

ViPHP
ViPHP | 5462 Messages

17 mars 2010, 16:00

D'ailleurs vu qu'on est en php5 visiblement, autant utiliser les fonctions filter ;) ( http://php.net/manual/fr/book.filter.php )
Par ailleurs, il manque cruellement de commentaires dans le code de la classe :)
je lui ai dis aussi mais ils préfèrerais faire lui même, y'as pas de challenge sinon surtout que des classes mail y'en a déjà :wink:

Mammouth du PHP | 985 Messages

17 mars 2010, 19:33

Bonjour, et merci pour les remarques.

FILTER_VALIDATE_EMAIL permet de filtrer toutes les syntaxes possibles d'un email.
Comme l'explique Steal, un email peut contenir des caractères particuliers mais qui ne sont quasiment jamais utilisés.
Néanmoins, il est logique, normal et bien que FILTER_VALIDATE_EMAIL les prenne en compte.
Le but de cette fonction n'étant aucun autre...

Les seuls champs véritablement critiques que j'insère directement dans la fonction mail sont les champs emails.
Le but ici n'est donc pas seulement de vérifier leur syntaxe mais aussi de sécuriser ces deux insertions.
Pour le moment, j'utilise ma reg pour cela.
En reprenant la liste de Steal, les caractères quelle n'accepte pas sont ceci: ! $ & * = ^ ` | ~ # % ' + / ? { }
J'ai pesé le pour et le contre et d'après moi 99,9% des emails devraient donc être acceptés.

Sinon, la class va évoluer :)
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

ViPHP
AB
ViPHP | 5818 Messages

18 mars 2010, 05:20

Moi j'ai
Warning: The magic method __toString() must have public visibility and cannot be static in I:\wamp\www\Alainbweb\test_mail_droke.php on line 187

Mammouth du PHP | 985 Messages

18 mars 2010, 08:27

Bien moi non et Steal apparemment non plus, et il test sur Windows comme toi.

De plus, il y a même un exemple sur Php Freaks, une class qui l'utilise en private:
http://www.phpfreaks.com/tutorial/desig ... ject/page2

A moins que ce soit une situation particulière que je n'avais pas prévue, dans ce cas, peux tu me dire après quelle manipulation tu as eu ce message?

Car avec une utilisation normale de la class, je n'ai encore jamais eu ce message
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

ViPHP
ViPHP | 5462 Messages

18 mars 2010, 11:01

Bien moi non et Steal apparemment non plus, et il test sur Windows comme toi.
si si c'est que je te disais plus haut :
petit truc j'ai pas encore tester mais la fonction __toString doit etre public et pas private
c'est depuis le passage a la 5.3

http://www.php.net/manual/fr/migration5 ... atible.php
Les méthodes magiques __get, __set, __isset, __unset, __call, doivent toujours être publiques, et ne peuvent plus être statiques. La signature des méthodes est vérifiées à la compilation.

Mammouth du PHP | 985 Messages

18 mars 2010, 11:21

# La fonction magique __toString n'accepte plus d'arguments.
# Les méthodes magiques __get, __set, __isset, __unset, __call, doivent toujours être publiques, et ne peuvent plus être statiques. La signature des méthodes est vérifiées à la compilation.
Je n'utilise pas d'arguments, sinon pour la suite cela ne concerne pas __toString.

Tu es en 5.3 et tu as dis précédemment que cela fonctionnait du premier coup.
Et tu n'as parlé d'aucunes erreur.

De plus je ne voies aucune raison logique de la mettre en public puisque je ne l'appelle pas de l'extérieur, la class la gère en interne.

Sinon pour les __get, __set... c'est logique de les mettre en public, car sinon cela n'a aucune utilité.

Si jamais je me trompe, et c'est tout à fait possible, et bien je la mettrai en public, mais cela ne m'amuse pas du tout pour les raisons citées plus haut.
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

ViPHP
ViPHP | 5462 Messages

18 mars 2010, 11:50

cool, t'as mis ton code en class :wink:

petit truc j'ai pas encore tester mais la fonction __toString doit etre public et pas private

EDIT : bon ca a marcher du premier coup, par contre attention a vérification de mail, même si c'est tordu un mail accepte les caractères suivant aussi :
! $ & * - = ^ ` | ~ # % ' + / ? _ { }

voila ce que j'ai dis dans mon premier post,

la raison logique que __toString() soit public c'est qu'a tout moment dans ton code tu pourrais faire :
$test = new Test();
echo $test;
et c'est d'ailleur ce que tu fais
$obj = new FormMailDrk(5, 50, 50, 50, 500);
// Envoie de l'email
$obj->send_mail('email@mon_email.com');
// Afficher les messages d'erreurs
print($obj);
tu y'as donc accès de l'extérieur

Mammouth du PHP | 985 Messages

18 mars 2010, 14:05

Dans mon livre c'est marqué:
Si cette méthode existe, Php affichera la valeur de retour de __toString() plutôt que le message Object id #x.
J'en ai donc conclu quelle ne faisait que convertir en string une valeur de retour pouvant être récupérée d'une autre manière de l'extérieur...
Ou quelle permettait de personnaliser la valeur que retourne l'objet...
Et donc que cela ce jouait uniquement en interne.

Bon c'est juste un petit livre sur Php en général, il va falloir que je m'achète un livre sur la programmation objet et que je me documente.

De plus, cela fait plusieurs fois que je me fais avoir car je ne test pas en local, et le serveur externe n'est pas en 5.3.
Donc il est impératif que j'installe php 5.3.

Puis cela me permettra de voir ce fameux message d'erreur :wink:
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

ViPHP
AB
ViPHP | 5818 Messages

18 mars 2010, 16:03

Ou quelle permettait de personnaliser la valeur que retourne l'objet...
La méthode __toString détermine comment la classe doit réagir lorsqu'elle est convertie en chaîne de caractères
Sinon tu pourrais aussi utiliser une fonction public classique pour afficher tes messages d'erreur...
Et à propos de tes messages d'erreurs tu devrais les enregistrer dans un tableau pour pouvoir tous les lister en une seule fois. Sinon avec cette méthode tu n'afficheras que le dernier rencontré :wink:

Mammouth du PHP | 985 Messages

18 mars 2010, 17:06

Je pense que je vais rester sur l'idée de départ mais la mettre en public.
Pour le tableau, oui tu as raison, mais cela risque de poser des problèmes dans les thèmes et/ou la mis en page des formulaires...
En général les messages d'erreurs apparaissent suivant un ordre bien particulier et définit pour que cela soit logique et compréhensible.
Mais il reste pas mal de travail a faire avec les messages d'erreurs, c'est loin d'être parfais.
Notamment quand on complique un peu l'utilisation de la class...
La class elle-même aussi d'ailleurs, il y a des choses a simplifier et des options a ajouter...

Sinon merci pour le retour sur le message d'erreur.
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

ViPHP
AB
ViPHP | 5818 Messages

18 mars 2010, 17:53

A part ça y'a toujours l'histoire du from qui ne renvoie pas le nom de celui qui envoie le mail. Tous les messages que l'on reçoit (enfin tous ceux que je reçois) l'indiquent dans l'entête avant le sujet :)