PHP 5 : Donnez moi une petite aide SVP...

PHP 5 : Donnez moi une petite aide SVP... - PHP - Programmation

Marsh Posté le 29-05-2006 à 11:35:26    

Bonjour.
 
J'ai pour but de m'initier a l'objet en PHP 5.
Parait il que la POO est superbement bien géré dans ce langage.
Cela fais une semaine que je parcours google dans tout les sens a la recherche de tutos, j'en ai de bon, mais pas assez détaillé ou trop technique pour bien comprendre.
 
J'aimerai creer un objet, une classe, des methodes. Par des exemples tout con, qui servent absolument a rien, mais qui pourrai me montrer les fondements de la POO.
 
Merci de m'apporter vos contributions :-)

Reply

Marsh Posté le 29-05-2006 à 11:35:26   

Reply

Marsh Posté le 29-05-2006 à 11:42:04    

stagiux a écrit :

Cela fais une semaine que je parcours google dans tout les sens a la recherche de tutos, j'en ai de bon, mais pas assez détaillé ou trop technique pour bien comprendre.


Je trouve la doc assez bien faite à ce sujet, avec des exemples et tout: http://fr3.php.net/zend-engine-2.php
Qu'est ce qui te manque(rait) encore?
Et si tu cherches un "cours" avec des exemples, prends n'importe quel cours de POO sur le net ( en n'importe quel langage) et essaye de le faire en php...
 
 

stagiux a écrit :

Parait il que la POO est superbement bien géré dans ce langage.


c'est vrai que c'est superbe ...
 
edit:
Tiens y'a un tut pas mal sur zend: http://www.zend.com/zend/tut/class [...] 933&view=1


Message édité par anapajari le 29-05-2006 à 11:46:51
Reply

Marsh Posté le 29-05-2006 à 11:48:36    

merci d'avoir répondu.
Par exemple, j'ai trouvé ca :  
http://www.vulgarisation-informatique.com/classes.php
ca m'a l'air tout simple, mais j'ai du mal avec le concept objet.
 
Voila ce que j'en ai compris dans le fond :
 

Citation :

Objet : Un objet contient différentes propriétés. Tout peut être objet, et peut contenir des objets. Plus simplement, si il existe un objet "humain", il contiendra les objets suivants : "tete", "bras", "jambes" ... L'objet "bras" pourra lui même contenir les objets "main", "coude" ... et ainsi de suite, jusqu'à obtenir un objet totalement paramétrable, en éditant ses propriétés. Ainsi, on pourrait placer la valeur "brun", à la propriété "couleur" de l'objet "cheveux".  
Classe : Une classe est un ensemble d'objets.  
Méthode : Une méthode est une instruction donnée à un objet.  
La POO a pour but de faire gagner du temps au développeur, de faciliter la maintenance des programmes, de favoriser la portabilité des pages. Lorsque vous créez une classe, vous l'appelez depuis plusieurs pages. Ainsi, lorsque vous avez une correction à apporter, elle le sera sur toutes les pages l'utilisant.Economie importante de temps.


 
J'ai effectué un reel travail de recherche, mais je bloque enormement sur la forme.
peut tu par exemple me detailler clairement le tuto sur le lien si ca ne te dérange pas ?
 
Edit : Misericorde ! c'est de l'anglaisien  :sweat:

Message cité 1 fois
Message édité par stagiux le 29-05-2006 à 11:49:54
Reply

Marsh Posté le 29-05-2006 à 11:59:08    

stagiux a écrit :

J'ai pour but de m'initier a l'objet en PHP 5.


En fait tu veux t'initier à l'objet en php5 et non t'initier à l'objet en php5 c'est ça?
Si tu dois débuter l'objet je te conseille FORTEMENT de le faire dans un autre langage que php, mais ça reste un point de vue personnel.
 
 

stagiux a écrit :

merci d'avoir répondu.
Par exemple, j'ai trouvé ca :  
http://www.vulgarisation-informatique.com/classes.php
ca m'a l'air tout simple, mais j'ai du mal avec le concept objet.


Avant de chercher à implémenter des exemples, essaye de comprendre le concept sinon effectivement tu risques d'avoir du mal...
 

stagiux a écrit :

Edit : Misericorde ! c'est de l'anglaisien  :sweat:


Comme 90% de la doc dans le monde des nains formaticiens [:spamafote]
 
