IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Uploadeur choix de répertoire [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut Uploadeur choix de répertoire
    Bonjour.

    j'ai fait un "uploadeur" qui inclus une option de suppression.
    Je clique sur le bouton update si je supprime ou si j'envoie
    selon le choix.

    Mais, je suis obligé de créer un fichier par répertoire.
    Et je veux faire pour avoir tout dans le même fichier.

    Donc.. ajouter un choix du répertoire d'où va aller le fichier.

    Selon ma structure du fichier, je ne vois pas comment je
    peux réaliser ça.

    J'ai besoin d'aide sur cela. Ça m'aiderait.

    Voici mon code et une image pour illustrer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    <?php
     
      $compte = "demo";
      $docpar = "document";
     
      $dossierfiles = '/home/public_html/'.$compte.'/'.$docpar.'/';
     
    	$target = $dossierfiles;
    	$weeds = array('.','..','.htaccess','.htpasswd');
    	$directories = array_diff(scandir($target), $weeds);
    ?>
     
    <b>/<?php echo $docpar; ?>/ : </b><br>
     
    <form method="POST"enctype="multipart/form-data">
    	<?php
    	foreach($directories as $value)
    	{
    	 if(is_file($target.$value))
    	 {
    		echo ' <input style="margin-top:2px;" type="checkbox" name="file[]" value="'.$value.'" /><a style="background-color:black;color:white;text-decoration:none;font-family:Verdana;font-size:0.6em;" href="/'.$docpar.'/'.$value.'">*'.$value.'*</a> | ';
    	 }
    	}
    	?>
      <br><br>
    	 <input type="hidden" name="MAX_FILE_SIZE" value="99000000">
    	 Fichier : <input type="file" name="monfichier">
    	 <button type="submit" name="submit">Update</button>
    </form>
     
    <?php
    // upload
     
    if(isset($_POST['submit'])) 
    {
    		if(!empty($_FILES['monfichier']))
    		{
    			$dossier = $dossierfiles;
    			$fichier = basename($_FILES['monfichier']['name']);
    			$taille_maxi = 99000000;
    			$taille = filesize($_FILES['monfichier']['tmp_name']);
    			$extensions = array('.png', '.gif', '.jpg', '.jpeg', '.rar', 'zip');
    			$extension = strrchr($_FILES['monfichier']['name'], '.');
    			if(!in_array($extension, $extensions))
    			{
            if(!isset($_POST['file']))
    				$erreur = 'Fichier acceptés: <b>.png .gif .jpg .jpeg. .rar .zip</b>';
    			}
    			if($taille>$taille_maxi)
    			{
    				$erreur = 'Le fichier est trop gros...';
    			}
    			if(!isset($erreur))
    			{
    				$fichier = strtr($fichier,
    				'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
    				'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
    				$fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
    				if(move_uploaded_file($_FILES['monfichier']['tmp_name'], $dossier . $fichier))
    				{
    						echo '<p>Upload effectué avec <b>succès</b> &nbsp; <a href="'.$_SERVER['PHP_SELF'].'">RELOAD</a> !</p>';
    				}
    				else
    				{
                if(!isset($_POST['file']))
    						echo '<p><b>Echec</b> de l\'upload !</p>';
    				}
    			}
    			else
    			{
    				echo '<p>'.$erreur.'</p>';
    			}
    		}
     
    		// suppression
     
    		foreach($_POST['file'] as $file) {
     
    				$dirinfile = $dossierfiles.$file;
     
    				if(isset($dirinfile)) {
    						if (unlink($dirinfile)) {
    								echo 'Fichier supprimé avec succès: <b>'.$file.'</b> &nbsp; <a href="'.$_SERVER['PHP_SELF'].'">RELOAD</a> <br />';
    						} else {
    								echo "Fichier non supprimé: <b>$file</b><br />";
    						}
    				}
    		}
    }
    ?>
     
    <p>ATTENTION:<br><b>Pour supprimer cocher ou choisir un fichier pour uploader.</b><p>
     
    <p><a href="../">Retour au /</a></p>
    Celui-ci est défini pour envoyer dans le répetoire /document/

    Mais, je dois aussi donner le choix pour envoyer dans le répertoire /partage/
    Images attachées Images attachées  
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  2. #2
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    D'abord, je ne vois vraiment pas le rapport avec MySQL, ton problème serait un pure problème de la gestion de fichiers.

    Mise à part cela, à mon sens tu fait absolument tout "from scrach", comme ça vient sens réelle structure, ça débouche sur un code peu lisible.
    Quand on fait des fonctionnalités un peu avancées comme ça il est bon de séparer les traitements pures et la partie pure interface, on y gagne énormément en clarté.
    C'est un conseil perso.

    Sauf erreur, il y a un problème dans le déroulement du code.
    On récupèrerait en 1er tous les fichiers pour les lister/afficher, et surtout de proposer de les supprimer.

    Si jamais il y a une suppression à faire, et bien le déroulement prévoit de le faire après avoir affiché les fichiers.
    Ce qui veut dire qu'on pourrait voir des fichiers qui en réalité n'existeraient plus.


    Ce n'est pas comme ça qu'il faudrait faire, mais l'inverse, il faut en 1er faire les opérations : Ajout, suppression, mise à jour (donc les traitements) et après s'occuper à récupérer les données pour les afficher.
    Les données seront obligatoirement les bonnes.

    Un autre facteur entre en jeu : Un éventuel actualisation du navigateur volontaire ou involontaire de l'internaute qui aura pour malheur de refaire la même opération, ce qui peu provoquer un bug.
    Pour éviter cela la technique la plus connue et de faire en 1er les opérations/traitements (ajout, etc ...) s'il y en a puis une fois terminé on actualise la page avec une redirection : un header().


    Mise à part tout cela, afin de simplifier ces opérations, peut être faudrait il éviter de faire plusieurs choses en même temps, comme ajouter un fichier et en supprimer.
    Faire par exemple un formulaire uniquement pour les suppressions et un autre formulaire (donc à part) pour l'ajout serait plus simple.
    Du coup il sera là aussi plus simple comme rajouter un champ de texte pour saisir le nom d'un répertoire pour en 1er le créer pour ensuite déposer le fichier dedans.

    Par ailleurs tu prévois des cases à cocher pour désigner les ou les fichiers à supprimer, mais à coté tu prévois des liens.
    Or, les liens sont théoriquement indépendant du formulaire, je ne voit pas trop leur utilités.
    Normalement c'est lors de la validation du formulaire où on obtiendra la liste des cases cochées, et c'est avec ça qu'il sera possible de faire les suppression.
    Pour cela il suffit de mettre le noms des fichiers comme valeurs.


    A mon sens il faudrait repartir presque à 0 pour refaire tout cela dans l'ordre.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  3. #3
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    Salut !

    séparer les traitements pures et la partie pure interface
    Quand je code, j'ai des difficultés à comprendre le principe et de l'appliquer.
    Je me souviens qu'on s'est déjà parlé de ça. S'il y avait un tutoriel qui me
    donnerais de l'information à ce sujet. Ça m'aiderait.

    J'avais besoin que l'affichage soit en haut pour l’existence des fichiers et
    de proposer de les effacer au besoins. Et afficher au bon endroit dans la
    page si le fichier est effacé ou pas ou autre informations.

    En premier, quand j'ai créé ce fichier, c'était en 2 fichiers en séparant
    la partie suppression de la partie upload. Mais, je trouvais que ça allait
    faire trop de fichiers si je dois faire pour plusieurs répertoires.

    Pour mysql, je croyait que c'était PHP/MYSQL Merci de m'en aviser.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  4. #4
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    S'il y avait un tutoriel qui me
    donnerais de l'information à ce sujet. Ça m'aiderait.
    Il n'y a pas de tutoriel, de plus comme tu le dis, je t'avais déjà donné de genre de structure.

    C'est pas si compliqué que ça, il n'y a pas besoin de 50 fichiers pour ça, 1 seul suffit, faut juste bien séparer les choses.

    C'est la compréhension de Php pure et dure qui te fais défaut.
    Mais aussi c'est de pouvoir définir un algorithme (un algo), c'est à dire le déroulement.
    Il te faut écrire le déroulement.

    Exemple :
    * traitements *
    1- SI (ajouter_image) ALORS ... traitement/ajout de cette image -> header()
    2- SI (supprimer_des_images) ALORS ... suppressions des images -> header()

    3- Récupération des images (sous entendu : ne sera pas récupérer

    * interface *
    - Affichage des images

    Certes cet exemple est simpliste (c'est loin d'être un algo), mais au moins on pose les étapes clés, le BABA.

    Après, on peu s'occuper à faire l'algo de chacune de ces étapes, de faire un peu plus détailler.


    Une structure de base pourrait se faire comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    <?php
    // Partie traitements
     
    $action = FALSE;
    if (isset($_POST['form_action'])) {
        $error = FALSE;
        $action = $_POST['form_action'];
     
        switch ($action) {
            case 'ajouter_image' :
                // Traitement pour ajouter une image
     
                if ($error == FALSE) {
                    // ... etc ...
                    header('Location: gestion_images.php');
                }
            break;
            case 'supprimer_images' :
                // Traitement pour supprimer des images (checkbox)
     
                if ($error == FALSE) {
                    // ... etc ...
                    header('Location: gestion_images.php');
                }
            break;
        }
    }
     
    // Récupération des images et les stocker dans un tableau
    // Parcourt du disque/répertoire
    $liste_images = array()
    // ... etc ...
     
    ?>
    <html>
    <head>
        <title>Gestion des images</title>
    </head>
    <body>
     
    <?php
    if (!empty($liste_images)) {
        // Formulaire pour la liste des images
        // Pour la suppression
    ?>
    <form action="gestion_images.php" method="post">
    <?php
        foreach($liste_images as $image) {
            // liste des checkbox
        }
    ?>
        <input type="hidden" name="form_action" value="supprimer_images" />
        <input type="submit" name="supprimer" value="Supprimer" />
    </form>
    <?php
    }
    ?>
     
     
    <form action="gestion_images.php" method="post">
        ... éléments pour ajouter une images ...
     
        <input type="hidden" name="form_action" value="ajouter_image" />
        <input type="submit" name="supprimer" value="Supprimer" />
    </form>
     
    </body>
    </html>
    Voilà grosso modo une structure.
    Le principe est donc d'abord de séparer les traitements et l'interface

    Puis un autre principe c'est de diviser 2 choses :
    - L'ajout d'une image (un formulaire pour ça)
    - La suppression d'une ou plusieurs images (un autre formulaire)
    Pour cela on s'aide en mettant explicitement l'action à effectuer dans les formulaires (ajout ou suppression)

    Du coup au niveau des traitements on pourra diviser ces 2 actions très différentes en 2 gros blocs en utilisant un switch/case (mais on pourrait le faire avec des if/elseif, c'est pareil)


    Rien t'oblige à adopter ce principe.
    Mais je dirais que ce serait un bon départ, en tout cas meilleurs que le code actuel.
    Essai de faire les choses étape par étape, évite de faire tout d'un seul coup.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  5. #5
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    Merci beaucoup.
    Je vais faire des essaies et raisonner l'exemple.
    à suivre...
    On oublie souvent la simplicité ou la base dans la vie: Maslow

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Archivage d'un classeur avec choix du répertoire d'archivage.
    Par Monfy29 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/07/2009, 18h00
  2. Automake choix du répertoire des .o
    Par Had dans le forum Linux
    Réponses: 2
    Dernier message: 03/07/2008, 10h55
  3. Réponses: 1
    Dernier message: 05/10/2007, 12h25
  4. Installation et choix de répertoire
    Par ABDOU71 dans le forum Installation, Déploiement et Sécurité
    Réponses: 3
    Dernier message: 15/09/2006, 10h27
  5. MFC Dialogue de Choix de répertoire
    Par rabobsky dans le forum MFC
    Réponses: 4
    Dernier message: 09/02/2006, 18h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo