Upload de fichiers dans une table Mysql

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Upload de fichiers dans une table Mysql

Re: Upload de fichiers dans une table Mysql

par damien01 » 10 avr. 2011, 00:14

Bonsoir,

J'ai enfin trouvé une solution pour empêcher que le code php soit exécuté dans un répertoire donné. Pour cela il faut créer un .htaccess dans lequel vous spécifiez ces lignes:

RemoveHandler .php .phtml .php3 .php4 .php5 .php6
RemoveType .php .phtml .php3 .php4 .php5 .php6

Merci de m'avoir aidé.

Re: Upload de fichiers dans une table Mysql

par moogli » 28 mars 2011, 21:49

hum en fait le problème est de savoir si le php devras être exécuté ou non, s'il doit être exécuté la il va falloir prévoir une sorte de parseur pour supprimer les fonctions qui peuvent être dramatique.

S'il n'est pas amené a être utilisé renomme le fichier en une extension non exécutable ;)

Si tu était plus précis quand au problème rencontré que l'on puisse être plus a même de t'aider ;)


@+

Re: Upload de fichiers dans une table Mysql

par damien01 » 28 mars 2011, 21:10

Bonsoir,

Non tu te trompe d'utilisateur là. Je me permets de te faire voir mon ancien post.

Bonjour,

J'ai enfin réussi à créer ma fonction upload. Je vous remercie de vos conseils.
J'ai seulement une dernière question avant de clore ce post.
Dans mon cas, des utilisateurs peuvent être amenés à uploader des fichiers de tous genres.

Comment alors éviter, par exemple, l'exécution d'un fichier PHP uploader, si un utilisateur ayant de mauvaises intentions, saisit le chemin du fichier dans l'URL?
Si je bloque au niveau des droits je supprime l'upload, d'après ce que j'ai pu constater.

Avez vous des idées?

Bonne journée.

Re: Upload de fichiers dans une table Mysql

par AB » 28 mars 2011, 02:28

Plus haut tu parlais de fichier image et il n'y a pas de problème pour contrôler des fichiers images.

Pourquoi veux tu autoriser les visiteurs à télécharger des fichiers php sur ton site ?

Re: Upload de fichiers dans une table Mysql

par damien01 » 27 mars 2011, 12:48

Bonjour,
Pour moogli, comme je le mettais dans mon poste les utilisateurs sont amené à uploader tous types de données tel que du php d'ou la difficulté... :s
Peut être comme tu dis, le renommage...

Re: Upload de fichiers dans une table Mysql

par AB » 25 mars 2011, 18:41

vraiment très simple, je me casse les dents chez free pour le faire... ..
Et tu en as fait quoi de mes liens ?
Un exemple fonctionnel chez free avec cette classe d'upload Il te suffit de copier le contenu du code "La classe" qui se situe en bas du lien, dans un fichier que tu nomme par exemple 'Upload_2.0.php5'.

Ensuite dans un fichier avec l'extension php5 ex : "telechargement.php5" tu copie ce code
<?php
require('Upload_2.0.php5');

// FORMULAIRE 1

// Téléchargement de photos avec contrôle anti-écrasement d'un fichier déjà existant ou renommage du fichier si un fichier de même nom est déjà existant sur le serveur, et contrôle des images.

$repertoire_destination = 'Test';

// Déclaration de la classe avec envoi des paramètres
$form_1 = new Telechargement ($repertoire_destination,'formulaire_1','photo','get_formulaire_1');


// Contrôle simple (anti écrasement) de l'existence d'un fichier de nom identique dans le répertoire de destination
//$form_1->Set_Controle_fichier ();

//Renommage du fichier si un fichier de même nom est déjà existant sur le serveur
$form_1->Set_Renomme_fichier ('incr');


// Contrôle que le fichier est effectivement une image de type gif, jpg, jpeg ou png et retourne ses dimensions dans le tableau des résultats
$form_1->Set_Controle_dimImg ();


//Téléchargement sans traitement php supplémentaire -> on spécifie un rechargement de la page suite au téléchargement en indiquant un argument non nul ex 'reload' dans la fonction d'Upload.
$form_1->Upload('reload');