Sinon un exemple "classique" d'implémentation en objet c'est un "cours" que tu peux par exemple décrire comme etant:
- une matière
- un horaire
- un professeur, qui est une personne, qui enseigne dans une ou plusieurs matières
- une classe, qui est composée d'élèves, qui sont des personnes


Message édité par anapajari le 29-05-2006 à 12:00:39
Reply

Marsh Posté le 29-05-2006 à 12:12:58    

ca fais depuis lundi dernier que j'arpente tout les sites traitant sur la POO en PHP5.  
J'ai jamais fais de POO, et j'en ai besoin dans le cadre d'un stage ou ils bossent avec le langage PHP5 exclusivement.
D'ou mon interet pour ce langage precisement. Je l'aborderai plus tard en C#.
Si jamais tu cherches quelque site d'explication a ce propos j'en ai relevé une bonne 15aines en Fr...
Pour ceux qui ont les notions ca doit rouler tout seul...
 

Code :
  1. <?php
  2. class ma_classe
  3. {
  4. //Déclaration des variables
  5. public $variable1;
  6. private $variable2;
  7. protected $variable3;
  8. /*j'ai bien capté ce qu'était public private et protected*/
  9. public function __construct()
  10. {
  11. $this->variable1='localhost';
  12. $this->variable2='autre_valeur';
  13. $this->variable3=array();
  14. }
  15. /* $this -> ca j'ai pas capté... c'est comme une structure de données ? */
  16. private function autre_fonction()
  17. {
  18. return 'ok';
  19. }
  20. }
  21. ?>


Citation :


Instance d'une classe :
Après avoir déclaré la classe, vous devez l'instancier à l'aide de la syntaxe suivante :
 
$variable = new ma_classe;
 
$variable12 = new ma_classe($argument1,$argument2); //Si votre constructeur comporte des arguments, placez-les comme ceci


 
En fait il utilise la classe comme moi je le ferai avec une fonction ? C'est quoi l'interet alors ?  A quoi sert ce qu'il passe ($argument1, $argument2)
 
 
 
 
 
 
 

Reply

Marsh Posté le 29-05-2006 à 13:24:30    

stagiux a écrit :

ca fais depuis lundi dernier que j'arpente tout les sites traitant sur la POO en PHP5.  
J'ai jamais fais de POO, et j'en ai besoin dans le cadre d'un stage ou ils bossent avec le langage PHP5 exclusivement.


C'est bien ce que je te dis, commence par comprendre la "théorie" de l'objet avant de chercher à l'implémenter en php...  

stagiux a écrit :

/* $this -> ca j'ai pas capté... c'est comme une structure de données ? */


nan pas la, this c'est ton objet "courant"
 

stagiux a écrit :

En fait il utilise la classe comme moi je le ferai avec une fonction ? C'est quoi l'interet alors ?  A quoi sert ce qu'il passe ($argument1, $argument2)


[:mlc] relis ton exemple et ce que tu semblais avoir compris de la POO!

Reply

Marsh Posté le 29-05-2006 à 13:54:34    

peu importe le langage, il semble que ce soit la notion "d'objet" qui soit nouvel pour toi, et c'est la dessus que tu doit porter tes efforts à mon avis.
Le reste n'est que de la syntaxe...
 
Jette un oeil là dessu, et navigue vers les différent liens, ça va peut être t'aider à apréhender les notions nouvelles:
http://www.commentcamarche.net/uml/umlintro.php3
http://www.commentcamarche.net/poo/poointro.php3


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Marsh Posté le 29-05-2006 à 14:05:46    

:jap: merci vais voir ca.  
C'est en effet la notion d'objet qui est nouvelle. j'ai deja un peu touché en PHP, VB et C# mais jamais vu l'objet...

Reply

Marsh Posté le 29-05-2006 à 14:32:55    

Citation :

[:mlc] relis ton exemple et ce que tu semblais avoir compris de la POO!


 
Avec mes mots et ce que j'ai compris :  
 
$variable = new ma_classe;
 
$Variable contiendra des "sous variable" variable1, variable2 et variable3 (on peut acceder a $variable.variable1,2 ou 3 selon que les propriété sont public private ou protected)
 
$variable12 = new ma_classe($argument1,$argument2)
les 2 premieres "sous variable" prendront les valeurs ($argument1,$argument2)
 
that's right ?

Message cité 1 fois
Message édité par stagiux le 29-05-2006 à 14:33:22
Reply

Marsh Posté le 29-05-2006 à 14:44:45    

stagiux a écrit :

Citation :

