Upload de fichiers vérification renommage redimensionnements

ViPHP
AB
ViPHP | 5818 Messages

14 avr. 2011, 15:28

@hazuki

Et j'espère donc que tu à mis à jour ta classe vers la version 2.0 actuellement en ligne qui gère mieux l'erreur de dépassement mémoire lors du redimensionnement des images :wink:

Petit nouveau ! | 4 Messages

17 mai 2011, 19:21

Bonjour,

Tout d'abord merci pour ce script super propre et bien documenté. Il me reste quand même une petite question. Dans l'initialisation de la classe, tu parles de : 3/ Nom de l'input de type file de votre formulaire. Ce nom peut désigner un tableau pour l'envoi simultané de plusieurs fichiers.

C'est la partie sur le tableau qui m'intéresse. J'ai un input file qui utilise l'attribut "multiple" mais je n'arrive pas à transmettre mon tableau à la classe.
<form method="post" action="#" enctype="multipart/form-data">
  <input type="file" name="image[]" id="image" multiple="" onChange="makeFileList();" />
  <input type = "submit" name = "form1" value = "Envoyez"  />
</form>
Comment récupérer mon tableau d'image pour le passer en paramètre? J'ai essayé plusieurs choses mais rien ne marche. Il y a quelque chose que je n'ai pas du bien comprendre avec les tableaux ou le $_FILES.

Aurais-tu un exemple?

D'avance un grand merci

Avatar de l’utilisateur
Modérateur PHPfrance
Modérateur PHPfrance | 8728 Messages

18 mai 2011, 19:10

salut,

le multiple de ne sert a rien (d'ailleurs n'est pas documenté je pense qu'il n'existe pas pour cette balise).

pour envoyer plusieurs fichier il faut plusieurs champs ( exemple de la doc http://fr2.php.net/manual/fr/features.f ... method.php).

après peut être que ta fonction JS remplis des champs input de type file qui ne sont pas affichées ?

pour ce qui est de l'utilisation de la classe de AB il suffit d'indiquer image si tu a mis images[] (ou images) dans le champs input (ou les champs) et la classe se débrouille seule pour savoir s'il y a ou non plusieurs fichiers ;)


@+
Il en faut peu pour être heureux ......

ViPHP
ViPHP | 5462 Messages

19 mai 2011, 10:57

salut,

le multiple de ne sert a rien (d'ailleurs n'est pas documenté je pense qu'il n'existe pas pour cette balise).
ça existe en HTML5 : http://www.w3.org/TR/html5/number-state ... load-state

Avatar de l’utilisateur
ViPHP
xTG
ViPHP | 7330 Messages

19 mai 2011, 11:41

Cela existe aussi en HTML4 mais ce n'est géré que par un nombre très très restreints de navigateurs.
(pour ça que les hébergeurs d'images passent par du flash pour l'upload)

ViPHP
ViPHP | 5462 Messages

19 mai 2011, 11:47

Cela existe aussi en HTML4
t'as un lien ?

Avatar de l’utilisateur
ViPHP
xTG
ViPHP | 7330 Messages

19 mai 2011, 13:43

Non pas de document mais juste ma mémoire que je ne peux malheureusement pas numériser #-o , mais ça fonctionnait déjà il y a quelques années sur certains navigateurs. (notamment sur une version de FF l'ayant utilisé moi même il y a quelques années avant de me tourner vers une solution en Flash du fait de la non gestion par IE, mais ça a été retiré à ce que je vois (marche pas sous FF 3.6 actuellement)).
Cependant ayant fait des recherches suite à ta demande de document il semblerait en effet que la norme HTML 4 n'ai jamais prévu cet attribut.

Avatar de l’utilisateur
Modérateur PHPfrance
Modérateur PHPfrance | 8728 Messages

19 mai 2011, 16:08

salut,

le multiple de ne sert a rien (d'ailleurs n'est pas documenté je pense qu'il n'existe pas pour cette balise).
ça existe en HTML5 : http://www.w3.org/TR/html5/number-state ... load-state
Effectivement, je ne suis pas trop au fiat niveau html 5 :/

je viens de tester sur différents navigateurs :
- firefox V4 : ok, idem sur V3
- chrome 13 (win) /chromium 6 (debian) : ok
- konqueror : ko
- IE 9 ko
- safari 5.0.5 (win7) : ok
- Arora 0.10.2 ok
- iceweasel 3.5 ko (v3 de firefox)
- Epiphany ok

tous n'implemente pas encore le "accept".

c'est une info intéressante au niveau design pour éviter d'avoir plusieurs champs.
Par contre encore une fois IE fait le boulet :)

Pour la réponse à la question de toph200 la réponse reste inchangé le traitement sera le même :)

@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 4 Messages

19 mai 2011, 21:49