// Enregistrement des messages de contrôle (si besoin)
$messages_form1 = $form_1->Get_Tab_message ();

// Enregistrement du tableau des résultats (si besoin)
$tranfert_form1 = $form_1->Get_Tab_upload ();





?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
<script type="text/javascript">
<!--
function Verif_attente(id_attente)
    {              
        var id_attente = document.getElementById(id_attente);
       
        if (typeof id_attente != 'undefined')
        {
            // Nettoyage de l'élément cible
            var nb_noeuds = id_attente.childNodes.length;
                       
            for (var i = 0; i < nb_noeuds; i++)        
                                {                                  
                                        id_attente.removeChild(id_attente.firstChild);
                                }
			
			id_attente.style.fontWeight="bold";
	    	id_attente.style.fontSize="1.5em";
			
            var texte = 'Patientez...';
            // Création du noeud texte
            var noeud_texte = document.createTextNode(texte);
            // Insertion du noeud texte
            id_attente.appendChild(noeud_texte);
        }
    }
-->
</script>
<style type="text/css">
body {
font-family: Arial, Helvetica, sans-serif;
font-size:12px;
}

p, input, form {
margin:0;
padding:0;
}
</style>
</head>

<body>

<div style="width:650px;margin:auto;margin-top:50px;">  

        <p>Fichiers photos (png, jpg, jpeg, gif)</p>
               
        <form enctype = "multipart/form-data" action = "<?php echo htmlspecialchars($_SERVER['PHP_SELF']).'?get_formulaire_1=1'?>" method = "post" onsubmit = "Verif_attente('message_tele')" id = "formulaire_1">
       
                <p>      
                        <!-- input d'identification du formulaire qui doit être passé en paramètre dans l'initialisation de la classe-->
                        <input type = "hidden" name = "formulaire_1" value = "1" />
                                                 
                        <!-- Par défaut MAX_FILE_SIZE = Return_Octets(ini_get('upload_max_filesize') donc ne sert à rien en l'état. Pour limiter l'upload à une taille inférieure vous pouvez rentrez une valeur suivie de son unité, exemple $form_1->Return_Octets('500K') pour 500 kilos octets, $form_1->Return_Octets('1M') pour 1 méga octets etc. La fonction "Return_Octets" est employée pour la conversion en octets car le champ MAX_FILE_SIZE demande une valeur en octets. -->
       
                        <input type = "hidden" name = "MAX_FILE_SIZE"  value = "<?php echo isset($form_1)? $form_1->Return_Octets(ini_get('upload_max_filesize')) : ''?>" />
                                   
                        <input name = "photo[]" type = "file" size = "70" /><br />
                                   
                        <input name = "photo[]" type = "file" size = "70" />
                                   
                        <input name = "photo[]" type = "file" size = "70" />
                                         
                        <input type = "submit" value = "Envoyez"  style = "margin-left:5px" />
                </p>
               
    </form>
               
        <p>
        <br />Taille maximum de fichier autorisée par le serveur = <?php echo ini_get('upload_max_filesize').'o'?>.&nbsp;&nbsp;Total maximum pour l'ensemble <?php echo ini_get('post_max_size').'o'?>.
        </p>

    <div id = "message_tele" style="margin-top:20px;">
               
                <?php if (!empty($messages_form1))
           
                foreach ($messages_form1 as $num)
                        {
                                foreach ($num as $value)
                                echo htmlspecialchars($value).'<br />';
                        }
                ?>
    </div>

</div>
  

<div style="margin-top:100px" >
        <p>
                <?php
                // Lecture du tableau des résultats (se trouve ici uniquement pour la démonstration et visualiser la structue des tableaux de résultat)
                if (!empty ($tranfert_form1))
                        {
                                $identifant = $tranfert_form1['identifiant'];
                                $champ = $tranfert_form1['champ'];    
                                $resultat = $tranfert_form1['resultat'];//tableau à trois dimensions
                           
                               
                                echo $identifant.' :<br /><br />';
                           
                                foreach ($resultat as $num => $rep)
                                        {
                                                foreach ($rep as $key => $value)
                                                        {                                                      
                                                                if(!empty($value['nom']))                                  
                                                                echo 'champ '.$champ.' n° '.$num.' = '.$value['nom'].' '. $value['dim'].', téléchargé dans "'.$key.'"<br />';
                                                        }    
                                        }  
                        } ?>
                <br />
        </p>
</div>

</body>
</html>
Il te suffit juste de changer $repertoire_destination pour indiquer ta valeur et c'est tout.
J'ai mis trois champs d'upload mais tu peux en supprimer.
Ensuite en cas de besoin tu peux rajouter des options : imposer un nom de destination, redimensionner des images etc.

Re: Upload de fichiers dans une table Mysql

par DBU » 25 mars 2011, 15:17

Oui, un upload me va assez, je veux juste permettre aux dirigeant de la catégorie d'ajouter des photos facilement dans notre galerie.
Ou mettre un fichier PDF à jour avec un lien.

vraiment très simple, je me casse les dents chez free pour le faire... ..

Re: Upload de fichiers dans une table Mysql

par moogli » 23 mars 2011, 19:41

Salut,

Le plus simple etant de verifier l'extension du fichier (tous ce qu'il y a apres le dernier point) si cette extension est php (ou simplement contient php car l'extension peut etre php4 php5 voir meme un truc farfelus si c'est configuré ;) )