[:mlc] relis ton exemple et ce que tu semblais avoir compris de la POO!


 
Avec mes mots et ce que j'ai compris :  
 
$variable = new ma_classe;
 
$Variable contiendra des "sous variable" variable1, variable2 et variable3 (on peut acceder a $variable.variable1,2 ou 3 selon que les propriété sont public private ou protected)


 
En fait ce ne sont pas des "sous-variables" mais des attributs. Il peut aussi y avoir des fonctions membres.
 

Citation :


$variable12 = new ma_classe($argument1,$argument2)
les 2 premieres "sous variable" prendront les valeurs ($argument1,$argument2)
 
that's right ?


 
Nan, ça dépend du constructeur. Dans ton constructeur tu peux décider en effet d'affecter $argument1 à $variable1 mais tu peux aussi bien affecter $argument1 à $variable2...
 

Reply

Marsh Posté le 29-05-2006 à 14:44:45   

Reply

Marsh Posté le 29-05-2006 à 14:44:48    

pour la 2eme partie, ça implique que tu ai une méthode qui porte le meme nom que ta classe (on apelle ça un constructeur), et que dans le code de cette méthode tu es écrit un truc du genre:
$this->variable1 = $argument1;
$this->variable2 = $argument2;
...etc...
 
edit: grilled   :pfff:


Message édité par Xav_ le 29-05-2006 à 14:45:26

---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Marsh Posté le 29-05-2006 à 15:29:00    

okok merci.
Un exemple tiré du journal du net developpeur est assez explicite :
 

Code :
  1. <?php
  2.         class Personne
  3.         {
  4.                public $nom;
  5.                public $metier;
  6.                private $distance;
  7.                private $direction;
  8.                function __tostring()
  9.                         {
  10.                          return "Cette classe permet de définir et manipuler une personne.<br/>";
  11.                         }
  12.               function __construct($nom, $metier, $distance=0, $direction=0)
  13.                         {
  14.                             $this->nom = $nom;
  15.                             $this->metier = $metier;
  16.                             $this->distance = $distance;
  17.                             $this->direction = $direction;
  18.                         }
  19.                function arreter()
  20.                         {
  21.                             echo "$this->nom a arrêté toute activité en cours.<br/>";
  22.                         }
  23.                function marcher($pas)
  24.                         {
  25.                              $this->distance += $pas;
  26.                              echo "$this->nom avance de $pas pas.<br/>";
  27.                         }
  28.                function tourne($degres)
  29.                         {
  30.                              $this->direction += $degres;
  31.                              echo "$this->nom a tourné de $degres degré(s).<br/>";
  32.                         }
  33.                function etat()
  34.                         {
  35.                         echo "Le $this->metier $this->nom a avancé de $this->distance pas depuis le début, il fait maintenant face au degré     $this->direction.<br/>";
  36.                         }
  37.         }
  38. $xavier = new Personne('Xavier', 'rédacteur', 0, 27);
  39. $xavier->etat();
  40. $xavier->marcher(50);
  41. $xavier->tourne(-90);
  42. $xavier->arreter(2);
  43. $xavier->etat();
  44. ?>


 
Si ca c'est de la POO, alors j'ai compris ce que c'était !

Reply

Marsh Posté le 29-05-2006 à 15:34:32    

stagiux a écrit :

okok merci.
Si ca c'est de la POO, alors j'ai compris ce que c'était !


 
Dans un premier temps il faut assimiler la technique. C'est ce que tu fais :)
 
Mais après il faut aussi aborder les problèmes en pensant POO. Là tu pourras dire que tu fais vraiment de la POO

Reply

Marsh Posté le 29-05-2006 à 16:34:50    

Quoi que ....  :heink:  
 

Citation :


$xavier = new Personne('Xavier', 'rédacteur', 0, 27);
 


 
Ou ces données sont elles récupérés  ?
 
ICI ?

Citation :


              public $nom;
 
              public $metier;
 
              private $distance;

              private $direction;


 
ou ici :  

Citation :

function __construct($nom, $metier, $distance=0, $direction=0)


Message édité par stagiux le 29-05-2006 à 16:35:34
Reply

Marsh Posté le 29-05-2006 à 20:53:15    

dans le 2e cas ce sont les valeurs par défaut qui seront données à distance et direction si tu ne passe que 2 paramètres au constructeur
 
ex: new Personne("Xavier","Rédacteur" )
 
enfin je crois [:prodigy]

Reply

Marsh Posté le 29-05-2006 à 21:47:52    

stagiux a écrit :

Parait il que la POO est superbement bien géré dans ce langage.


[:rofl]

Reply

Marsh Posté le 30-05-2006 à 04:46:13    

salut
comme toi je suis noob en php et j ai appris pas mal sur ce tuto "classes et objets" que je trouve assez clair
 
il m a pemis de me creer une classe template assez rapidement (alors que la doc sur php.net est toute pourrie)

Reply

Marsh Posté le 30-05-2006 à 09:31:31    


 
 
Pourquoi ce smiley ?
Moi j'y connais pas grand chose mais nombreux sont les sites vantant le modèle objet de PHP5...

Reply

Marsh Posté le 30-05-2006 à 09:32:25    

mIRROR a écrit :

salut
comme toi je suis noob en php et j ai appris pas mal sur ce tuto "classes et objets" que je trouve assez clair
 
il m a pemis de me creer une classe template assez rapidement (alors que la doc sur php.net est toute pourrie)


 
Merci vais voir ca :jap:
Si tu veut des tutos j'en ai trouvé quelques un pas mal...


Message édité par stagiux le 30-05-2006 à 09:32:54
Reply

Marsh Posté le 30-05-2006 à 10:16:26    

stagiux a écrit :

Pourquoi ce smiley ?
Moi j'y connais pas grand chose mais nombreux sont les sites vantant le modèle objet de PHP5...


Parce que le modèle objet de PHP n'est franchement pas terrible (ils ont plus ou moins repris le modèle de java en pire), n'utilise pas les potentialités d'un langage dynamiquement typé, est généralement mal foutu et n'a aucune originalité ni aucun intérêt.
 
Un site vantant le modèle objet PHP est un mauvais site [:spamafote]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 30-05-2006 à 10:45:00    

masklinn a écrit :

Parce que le modèle objet de PHP n'est franchement pas terrible (ils ont plus ou moins repris le modèle de java en pire), n'utilise pas les potentialités d'un langage dynamiquement typé, est généralement mal foutu et n'a aucune originalité ni aucun intérêt.
 
Un site vantant le modèle objet PHP est un mauvais site [:spamafote]


 
Loin de moi l'idée de debattre avec toi sur un sujet que je ne connais pas mais tu semble parler de PHP en général la.

Citation :


Origine
De l'aveux même de ses concepteurs, le modèle objet de PHP3 (légèrement améliorée dans PHP4) était plus une implémentation rapide pour répondre à une demande immédiate, qu'un modèle pensé et adapté à la POO moderne. La gestion des objets de PHP4 était suffisante mais pas idéale, et représente l'un des grands défauts de cette version du langage.
 
C'est pourquoi l'un des premiers buts du projet menant à PHP5 fut de revoir entièrement ce modèle objet - tout en restant compatible avec les habitudes des développeurs, et les innombrables scripts déjà créés. En passant, le coeur du langage (le Zend Engine) profite d'une mise à jour complète : les développeurs disposent désormais d'un PHP plus complet, plus rapide et mieux pensé que ses prédécesseurs...
 
Source: http://developpeur.journaldunet.co [...] t-1a.shtml


 
Voila ! je ferme la parenthèse :p
 
J'ai un petit souci sur un script d'upload de fichier...
J'ai 2 fichiers : Test.php - > forumaire dont voici le code :  
 
 

Code :
  1. <?php
  2. include("testclass1.php" );
  3. $myFile=isset($_FILES['myFile'])?$_FILES['myFile']:null;
  4.     if ($myFile!=null) {
  5.     //    instanciation de la classe
  6.     $myUpload=new myUpload();
  7.     //    appel des méthodes publiques pour le paramétrage de l'upload
  8.     //    types de fichiers acceptées
  9.     $myUpload->addFileType("application/x-zip-compressed" );
  10.     $myUpload->addFileType("application/vnd.ms-excel" );
  11.     //    je déclare le fichier à envoyer
  12.     $myUpload->setFile($myFile);
  13.     //    taille maximale du fichier en octets
  14.     //    je la place à 1mo
  15.     $myUpload->setMaxSize(1000000);
  16.     //    dossier de destination du fichier
  17.     $myUpload->setMyDir("fichiers/" );
  18.     //    je crée le nom du fichier
  19.     $myUpload->setMyName("fichier_envoye" );
  20.     //    j'exécute l'upload
  21.     $myUpload->myUpload();
  22.     }
  23. ?>
  24. <form method="post" enctype="multipart/form-data" >
  25.    Mon fichier : <input type="file" name="myFile" id="myFile" /> <br />
  26.    <input type="submit" value="envoyer" />
  27. </form>


 
 