Salut à tous!!!!

Eh bien voilà, merci à tous, après de nombreuses recherches (et une attente de plusieurs année), j'ai enfin un upload de fichier multiple avec un champ unique et n'utilisant pas flash qui fonctionne. L'attribut multiple existe bien et c'est grâce à lui que j'ai enfin pu arriver à ce résultat PROPRE (selon mes critères :-)))). Vous me direz que ce n'est pas compatible avec tous les navigateurs mais ceci ne me tracasse pas puisqu'il s'agit d'une interface de maintenance.

Enfin merci, c'est surtout ça que je voulais dire :-)

A bientôt

PS: pour un premier post sur PHP France, suis pas déçu!

ViPHP
AB
ViPHP | 5818 Messages

20 mai 2011, 02:31

Je récapitule en donnant un exemple complet avec l'option "multiple" pour pouvoir télécharger plusieurs fichiers à partir d'un même champ :
<?php
// Appel de la classe
require('Classes_POO/Upload_2.0.php5');

//Si on travaille en utf-8
header('Content-type: text/html; charset=UTF-8');


// Déclaration de la classe avec envoi des paramètres (cf doc)
$form = new Telechargement ('Dossier_destination','envoi_file','photo','get_form_1');

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

//option pour renommer le fichier en mode incrémentiel si un fichier de même nom existe déjà sur le serveur
$form->Set_Renomme_fichier ('incr');


//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->Upload('reload');


// Enregistrement des messages de contrôle 
$messages_form = $form->Get_Tab_message ();

?>
<!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 (jpg, jpeg)</p>
               
	<form enctype = "multipart/form-data" action = "<?php echo htmlspecialchars($_SERVER['PHP_SELF']).'?get_form_1=1'?>" method = "post" onsubmit = "Verif_attente('message_tele')" >
	
		<p>       				   
			<input name = "photo[]" type = "file" size = "70" multiple = "true" />
				   
			<input type = "submit" name = "envoi_file" 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 (isset($messages_form))
		foreach ($messages_form as $num)
			{
				foreach ($num as $value) 
			 	echo htmlspecialchars($value).'<br />';
			}
		?>
    </div>

</div>

</body>
</html>
Rappel à ce jour du test d'implémentation de l'option "multiple" (merci moogli :wink: )

- Firefox V4 : ok, contrôlé sur v3.6.10 ok
- Chrome 13 (win) /chromium 6 (debian) : ok
- Safari 5.0.5 (win7) : ok
- Epiphany ok
- Arora 0.10.2 ok
- Iceweasel 3.5 ko (v3 de firefox)
- Konqueror : ko
- IE 9 ko

Concernant le paramétrage de la classe, rien de particulier puisque la classe gère de façon transparente les input sous forme de tableau ou sous forme simple.
Juste dans la déclaration html il faut prendre soin de déclarer l'input sous forme d'un tableau (ici name = "photo[]") même s'il n'y a qu'un champ mais c'est tout à fait logique puisque l'on pourra sélectionner plusieurs fichiers simultanément.
Dernière édition par AB le 20 mai 2011, 17:53, édité 1 fois.

Avatar de l’utilisateur
ViPHP
xTG
ViPHP | 7330 Messages

20 mai 2011, 08:07

J'ai mozilla Firefox 3.6.13 au boulot et cela ne fonctionne pas. :mrgreen:

Avatar de l’utilisateur
Modérateur PHPfrance
Modérateur PHPfrance | 8728 Messages

20 mai 2011, 11:49

J'ai mozilla Firefox 3.6.13 au boulot et cela ne fonctionne pas. :mrgreen:
==> V4 :)
Il en faut peu pour être heureux ......

Avatar de l’utilisateur
Administrateur PHPfrance
Administrateur PHPfrance | 13232 Messages

20 mai 2011, 14:27

J'ai mozilla Firefox 3.6.13 au boulot et cela ne fonctionne pas. :mrgreen:
==> V4 :)
Ouais, mais la dernière fois que j'ai dit ça à un client, j'ai eu droit à une "VTFF" :/
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
AB
ViPHP | 5818 Messages

20 mai 2011, 17:50

J'ai mozilla Firefox 3.6.13 au boulot et cela ne fonctionne pas. :mrgreen:
Ah bah ca m'étonne, chez moi ça fonctionne avec FF 3.6.10 :-k

Avatar de l’utilisateur
ViPHP
xTG
ViPHP | 7330 Messages

20 mai 2011, 18:04

J'ai mozilla Firefox 3.6.13 au boulot et cela ne fonctionne pas. :mrgreen:
==> V4 :)
Ouais, mais la dernière fois que j'ai dit ça à un client, j'ai eu droit à une "VTFF" :/
Moi c'est l'admin système qui va me dire VTFF. :3