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

Langage PHP Discussion :

Formulaire upload de fichier


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 9
    Points : 9
    Points
    9
    Par défaut Formulaire upload de fichier
    Bonjour à tous.

    C'est mon premier post sur ce forum et j'espère vous expliquer au mieux mon soucis.

    J'ai un formulaire d'upload de fichier qui est fonctionnel, mais en voulant l'améliorer je tombe sur un petit problème et je ne vois pas du tout d'où cela peut venir. Voici le code du formulaire :

    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
    <div id="form">
        <form enctype="multipart/form-data" action="_upload.php" method="post">
            <input type="hidden" name="MAX_FILE_SIZE" value="1000000000000" />
            <input id="fileBtn" type="file" name="monfichier"/><br><br><br><br>
            <?php:
            afficheSelect(new DirectoryIterator('/home/thibaud/Fichiers/'. $_SESSION['login'] .''), 'dossierSauvegarde');
            ?>
            <input src="pictures/sauvegarder.jpeg" type="image" value="submit"/>
        </form>
    </div>
     
    <a id="btnRetourUpload" href="accueil.php"><img src="pictures/fleche-gauche.png"></a>
     
    <?php
     
    function afficheSelect($it, $name) {
     
        echo "<select name=\"$name\">\n";
     
        for (; $it->valid(); $it->next()) {
     
            if ($it->isDir() && !$it->isDot())
                printf("\t<option value=\"%s\">%s</option>\n", $it->getFilename(), $it->getFilename());
        }
     
        echo "</select>\n";
    }
    ?>
    L'utilisateur devrait choisir un dossier où sauvegarder son fichier grâce à un menu déroulant. Or à chaque fois il y a echec de l'upload. Voici le code de l'upload :

    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
    $date = date("d-m-Y");
            $heure = date("H:i");
            $dossier = '/home/thibaud/Fichiers/' . $_SESSION['login'] . '/' . $_POST['dossierSauvegarde'] . '/';
            $fichier = basename($_FILES['monfichier']['name']);
            $taille_maxi = 1000000000000;
            $taille = filesize($_FILES['monfichier']['tmp_name']);
     
            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 'Upload effectué avec succès !';
                    $base = mysql_connect('localhost', 'root', 'mon_mot_de_passe');
                    mysql_select_db('tgirard.fr.nf', $base);
     
                    $sql2 = 'SELECT id FROM user WHERE login="' . $_SESSION['login'] . '"';
                    $req2 = mysql_query($sql2) or die('Erreur SQL !<br />' . $sql2 . '<br />' . mysql_error());
                    $data = mysql_fetch_array($req2);
                    $id = $data['id'];
                    $sql = 'INSERT INTO historical_data (user_id, nom_fichier, date, heure) VALUES(' . $id . ', "' . $_FILES['monfichier']['name'] . '", "' . $date . '", "' . $heure . '")';
                    $req = mysql_query($sql) or die('Erreur SQL !<br />' . $sql . '<br />' . mysql_error());
                    mysql_free_result($req);
                    mysql_close();
                } else {
                    echo 'Echec de l\'upload !<br>';
                }
            } else {
                echo $erreur;
            }
            ?>
    Pourtant en faisant un var_dump de la variable $dossier, le chemin est exact. J'espère avoir été clair et j'attend votre aide.

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Question bête : tu as bien un séparateur entre ton nom de dossier et ton nom de fichier ? genre pas un truc du genre mon_dossiermon_fichier à la place de mon_dossier/mon_fichier.
    A vérifier aussi : les droits en écriture du dossier de destination.

  3. #3
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $dossier = '/home/thibaud/Fichiers/' . $_SESSION['login'] . '/' . $_POST['dossierSauvegarde'] . '/';
    T'es pas dingue Tu vas te faire hacker ton site en .25 secondes chrono si tu fais ça. Tu dois impérativement valider la variable POST dossierSauvegarde pour t'assurer que c'est bien un chemin qu'on à permis à l'utilisateur de choisir.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    Oui je sais que mon code peut contenir des failles de sécurité. Je débute en PHP. Je vais corriger cela. En tout cas pour mon problème, il est résolu merci a vous et de vos conseils ! C'était bien un soucis de permissions !

  5. #5
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    pour être plus explicite sur les droits d'écritures des répertoires web, le mieux c'est de faire un chown <user>.www-data (ou apache suivant ta version, regarde dans /etc/group) et d'autoriser l'écriture pour le groupe.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ chown webadmin.www-data /var/www/project/upload
    $ chmod 660 /var/www/project/upload

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup encore. Est-il possible d'avoir une petite piste pour valider une superglobale ?

  7. #7
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Tout à fait, regarde donc les filtres, c'est ce qui existe de plus puissant en termes de validation / nettoyage de données en PHP (5.2 minimum requis).

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup je vais travailler dessus. Problème résolu

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

Discussions similaires

  1. [Upload] formulaire php avec upload de fichier
    Par achos dans le forum Langage
    Réponses: 5
    Dernier message: 15/10/2007, 15h14
  2. [ cURL ] Upload de fichiers sans formulaire
    Par FloMo dans le forum Linux
    Réponses: 0
    Dernier message: 24/07/2007, 11h17
  3. [Upload] upload de fichier sans formulaire
    Par gforce dans le forum Langage
    Réponses: 8
    Dernier message: 04/04/2007, 12h18
  4. formulaire + upload de fichier
    Par xave dans le forum ASP
    Réponses: 9
    Dernier message: 14/06/2006, 18h33
  5. [Upload] Upload de fichier par formulaire
    Par discogarden dans le forum Langage
    Réponses: 4
    Dernier message: 31/03/2006, 20h17

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