Et testclass1.php qui contient la classe :  
 

Code :
  1. <?
  2. class myUpload {
  3. // pour la coloration syntaxique d'asp-php
  4.     /*~*~*~*~*~*~*~*~*~*~*/
  5.     /*  1. propriétés    */
  6.     /*~*~*~*~*~*~*~*~*~*~*/
  7.     /**
  8.     * @var (String)
  9.     * @desc Fichier envoyé par formulaire
  10.     */
  11.     private $myFile;
  12.     /**
  13.     * @var (String)
  14.     * @desc Dossier dans lequel seront stockés les fichiers envoyés
  15.     */
  16.     private $myDir;
  17.     /**
  18.     * @var (Integer)
  19.     * @desc Taille maximale acceptée pour un fichier envoyé
  20.     */
  21.     private $myMaxSize;
  22.     /**
  23.     * @var (Array)
  24.     * @desc Types de fichiers envoyés acceptés
  25.     */
  26.     private $myTypes;
  27.     /**
  28.     * @var (string)
  29.     * @desc Nom du fichier après copie
  30.     */
  31.     private $myName;
  32. /*~*~*~*~*~*~*~*~*~*~*/
  33. /*  2. méthodes      */
  34. /*~*~*~*~*~*~*~*~*~*~*/
  35.     public function __construct() {
  36.     //    $this->myTypes est un tableau à deux dimensions.
  37.     //    on le déclare ainsi
  38.     $this->myTypes=array();
  39.     //    on place la valeur de myName à null
  40.     $this->myName=null;
  41.     } 
  42.     // pour la coloration syntaxique d'asp-php
  43.     /*~*~*~*~*~*~*~*~*~*~*~*~*~*/
  44.     /*  2.1 méthodes privées   */
  45.     /*~*~*~*~*~*~*~*~*~*~*~*~*~*/
  46.     /**
  47.     * Vérifie l'existence d'un dossier
  48.     *  
  49.     * <p>Teste l'existence d'un dossier,
  50.     * renvoie une erreur si le dossier est introuvable</p>
  51.     *  
  52.     * @name myUpload::testDir()
  53.     * @param $dir
  54.     * @return string
  55.     */
  56.     private function testDir($dir) {
  57.         //    la fonction is_dir teste l'existence d'un dossier
  58.         if (is_dir($dir)) {
  59.         //    si le dossier existe, j'applique la valeur $dir
  60.         //    à la propriété $this->dir
  61.         //    lorsque nous lanceront la copie de fichier,  
  62.         //    nous rappelleront la propriété $this->dir
  63.         $myDir=$dir;
  64.         }
  65.         else {
  66.         //    si il y a une erreur lors du paramétrage,  
  67.         //    je renvoie une valeur nulle
  68.         $myDir=null;
  69.         }
  70.     //    $myDir est la valeur retournée (string)
  71.     return $myDir;
  72.     }
  73.     /*
  74.     * Renvoie la taille du fichier
  75.     *  
  76.     * <p>Renvoie la taille du fichier en octets</p>
  77.     *  
  78.     * @name myUpload::fileSizer()
  79.     * @param $file
  80.     * @return int
  81.     */
  82.     private function fileSizer($file) {
  83.     return $file['size'];
  84.        }
  85.     /*
  86.     * Renvoie la taille du fichier
  87.     *  
  88.     * <p>Renvoie la taille du fichier en octets</p>
  89.     *  
  90.     * @name myUpload::fileType()
  91.     * @param $file
  92.     * @return string
  93.     */
  94.       private function fileType($file) {
  95.       return $file['type'];
  96.    }
  97.     /*
  98.     * Exécute la copie du fichier
  99.     *  
  100.     * <p>Copie le fichier dans le dossier spécifié</p>
  101.     *  
  102.     * @name myUpload::fileSizer()
  103.     * @param $dir
  104.     * @return voix
  105.     */
  106.     private function myCopy($file, $dir, $nom) {
  107.     //    aucune vérification à faire, puisque nos contrôles
  108.     //    ont été effectués en amont
  109.     if(!copy($file['tmp_name'], $dir."/".$nom));
  110.     {
  111.     echo "copie de fichier impossible. Je sais pas pourquoi :-/";
  112.     }
  113.     }
  114.     /*~*~*~*~*~*~*~*~*~*~*~*~*~*/
  115.     /*  2.1 méthodes publiques */
  116.     /*~*~*~*~*~*~*~*~*~*~*~*~*~*/
  117.     /*
  118.     * Déclare le fichier posté
  119.     *  
  120.     * <p>Déclaration du fichier posté. </p>
  121.     *  
  122.     * @name myUpload::setFile()
  123.     * @param $file
  124.     * @return string
  125.     */
  126.     public function setFile($file) {
  127.         //    on teste que le fichier envoyé est bien nommé
  128.         //    s'il n'est pas nommé, cela signifie qu'il y a
  129.         //    soit une erreur dans le formulaire,  
  130.         //    soit une erreur dans l'instanciation
  131.         if ($file['tmp_name']!="" ) {
  132.         $myFile=$file;
  133.         }
  134.         else {
  135.         //    si le fichier est en erreur, on renvoie un null
  136.         $myFile=null;
  137.         }
  138.     $this->myFile=$myFile;
  139.     }
  140.     /**
  141.     * Déclare le nom du fichier à copier
  142.     *  
  143.     * <p>Le nom du fichier après copie. </p>
  144.     *  
  145.     * @name myUpload::setName()
  146.     * @param $name
  147.     * @return string
  148.     */
  149.     public function setMyName($name) {
  150.     $this->myName=$name;
  151.     }
  152.     /**
  153.     * Déclare un nouveau type de fichier accepté
  154.     *  
  155.     * <p>Liste les types de fichiers acceptés.</p>
  156.     *  
  157.     * @name myUpload::addFileType()
  158.     * @param $typeFile
  159.     * @return void
  160.     */
  161.     public function addFileType($typeFile) {
  162.     //    on déclare un petit compteur
  163.     //    qui servira à compter le nombre
  164.     //    de type de fichiers acceptés
  165.     $i=0;
  166.         //    J'ai besoin de connaître le nombre de fichiers
  167.         //    acceptés lors de l'instanciation. Pour ça, je
  168.         //    boucle sur la propriété myTypes (array)
  169.         //    et j'incrémente le compteur
  170.         foreach($this->myTypes as $key) {
  171.         $i++;
  172.         }
  173.     //    on ajoute comme valeur $typeFile à la propriété $this->myTypes
  174.     //    Comme la propriété myTypes est un tableau (array), on incrémente
  175.     //    $i de 1 pour ne pas écraser la valeur précédente
  176.     $this->myTypes[$i]=$typeFile;
  177.     //    j'ai appliqué la valeur directement à ma propriété.  
  178.     //    je ne retourne donc directement rien
  179.     }
  180.     /**
  181.     * Taille maximale de fichier accepté
  182.     *  
  183.     * <p>Déclare la taille maximale en Octets acceptée par
  184.     * le programme. Si le fichier envoyé est trop grand, on  
  185.     * renvoie une valeur nulle.</p>
  186.     *  
  187.     * @name myUpload::setMaxSize()
  188.     * @param $typeFile
  189.     * @return void
  190.     */
  191.     public function setMaxSize($max) {
  192.         //    je vérifie que la valeur de $max est bien
  193.         //    un nombre entier
  194.         if (is_integer($max)) {
  195.         $myMax=$max;
  196.         }
  197.         else {
  198.         //    si une erreur est détectée, on renvoie une valeur null
  199.         $myMax=null;
  200.         }
  201.     $this->myMaxSize=$myMax;
  202.     }
  203.     /**
  204.     * Déclaration du dossier cible
  205.     *  
  206.     * <p>Déclare la taille maximale en Octets acceptée par
  207.     * le programme. Si le fichier envoyé est trop grand, on  
  208.     * renvoie une valeur nulle.</p>
  209.     *  
  210.     * @name myUpload::setMyDir()
  211.     * @param $dir
  212.     * @return void
  213.     */
  214.     public function setMyDir($dir) {
  215.     //    j'appelle la méthode de test du dossier
  216.     //    que j'ai crée plus tôt.  
  217.     //    le nom de la variable n'a aucune  
  218.     //    importance.  
  219.     //    seul compte le nom de la propriété ($this->myDir)
  220.     $myDir=$this->testDir($dir);
  221.     $this->myDir=$myDir;
  222.     if ($this->myDir==null)
  223.     {echo "repertoire vide";}
  224.     }
  225.     public function myUpload() {
  226.     //    on teste les propriétés une par une
  227.     //    $this->myFile
  228.     if ($this->myFile!=null) {
  229.     echo "fichier detecté : OK \n  ";
  230.         //    $this->myMaxSize
  231.         if ($this->myMaxSize!=null) {
  232.             //    $this->myDir
  233.             if ($this->myDir!=null) {
  234.                 //    $this->myName
  235.                 echo "Repertoire detecté $this->myDir \n  ";
  236.                 if ($this->myName!=null) {
  237.                     //    $this->myTypes
  238.                     echo "nom de fichier : $this->myName \n  ";
  239.                     if ($this->myTypes[0]!=null) {
  240.                     //    je récupère maintenant la taille du fichier
  241.                     $mySize=$this->fileSizer($this->myFile);
  242.                         //    je la compare à la taille maximale acceptée
  243.                         if ($mySize<=$this->myMaxSize) {
  244.                         //    je récupère le type de fichier
  245.                         $fileType=$this->fileType($this->myFile);
  246.                             //    et je le compare à la liste des types acceptés
  247.                             foreach ($this->myTypes as $key) {
  248.                             //    puis exécution de l'upload
  249.                             if ($key==$fileType) {
  250.                             $this->myCopy($this->myFile, $this->myDir, $this->myName);
  251.                             }
  252.                             }
  253.                         }
  254.                         else {
  255.                         echo ("Le fichier est trop gros" );
  256.                         }
  257.                     }
  258.                     else {
  259.                     echo ("Vous devez specifier les types de fichiers acceptes." );
  260.                     }
  261.                 }
  262.                 else {
  263.                 echo ("Vous devez specifier un nom pour le fichier." );
  264.                 }
  265.             }
  266.             else {
  267.             echo ("Le dossier de destination n'est pas bon. Veuillez corriger." );
  268.             }
  269.         }
  270.         else {
  271.         echo ("La taille maximale n'a pas ete specifiee, veuillez corriger." );
  272.         }
  273.     }
  274.     else {
  275.     echo ("Le fichier n'a pas ete reçu." );
  276.     }
  277.     }
  278.     /**
  279.     * Destructeur
  280.     *  
  281.     * <p>Destruction de l'instance de classe</p>
  282.     *  
  283.     * @name myUpload::__destruct()
  284.     * @return void
  285.     */
  286.     public function __destruct(){
  287.     }
  288. }
  289. ?>


 
