Bonjour a tous.
Voila mon probleme,
J'avais un script qui me permettait d'uploader une image dans un dossier et de sauvegarder le nom de l'image dans une bdd (avec le type de l'image etc...).
Il y a peu j'ai découvert que HTML5 avait intégré une option intéréssante concernant les <input type="file">, on peut désormais ajouter l'attribut multiple pour ajouter plusieurs fichiers a la fois. C'est parfait, seulement voila, au niveau du traitement du $_FILES je suis perdu, je n'ai pas un niveau très très poussé en PHP et je sèche complètement.

Je pense qu'une telle option est très répandue et très pratique pour l'utilisateur.

Je vous remercie d'avance pour votre aide. :)

7 réponses


Tu as essayer de faire un print_r($_FILES) pour voir ce que tu recevais ?

Array ( [galerie] => Array ( [name] => Array ( [0] => IMG_0005.JPG [1] => IMG_0006.JPG ) [type] => Array ( [0] => image/jpeg [1] => image/jpeg ) [tmp_name] => Array ( [0] => /tmp/php4LIdjh [1] => /tmp/phpMMmU9k ) [error] => Array ( [0] => 0 [1] => 0 ) [size] => Array ( [0] => 1960644 [1] => 1961399 ) ) ) Les infos sont bien transmises mais comment gérer la partie upload ? pour une image ok mais pour plusieurs (sans savoir a l'avance le nombre)

Il faut utiliser la boucle foreach :)

J'aurai un script pour un uploader conçue pas moi mais un peut long x) donc après il fonctionne parfaitement mais faudra que tu fasse un index..php dans le dossier upload avec une redirection vers l'index.php de site de départ enfin voilà le code :

<?php
if(isset($_POST'GO']))
{
echo('<h1>Êtat de l\'envoi :</h1>');
echo('<strong>');
if(filesize($_FILES'monfichier']'tmp_name'])<1000048576000)
{
if (move_uploaded_file($_FILES"monfichier"]"tmp_name"], "nom de ton dossier/".$_FILES'monfichier']'name']))
{
echo('Fichier envoyé !<h1>Infos :</h1>Nom fichier : '.$_FILES'monfichier']'name'].'<br />Poid du fichier : '.round($_FILES'monfichier']'size'] / (1024)).' Kilo'.'<br /><br /> >>> : <a href="http://exemple.fr/nom de ton dossier/'.$_FILES'monfichier'] 'name'].'" target="_blank">Ouvir votre fichier</a>');
}
else
{
echo('Erreur lors de l\'envoit !');
}
}
else
{
echo('Fichier trop gros (ne dois pas dépasser 1055555555 Octets) !');
}
echo('</strong>');
}
?>

Merci neoxeur, malheureusement, je cherche un script pour un upload multiple d'images et pas une seule image.

<?php
require('sql.php');
if(!empty($_FILES))
{
$tot = count($_FILES'avatar']'name']);
foreach ($_FILES'avatar'] as $fav) {
    $avatar = $fav;
    $avatar_name = $avatar'name'];
    $ext = strtolower(substr(strrchr($avatar_name,'.'),1));
    $valid = true;
    if($valid)
    {
        $max_size = 2000000;
        if($avatar'size']>$max_size)
        {
            $valid = false;
            $erreur = 'Fichier trop gros';
        }
    }

    if($valid)
    {
        if($avatar'error']>0)
        {
            $valid = false;
            $erreur = 'Erreur lors du transfert';
        }
    }
    if($valid)
    {
        $upload = 'upload/';
        $nomfichier = uniqid($avatar_name);
        $source = $avatar'tmp_name'];
        $cible = $upload . $nomfichier. '.'. $ext;
        move_uploaded_file($source,$cible);
    }
    }
}
<form action="index.php" enctype="multipart/form-data" method="post">
            <label for="avatar">Charger une photo :</label>
            <input type="file" name="avatar]" multiple />
            <input type="submit" class="submit" value="Charger" />
    </form>

Voila ce que j'ai pour l'instant, malheureusement, rien ne s'upload dans le dossier upload/ .
Je n'ai jamais utilisé la boucle foreach, je ne sais pas si je m'en suis bien servi :s.

Ou est ce que je me suis planté ? :s

La je sais pas désolé mais si tu trouve mais la réponse car tu n'es pas tous seul à vouloir le code source x) sinon bonne chance.

Salut
Moi personnellement je ne sais pas si c'est ça, je n'ai pas test le code mais je pense que c'est tes "if($valid)" qui ne fonctionne pas !

<?php
require('sql.php');
if(!empty($_FILES))
{
$tot = count($_FILES'avatar']'name']);
foreach ($_FILES'avatar'] as $fav) {
    $avatar = $fav;
    $avatar_name = $avatar'name'];
    $ext = strtolower(substr(strrchr($avatar_name,'.'),1));
    $max_size = 2000000;
    if($avatar'size']>$max_size)
    {
        $erreur_1 = 'Fichier trop gros';
    }
    else
    {
        if($avatar'error']>0)
        {
            $erreur_2 = 'Erreur lors du transfert';
        }
        else
        {
            $upload = 'upload/';
            $nomfichier = uniqid($avatar_name);
            $source = $avatar'tmp_name'];
            $cible = $upload . $nomfichier. '.'. $ext;
            move_uploaded_file($source,$cible);
            $noerreur = 'Fichier Uploader';
        }
    }

<form action="index.php" enctype="multipart/form-data" method="post">
            <label for="avatar">Charger une photo :</label>
            <input type="file" name="avatar]" multiple />
            <input type="submit" class="submit" value="Charger" />
    </form>
<?php
if(isset($erreur_1)){echo $erreur_1;}
if(isset($erreur_2)){echo $erreur_2;}
if(isset($noerreur)){echo $noerreur;}
?>

PS: je me suis permis de modifier les "$erreur" comme ça si tu test le code tu pourras voir si ça marche et où ça ne marche pas !

Re-PS: "neoxeur" s'il te plaît fais un effort,nous ne sommes pas sur un portable, relit tes réponses avant de les envoyer parce que c'est horrible les fautes comme ça :

"<u>Là</u> je <u>ne</u> sais pas désolé mais si tu trouve <u>met</u> la réponse car tu n'es pas <u>tout</u> seul à vouloir le code source x) sinon bonne chance. "

Tout cela en tout bien tout honneur !

Bonne Soirée