suziesuzy961
Messages postés1Date d'inscriptionlundi 11 février 2008StatutMembreDernière intervention18 février 2008 18 févr. 2008 à 16:40
Bonjour,
pour une newbie dans la POO, je trouve cette classe excellente : le code est facile à lire et à prendre en main ! Suffisamment flexible pour l'adapter à mes besoins.
PAR CONTRE,
J'ai un souci avec mon hébergeur free : la class ne fonctionne pas.
C'est un problème avec les exeptions.
voici le message d'erreur :
Parse error: syntax error, unexpected '{' in /mnt/152/sda/1/d/sortirfute/objet/fiche_modif_img1.inc.php on line 29
voici le code :
28- try
29- {
30- $ext=$charger->executer();
Est ce un problème de librairie ou de version php ?
Est ce que vous avez une solution pour corriger le problème ?
Merci.
djshaker
Messages postés4Date d'inscriptionjeudi 13 novembre 2003StatutMembreDernière intervention 3 juin 2010 13 févr. 2006 à 15:51
Petite amélioration à éffectué.. quand tu donne une largeur ou une hauteur fixe, il se base sur la largeur ou hauteur d'origine pour redimensionner => les proportions ne sont pas conservé.
Bon courage.
www.orlinz.com
f bnkcm
Messages postés57Date d'inscriptiondimanche 2 mai 2004StatutMembreDernière intervention 6 septembre 2006 6 févr. 2006 à 12:41
Merci BABID.
Merci GRanard pour les idées, j'ai modifié le code et c'est plus optimisé là.
Merci à tous!
++
cs_GRenard
Messages postés1662Date d'inscriptionlundi 16 septembre 2002StatutMembreDernière intervention30 juillet 20081 2 févr. 2006 à 00:27
On m'a demandé de commenter cette classe :)
La première chose qui marque, c'est bien le $array qui n'est pas très convivial dans le constructeur.
Tu peux utiliser des const DEFAULT_LARGEUR = 140; par exemple pour spécifier tes valeurs par défaut.
Au sujet des "options" de tableau comme ca, essaies de faire comme PHP... Une clé et une valeur que tu vas chercher l'information avec foreach.
Ainsi tu vas faire un truc comme foreach($array as $key => $val) ........ $this->$key = $val; (avec une vérification au préalable pour ne pas écrire n'importe quoi dans ta classe... comme un isset) -> donc plus besoin de else, mettre les self::DEFAULT_ au début.
Même chose pour les types d'image autoriser... faire une énumération avec const... TYPE_GIF 1;, TYPE_JPG 2;, TYPE_JPEG = 2;...
Je ne sais pas si tu sais mais le AND n'a pas la même précédence que &&... (OR aussi)
Ta classe dépend de $_FILES['fichier'] et ne devrait pas... ce 'fichier' devrait être passé en paramètre quelque part.
Utilise les === et les !== pour une meilleure compréhension de code et une meilleure rapidité.
Tes méthodes ne font que ce suivre et ca ne veut pas dire grand chose... existe, extension, type, poids, executer... c'est pas une très bonne technique tout ça... Il faudrait plutôt dans exécuter faire un checkPoids, checkType, check...
Bah voilà c'est déjà ça :)
cs_babid
Messages postés49Date d'inscriptiondimanche 21 septembre 2003StatutMembreDernière intervention17 décembre 2008 29 janv. 2006 à 17:10
Merci beaucoup, très utile comme class.
f bnkcm
Messages postés57Date d'inscriptiondimanche 2 mai 2004StatutMembreDernière intervention 6 septembre 2006 29 janv. 2006 à 09:48
FhX => J'ai réglé ça avant ta deuxième réponse ^^, instanciation avec peu de paramètres à part et execution à part:
// $charger = new charger(); pour laisser les paramètres par défauts
$charger = new charger($array);
// gestion des Exceptions try... catch...
try
{
$charger->existe();
echo 'L\'image a été chargée avec succès!';
}
catch(Exception $e)
{
echo $e->getMessage();
}
Merci.
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 20153 28 janv. 2006 à 18:39
Justement, si tu veux faire un renommage dynamique, tu t'y prends mal.
L'instanciation doit être le moment où tu charges tes paramètres. Pas la où tu exécutes le code à proprement parler.
Pour pouvoir exécuter du code normalement, tu dois passer par une méthode à part.
Hors toi, tu fais : instanciation => redimensionnement direct.
C'est pas comme ca qu'il faut faire, tu dois séparer les deux.
Voila pourquoi tu as trop de paramètres d'ailleurs dans tes méthodes. D'ailleurs, ta classe est plus un concentré de fonctions purs plutôt que d'un code orienté objet :)
C'est aussi pour cela que je le trouve lourd (bien plus qu'un code OO :p)
f bnkcm
Messages postés57Date d'inscriptiondimanche 2 mai 2004StatutMembreDernière intervention 6 septembre 2006 28 janv. 2006 à 16:47
Salut,
Merci pour vos critiques, je prendrai ça en considération, par contre, malalam, j'ai pas trop compris ce que tu suggères ici:
"Tu aurais pu créer une propriété privée, un tableau, avec pour clef, le type renvoyé par la fonction getimagsiez, et valeur, le type sous forme de chaine : 'png', 'gif'...cela t'aurait épargné quelques lignes de code."
Puis, pour "Pourquoi avoir rendu toutes tes propriétés publiques...?", là j'ai besoin un peu plus d'orientation sur l'utilisation de private, public, protected... merci de bien m'éclaircir ce point, je suis à l'écoute ^_^
FhX => Tout à fait d'accord avec toi pour le "trop de paramètres" à faire passer, sinon pas pour le préfixe et suffixe, ceux là je préfère les garder comme ça (pour un renommage dynamique nom_01.jpg, nom_02.jpg... tu vois).
Merci, je vais modifier.
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 20153 28 janv. 2006 à 13:19
Bon, comme c'est du PHP5.. il faut utiliser les exceptions !! C'est pas pour rien :)
Throw new Exception('Message d\'erreur !');
C'est pas compliqué en plus niveau utilisation !! !!
Par contre, j'aime pas ton instanciation de ta classe. Tu fais en sorte que celui qui va utiliser ta classe va faire exactement le tableau que tu lui demandes.
Hors, il y a trop de paramètres à passer d'un coup !
Par exemple : $type_aut. Il faut la mettre dans la classe elle-même ! Pas besoin de l'appeler hors classe ! A la limite créer une méthode pour pouvoir modifier ca... pourquoi pas ! Mais certainement pas lors de l'instanciation !
Pareil pour le préfixe et le suffixe ===> dans la classe ca !
Bref, c'est encore un peu trop lourd pour moi ! :)
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 28 janv. 2006 à 11:04
Hellp,
rapidement, pas trop le temps là : quelques imperfections.
Tes switch sur le type sont inutiles. Et répétitifs. Tu aurais pu créer une propriété privée, un tableau, avec pour clef, le type renvoyé par la fonction getimagsiez, et valeur, le type sous forme de chaine : 'png', 'gif'...cela t'aurait épargné quelques lignes de code.
Pareil pour les messages d'erreurs, tu aurais dû les définir dans les propriétés de ta classe, sous forme de tableau, ou de constantes, comme tu veux. Un tableau avec comme clef la valeur du switch que tu fais, et clef, le message d'erreur. Ca t'aurait encore épargné quelques lignes de code inutiles.
Pourquoi avoir rendu toutes tes propriétés publiques...?
En l'améliorant, je pense que ça peut devenir une classe utile et intéressante :-) Mais il faut mieux la penser. Avec une classe parente abstraite par exemple, et une classe fille pour chaque 'type' d'image. Tu réduirais sérieusement ton code, il serait plus clair.
18 févr. 2008 à 16:40
pour une newbie dans la POO, je trouve cette classe excellente : le code est facile à lire et à prendre en main ! Suffisamment flexible pour l'adapter à mes besoins.
Un grand merci !!
1 sept. 2007 à 14:49
function redim()
{
//On essaye de redimensionner
// On vérifie d'abord si la librairie GD est activée
if(extension_loaded('gd'))
{
// Si oui, on lance la méthode pour redimensionner
// Calcule des nouvelles dimensions
list($largeur_orig, $hauteur_orig) = getimagesize($_FILES[$this->nom_champs]['tmp_name']);
// Un peu des mathématiques...
if($largeur_orig > $this->largeur || $hauteur_orig > $this->hauteur)
{
// ORIGINE
//if($largeur_orig >= $hauteur_orig)
//{
// $coef = $largeur_orig / $hauteur_orig;
// $largeur = $this->largeur;
// $hauteur = ceil($this->hauteur / $coef);
// }
//else
//{
// $coef = $hauteur_orig / $largeur_orig;
// $hauteur = $this->hauteur;
// $largeur = ceil($this->largeur / $coef);
// }
///
//code modifié
if($largeur_orig >= $hauteur_orig)
{
$coef = $this->largeur / $largeur_orig;
$largeur = $this->largeur;
$hauteur = ceil($hauteur_orig * $coef);
}
else
{
$coef = $this->hauteur / $hauteur_orig;
$hauteur = $this->hauteur;
$largeur = ceil($largeur_orig * $coef);
}
}
else
{
$largeur = $this->largeur;
$hauteur = $this->hauteur;
}
PAR CONTRE,
J'ai un souci avec mon hébergeur free : la class ne fonctionne pas.
C'est un problème avec les exeptions.
voici le message d'erreur :
Parse error: syntax error, unexpected '{' in /mnt/152/sda/1/d/sortirfute/objet/fiche_modif_img1.inc.php on line 29
voici le code :
28- try
29- {
30- $ext=$charger->executer();
Est ce un problème de librairie ou de version php ?
Est ce que vous avez une solution pour corriger le problème ?
Merci.
13 févr. 2006 à 15:51
Bon courage.
www.orlinz.com
6 févr. 2006 à 12:41
Merci GRanard pour les idées, j'ai modifié le code et c'est plus optimisé là.
Merci à tous!
++
2 févr. 2006 à 00:27
La première chose qui marque, c'est bien le $array qui n'est pas très convivial dans le constructeur.
Tu peux utiliser des const DEFAULT_LARGEUR = 140; par exemple pour spécifier tes valeurs par défaut.
Au sujet des "options" de tableau comme ca, essaies de faire comme PHP... Une clé et une valeur que tu vas chercher l'information avec foreach.
Ainsi tu vas faire un truc comme foreach($array as $key => $val) ........ $this->$key = $val; (avec une vérification au préalable pour ne pas écrire n'importe quoi dans ta classe... comme un isset) -> donc plus besoin de else, mettre les self::DEFAULT_ au début.
Même chose pour les types d'image autoriser... faire une énumération avec const... TYPE_GIF 1;, TYPE_JPG 2;, TYPE_JPEG = 2;...
Je ne sais pas si tu sais mais le AND n'a pas la même précédence que &&... (OR aussi)
Ta classe dépend de $_FILES['fichier'] et ne devrait pas... ce 'fichier' devrait être passé en paramètre quelque part.
Utilise les === et les !== pour une meilleure compréhension de code et une meilleure rapidité.
Tes méthodes ne font que ce suivre et ca ne veut pas dire grand chose... existe, extension, type, poids, executer... c'est pas une très bonne technique tout ça... Il faudrait plutôt dans exécuter faire un checkPoids, checkType, check...
Bah voilà c'est déjà ça :)
29 janv. 2006 à 17:10
29 janv. 2006 à 09:48
// $charger = new charger(); pour laisser les paramètres par défauts
$charger = new charger($array);
// gestion des Exceptions try... catch...
try
{
$charger->existe();
echo 'L\'image a été chargée avec succès!';
}
catch(Exception $e)
{
echo $e->getMessage();
}
Merci.
28 janv. 2006 à 18:39
L'instanciation doit être le moment où tu charges tes paramètres. Pas la où tu exécutes le code à proprement parler.
Pour pouvoir exécuter du code normalement, tu dois passer par une méthode à part.
Hors toi, tu fais : instanciation => redimensionnement direct.
C'est pas comme ca qu'il faut faire, tu dois séparer les deux.
Voila pourquoi tu as trop de paramètres d'ailleurs dans tes méthodes. D'ailleurs, ta classe est plus un concentré de fonctions purs plutôt que d'un code orienté objet :)
C'est aussi pour cela que je le trouve lourd (bien plus qu'un code OO :p)
28 janv. 2006 à 16:47
Merci pour vos critiques, je prendrai ça en considération, par contre, malalam, j'ai pas trop compris ce que tu suggères ici:
"Tu aurais pu créer une propriété privée, un tableau, avec pour clef, le type renvoyé par la fonction getimagsiez, et valeur, le type sous forme de chaine : 'png', 'gif'...cela t'aurait épargné quelques lignes de code."
Puis, pour "Pourquoi avoir rendu toutes tes propriétés publiques...?", là j'ai besoin un peu plus d'orientation sur l'utilisation de private, public, protected... merci de bien m'éclaircir ce point, je suis à l'écoute ^_^
FhX => Tout à fait d'accord avec toi pour le "trop de paramètres" à faire passer, sinon pas pour le préfixe et suffixe, ceux là je préfère les garder comme ça (pour un renommage dynamique nom_01.jpg, nom_02.jpg... tu vois).
Merci, je vais modifier.
28 janv. 2006 à 13:19
Throw new Exception('Message d\'erreur !');
C'est pas compliqué en plus niveau utilisation !! !!
Par contre, j'aime pas ton instanciation de ta classe. Tu fais en sorte que celui qui va utiliser ta classe va faire exactement le tableau que tu lui demandes.
Hors, il y a trop de paramètres à passer d'un coup !
Par exemple : $type_aut. Il faut la mettre dans la classe elle-même ! Pas besoin de l'appeler hors classe ! A la limite créer une méthode pour pouvoir modifier ca... pourquoi pas ! Mais certainement pas lors de l'instanciation !
Pareil pour le préfixe et le suffixe ===> dans la classe ca !
Bref, c'est encore un peu trop lourd pour moi ! :)
28 janv. 2006 à 11:04
rapidement, pas trop le temps là : quelques imperfections.
Tes switch sur le type sont inutiles. Et répétitifs. Tu aurais pu créer une propriété privée, un tableau, avec pour clef, le type renvoyé par la fonction getimagsiez, et valeur, le type sous forme de chaine : 'png', 'gif'...cela t'aurait épargné quelques lignes de code.
Pareil pour les messages d'erreurs, tu aurais dû les définir dans les propriétés de ta classe, sous forme de tableau, ou de constantes, comme tu veux. Un tableau avec comme clef la valeur du switch que tu fais, et clef, le message d'erreur. Ca t'aurait encore épargné quelques lignes de code inutiles.
Pourquoi avoir rendu toutes tes propriétés publiques...?
En l'améliorant, je pense que ça peut devenir une classe utile et intéressante :-) Mais il faut mieux la penser. Avec une classe parente abstraite par exemple, et une classe fille pour chaque 'type' d'image. Tu réduirais sérieusement ton code, il serait plus clair.