Malgrès tout les controles, quand je test, il ne me retourne AUCUNE erreur. La page revient simplement au formulaire vierge. pourtant il rentre dans les 'if' (cf les 'echo' qui me donne le nom de fichier etc..)
 
Tout semblerai correct sauf que : Aucun fichier n'est uploadé dans racine/fichiers/
 
Comprend pas pourquoi.

Message cité 1 fois
Message édité par stagiux le 30-05-2006 à 10:46:15
Reply

Marsh Posté le 30-05-2006 à 10:52:33    

Pour apprendre l'objet l'UML c'est pas mal sinon :o

Reply

Marsh Posté le 30-05-2006 à 10:52:35    

stagiux a écrit :

Loin de moi l'idée de debattre avec toi sur un sujet que je ne connais pas mais tu semble parler de PHP en général la.


Je parlais bien du modèle objet de PHP5


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 30-05-2006 à 11:01:53    

masklinn a écrit :

Je parlais bien du modèle objet de PHP5


  :whistle:  
 
 
Quelqu'un pour m'aider sinon ?

Reply

Marsh Posté le 30-05-2006 à 11:32:52    

stagiux a écrit :

:whistle:  
 
 
Quelqu'un pour m'aider sinon ?


Oui.
 
Ta classe est bourrée de complexités inutiles, les noms n'ont pas de sens (et pourquoi ya des "my" partout [:mlc]), les commentaires n'aident pas (il y en a trop, et ils sont mauvais), t'as plein de getters/setters inutiles (pourquoi tu fais tes checks dans myUpload alors que tu pourrais les faire dans les setters d'abord, c'est à ça qu'ils servent [:mlc]).
 