Apres tu peut simplement les renommer systématique afin d'éviter ces soucis ^^

@+

Re: Upload de fichiers dans une table Mysql

par damien01 » 23 mars 2011, 16:28

je veux bien te présenter mon code mais sache que je ne passe pas par mysql, juste une upload dans un répertoire, d'ou mon dernier post.

Re: Upload de fichiers dans une table Mysql

par DBU » 23 mars 2011, 16:17

C'est justement ce que je cherche à Faire.
Peux-tu partager ta science ?

Merci

Re: Upload de fichiers dans une table Mysql

par damien01 » 23 mars 2011, 15:32

Bonjour,

J'ai enfin réussi à créer ma fonction upload. Je vous remercie de vos conseils.
J'ai seulement une dernière question avant de clore ce post.
Dans mon cas, des utilisateurs peuvent être amenés à uploader des fichiers de tous genres.

Comment alors éviter, par exemple, l'exécution d'un fichier PHP uploader, si un utilisateur ayant de mauvaises intentions, saisit le chemin du fichier dans l'URL?
Si je bloque au niveau des droits je supprime l'upload, d'après ce que j'ai pu constater.

Avez vous des idées?

Bonne journée.

Re: Upload de fichiers dans une table Mysql

par damien01 » 20 mars 2011, 21:52

Merci ça va m'être d'une grande aide! :D

Re: Upload de fichiers dans une table Mysql

par AB » 20 mars 2011, 20:25

Concernant l'upload de fichiers il y a un tuto ici
Et une classe d'upload prête à l'emploi ici

Re: Upload de fichiers dans une table Mysql

par damien01 » 20 mars 2011, 18:04

Bien! les ennuis continus.

J'ai un problème tout autre maintenant avec ma fonction upload :s.

Voici mon code:
<div class="contenu">
	<font class="title" >Upload de fichiers:</font><br /><br />
	<form method="post" enctype="multipart/form-data" action="#">
		<input type="hidden" name="MAX_FILE_SIZE" value="4294967295"/>
                <input type="file" name="file" id="file" /><br /><br />
                <input type="submit" name="upload" value="Envoyer" />
        </form>
        <pre><?php  print_r($_FILES); ?></pre>   
</div>	
Lorsque je saisis un fichier et procède à l'upload de ce dernier, print_r me retourne un tableau vide! :s:s
Je pense donc que la source du problème est dans la configuration du php.ini? J'aimerais connaitre vos avis.

Re: Upload de fichiers dans une table Mysql

par damien01 » 20 mars 2011, 14:05

C'est pas bête! :D
Merci bien! Je suis désolé pour toutes ces erreurs, je suis issu de formations réseaux et n'ai pas grandes expériences en développement.

Je vais maintenant me recentrer sur mon upload de fichiers.