Et la méthode myCopy, j'veux pas être méchant mais pour servir à rien elle sert à rien [:pingouino]
 
Et faudrait probablement utiliser move_uploaded_file plutôt que copy.
 
Effectue un développement incrémental: crées une classe d'upload simple avec une interface genre

Code :
  1. class Upload {
  2.    public $destination_dir;
  3.    public $destination_name;
  4.    private $temp_name;
  5.    private $type;
  6.  
  7.    /**
  8.        Fournir un fichier $_FILES au constructeur
  9.    */
  10.    public function __construct($file);
  11.    public function execute();
  12. }


tu files ton fichier (le $_FILES['userfile']) au constructeur, tu set $destination_dir à la mano (aucun intérêt de le wrapper pour le moment) (le constructeur set $destination_name sur $file['name']), execute vérifie simplement si $destination_dir existe et est valide et effectue le déplacement de fichier.
 
Ensuite tu peux ajouter des fonctionalités, genre le filtrage sur type (avec l'exception qui va bien), un getter/setter pour le $destination_dir qui vérifie si elle est valide, un getter et un setter pour $destination_name (ou pas, ya rien à vérifier, sauf ptet être sûr que le fichier n'existe pas déjà si besoin), un setter pour le $max_size, mais tu les ajoutes petit à petit, histoire de pas avoir d'un coup une classe monstrueuse à débugger.
 
Comme ça si ça marche pas du sais que ça vient de ton dernier changement.


Message édité par masklinn le 30-05-2006 à 11:37:56

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 30-05-2006 à 12:04:31    

[:athome] mais ....  [:ahcarien]  
 
En faite le code je l'ai chopé sur un tuto et j'essaye de le comprendre... et la j'voyais pas pourquoi il ne marchais pas.
Mais je vais essayer de refaire le truc moi meme en suivant tes instructions.
 
Merci d'avoir répondu !
 
 
EDIT: d'ailleur voila ou j'ai trouvé ce tuto si il y en a que ca peut brancher... http://www.asp-php.net/tutorial/as [...] php?page=1

Message cité 1 fois
Message édité par stagiux le 30-05-2006 à 12:06:34
Reply

Marsh Posté le 30-05-2006 à 12:14:27    

stagiux a écrit :

d'ailleur voila ou j'ai trouvé ce tuto si il y en a que ca peut brancher... http://www.asp-php.net/tutorial/as [...] php?page=1


[:pingouino]
 
Berk [:pingouino]
 
Tiens, je te file la première étape d'un script d'upload basé sur une classe. C'est tout simple, ya quasiment pas d'error handling ou de fonctionalités (en l'état la classe n'a pas grand intérêt en fait), mais bon ça peut te permettre de démarrer, commences par essayer de comprendre comment ça marche (ça devrait être facile), puis vois en quoi tu pourrais l'améliorer de manière utile (le but étant principalement de simplifier et clarifier le code présent dans test_upload.php)
 
/modules/upload.php

Code :
  1. <?php
  2.    class Upload {
  3.        public $temp_name;
  4.        public $destination_name;
  5.        public $max_size;
  6.        public $type;
  7.        public $destination_folder=null;
  8.  
  9.        public function __construct($file) {
  10.            $this->destination_name = $file['name'];
  11.            $this->max_size = $file['size'];
  12.            $this->type = $file['type'];
  13.            $this->temp_name = $file['tmp_name'];
  14.        }
  15.  
  16.        public function execute() {
  17.            if($this->destination_folder === null)
  18.                throw new Exception('No destination folder set');
  19.            if(!move_uploaded_file($this->temp_name, $this->destination_folder."/".$this->destination_name))
  20.                throw new Exception("Failed upload: server error" );
  21.        }
  22.    }
  23. ?>


/test_upload.php

Code :
  1. <?php
  2.    include('modules/upload.php');
  3.    if(isset($_FILES) && isset($_FILES['userfile'])) {
  4.        $upload = new Upload($_FILES['userfile']);
  5.        $upload->destination_folder="/wamp/www/files";
  6.        $upload->destination_name="uploaded_file";
  7.        $upload->execute();
  8.    }
  9.  
  10. ?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  11. <html>
  12.    <head>
  13.        <title>Test upload</title>
  14.    <head>
  15.    <body>
  16.        <form enctype="multipart/form-data" action="" method="post">
  17.            <fieldset>
  18.                <legend>Upload your file</legend>
  19.                <input name="userfile" type="file" /> <input type="submit" value="Envoyer">
  20.            </fieldset>
  21.        </form>
  22.        <?php
  23.            if(isset($upload)) echo "<p>Upload success to ".$upload->destination_folder."/".$upload->destination_name."</p>"
  24.        ?>
  25.    </body>
  26. </html>


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 30-05-2006 à 12:21:06    


 
Bah c'est [:google]  :(  
 
merci pour le code, vais tester ca cet après midi.


Message édité par stagiux le 30-05-2006 à 14:59:12
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed