Upload multiple

Bonjour,
J’essaie d’installer sur un site une galerie photo en permettant aux gens d’uploader des images.
En faisant l’upload un à un ça marche mais lorsque j’essaie de faire uploader plusieurs fichier simultanément ça bugue.
J’ais mis le formulaire

[code]

Votre pseudo

Photo 1   

Photo 2   

Photo 3   

Photo 4   

Photo 5   

Photo 6    [/code] Mais c'est au niveau du fichier gérant l'upload que ça bloque et franchement je ne vois pas ou est le problème [code]if(!empty($_FILES["file"]["name"])){

// Nom du fichier choisi:
$nomFichier = $_FILES[“file”][“name”];
// Nom temporaire sur le serveur:
$nomTemporaire = $_FILES[“file”][“tmp_name”];
// Type du fichier choisi:
$typeFichier = $_FILES[“file”][“type”];
// Poids en octets du fichier choisit:
$poidsFichier = $_FILES[“file”][“size”];
// Poids en Kilo-octets du fichier choisit:
$poidsFichierK = $poidsFichier/1024;
// Pré formatage en affichage avec 0 chiffre après la virgule , donc pas de virgule.
$poidsFichierK = sprintf("%.0f", $poidsFichierK);
// Code de l’erreur si jamais il y en a une:
$codeErreur = $_FILES[“file”][“error”];
// Extension du fichier
$extension = strrchr($nomFichier, “.”);

// Si le poids du fichier est de 0 bytes, le fichier est
// invalide (ou le chemin incorrect) => message d’erreur
// sinon, le script continue.
if($poidsFichier <> 0){
// Si la taille du fichier est supérieure à la taille
// maximum spécifiée => message d’erreur
if($poidsFichier < $MAX_SIZE){
// On teste ensuite si le fichier a une extension autorisée
if(isExtAuthorized($extension)){
// Ensuite, on copie le fichier uploadé ou bon nous semble.
$uploadOk = move_uploaded_file($nomTemporaire, $DESTINATION_FOLDER.$nomFichier);
if($uploadOk){
echo “L’upload a réussi !

”;
echo “Nom du Fichier : $nomFichier
”;
echo “Taille du Fichier : $poidsFichierK Ko
”;
echo "URL du Fichier :[/code]
Si quelqu’un avait une idée comment régler ce problème, cela m’aiderais beaucoup.
Merci d’avance

Essaye avec un foreach sur $_FILES pour attraper le tableau file[] de ton nom de variable et “uploader” dans cette boucle.
genre

foreach($_FILES['file'] AS $monFichier=>$attribut) { // ... }

Excuse mon ignorance mais je dois le placer ou (je débutes en php)

J’ais essayé une autre solution:

[code]<?php
mkdir ("".$_POST[pseudo], 0777);
function return_bytes($val) {
$val = trim($val);
$last = strtolower($val{strlen($val)-1});
switch($last) {
case ‘g’:
$val *= 1024;
case ‘m’:
$val *= 1024;
case ‘k’:
$val *= 1024;
} return $val;
} define(‘MAX_FILE_SIZE’, return_bytes(ini_get(‘post_max_size’)));
define(‘UPLOAD_DIRECTORY’, ‘"./" . $_POST[pseudo]."/"’); if(!empty($_FILES)){
echo “URL du Fichier : http://www.crazytchat.com/upload/up/$pseudo/
<br
>”; $nb_of_files = count($_FILES[‘attached_files’][‘tmp_name’]);
echo ‘

    ’;
    for($i = 0; $i< $nb_of_files; ++$i){
    if(is_uploaded_file($_FILES[‘attached_files’][‘tmp_name’][$i])){
    $name = $_FILES[‘attached_files’][‘name’][$i];
    $tmp_name = $_FILES[‘attached_files’][‘tmp_name’][$i];
    $error = $_FILES[‘attached_files’][‘error’][$i];
    $clean_name = strtolower(basename($name));
    $clean_name = preg_replace(’/[^a-z0-9.-]/’, ‘-’, $clean_name); if(function_exists(‘mime_content_type’)){
    $type = mime_content_type($tmp_name);
    }
    else{

    $type = $_FILES[‘attached_files’][‘type’][$i];
    } if(!move_uploaded_file($tmp_name, UPLOAD_DIRECTORY.$clean_name)){
    $error_string = “Le fichier n’a pas été déplacé correctement”;
    }
    else{
    $error_string = ‘Le fichier a été déplacé correctement’;
    }
    echo ‘
  • ’;
    echo ‘Fichier ‘.$i.’ :’;
    echo ‘
    ’;
    print_r(array(
    ‘name’ => $name,
    ‘type’ => $type,
    ‘error’ => $error,
    ‘size’ => filesize($tmp_name),
    ‘tmp_name’ => $tmp_name,
    ‘clean_name’ => $clean_name,
    ‘error_string’ => $error_string
    ));
    echo ‘
    ’;
    echo ‘
  • ’;
    }
    }
    echo ‘
’;
} ?>

Votre pseudo


Fichier joint :

Fichier joint :

Fichier joint :
<input type="submit" value="Envoyer" /><BR>	<input type="reset" value="Rétablir" /><BR></form>[/code]

J’ais commencé par tester sans vouloir créer le dossier via le formulaire et ça marche impecc.
Dès que j’ais rajouté les lignes de codes permettant de créer le dossier, ça plante

Je te conseille de te documenter par toi même pour en apprendre plus sur le php pour faire quelque chose de plus propre.
regarde par exemple ce que te dis ton moteur favoris sur le theme “upload multiple php”, même si les premiers résultats du miens sont assez dégueux.

Bonne continuation !
(ps : les balises html c’est en minuscule B))

La création des dossiers fonctionnes maintenant
Il y a un problème dans l’envoi, elles (les photos) n’arrives pas dans le dossier.
Voici la ligne gérant cela

sachant que le fichier avec le formulaire se trouves dans le dossier upload/up/ tout comme le dossier créé pour les stocker.

C’est une super mauvaise idée ça …
imagine que le pseudo qu’on t’envoie ça soit …/…/…/ (par exemple) et que l’image soit un truc un peu tordu qui passe pour une image mais qui en soit pas une …
Ben voilà t’as plus de site.

te fais pas chier avec une constante, fais plutot une variable genre : $dir = ‘/’ . verification($_POST[‘pseudo’]);
et précise que c’est dans CE dossier que tu veux envoyer.

En fait en relisant je viens de voir que tu fais un ./ mais ça c’est par rapport à la page php et non par rapport à ton fichier courant.
imagine que tu fasse l’arbo suivante : truc/machin/pouet/test/fichier.php
que ta page index inclue ça, le ./ sera dans truc machin pouet test.

Regarde du coté de http://fr2.php.net/manual/fr/reserved.vari…ariables.server, surtout vers DOCUMENT_ROOT, qui devrait etre un truc comme /home/user/www/.
comme ça tu pourra faire un truc bien plus clean du style :

Define(“DOSSIER_UPLOAD”, $_SERVER[‘DOCUMENT_ROOT’].’/upload’);
et ta fameuse variable $destination = DOSSIER_UPLOAD . ‘/’ . verification($_POST[‘pseudo’]), où vérification pourrait etre un truc comme preg_match("/^[a-z0-9]/i", $_POST[‘pseudo’]);

Je sais plus comment on fait pour ajouter des caracteres à matcher, mais ça ça va retourner vrai que si ton expression est de une lettre de l’alphabet non eccentué ou un nombre.

Edit: bout de code

Ce n’est pas possible puisque le dossier se créait au moment de l’inscription (que je dois valider) sur le site et non lorsque tu télécharges des images. Et lors de l’inscription, les controles sont en place. Ce fichier ne sert qu’a télécharger des photos (jpg, gif, bmp sont les seuls autorisés).

C’est bon cela fonctionnes maintenant. Plus qu’un petit point à éclaircir. Lorsque l’on vas sur la page des connectés comment faire le lien pour que ce soit la galerie du membre qui s’ouvre. Pour le moment le lien c’est:

[code]$sexe=$rs[“sexe”];
if ($sexe==“Homme”){
$photo="";
}
elseif ($sexe==“Femme”){
$photo="";
}
else {
$photo="";
}
$image="";
$listeconnecte.=$image.’  '. $photo.$rs[‘pseudo’]." ~ <a href=‘mailto:".$rs[‘email’]."’>Son Mail  Sa galerie photo ";

}[/code]

Bonjour,
Si cela n’est pas possible, y a t’il un moyen de faire une liste déroulante de tous les dossiers créés. Si vous aviez un tutoriel la dessus cela m’aiderais beaucoup

J’ais résolu une partie du problème en créant la liste déroulante mais je n’arrives pas à trouver comment faire pour que cela deviennent des liens.
Pour la liste déroulante j’ais fait:

[code]

<?php if ($handle = opendir('upload/up/')) { echo "Files:\n"; while (false !== ($file = readdir($handle))) { echo''.$file.''; } while ($file = readdir($handle)) { echo "$file\n"; } closedir($handle); } ?>

[/code]

Mais euh, si c’est une liste déroulante, ca ne peut pas etre des liens… J’ai raté un truc, c’est ca ?

Ou alors selectionner dans la liste déroulante et peut être mettre un bouton pour prendre la selection

Et ben voilà, tu l’a ta solution B)

Oui mais comment faire B)

Comment faire quoi ? Je comprend pas où est le soucis. T’a déjà ta liste déroulante, il te suffit juste de rajouter un bouton et de regarder quel est le choix fait par l’utilisateur, et d’afficher le résultat en conséquence :confused:

Si cette page peux t’aider, je te recommande de mettre l’achat d’un livre sur PHP dans le top 3 de tes priorités (et si elle ne t’aide pas, l’achat devient ta priorité n°1).

Il ne s’agit pas de ce genre de formulaire, je m’explique.
A la création du comptece crait automatiquement un dossier dans upload/up nommé comme le pseudo de la personne. Par la suite la personne peut uploader des photos. Ce que je souhaite c’est que d’autres membres puissent choisir de visionner la galerie d’autres membres en choisissant dans la liste déroulante… J’ais déjà bien avancé avec la liste déroulante car maintenant elle fonctionnes et me rediriges vers le dossier souhaité.
Voici d’ailleurs le code

[code]

<?php

if ($handle = opendir(‘upload/up/’)) {

echo "Files:\n";


while (false !== ($file = readdir($handle))) {
	echo'<option value="'.$file.'">'.$file.'</option>';
}


while ($file = readdir($handle)) {
	echo "$file\n";
}

closedir($handle);

}
?>

[/code] et pour le visionnage (car pour le moment il m'ouvres le dossier mais sans fichier pour afficher les photos ça bloques) j'ais pensé utiliser un fichier interactif pour les visionner [code] <?php include("images.class.php"); ?> <?php

$images = new images();
$images->repertoire = ‘$pseudo’;
$images->nb_par_ligne = 3;
$images->afficher_liste();

?>

[/code] et en dernier voici le fichier images.class.php gérant l'affichage [code]<?php

class images {

var $repertoire;
var $nb_par_ligne;

function ajouter_image($image,$nom) {
if (is_dir($this->repertoire)) {
if (copy($image, $this->repertoire . “/” . $nom)) return true;
else return false;
} else return false;
}

function lister_repertoire() {
$liste = array();
if (is_dir($this->repertoire)) {
if ($pointeur = opendir($this->repertoire)) {
while (($fichier = readdir($pointeur)) !== false) {
if (!is_dir($this->repertoirte . “/” . $fichier)) {
$liste[] = $fichier;
}
}
closedir($pointeur);
return $liste;
} else return false;
} else return false;
}

function liste_select() {
$liste = $this->lister_repertoire();
for ($i = 0; $i < count($liste); $i++) {
echo " <option value="$this->repertoire/$liste[$i]">$liste[$i]\n";
}
}

function afficher_liste() {
$liste = $this->lister_repertoire();
echo “<table summary=“table d’images”>\n”;
for ($i = 0; $i < count($liste); $i++) {
$nom = explode(".", $liste[$i]);
$nom = str_replace("_", " “, $nom[0]);
$nom = str_replace(”-", " “, $nom);
$nom = strtoupper(substr($nom, 0, 1)) . substr($nom, 1);
if (round($i/$this->nb_par_ligne) == ($i/$this->nb_par_ligne)) echo "

\n”;
echo " <td align=“center”>" . $this->afficher_image($liste[$i]) . “
\n”;
if (round(($i+1)/$this->nb_par_ligne) == (($i+1)/$this->nb_par_ligne) || ($i+2) > count($liste)) echo " \n";
}
echo “\n”;
}

function afficher_image($fichier) {
return “<img width=“250px” src=”" . $this->repertoire . “/” . $fichier . “” alt="" . $fichier . " - " . round((filesize($this->repertoire. “/” . $fichier)/1024), 2) . " ko">";
}

}

?>[/code]
Le problème vient surtout de là

comment envoyer la personne et que la galerie s’ouvres avec les photos choisies

[quote=“webide, post:17, topic: 44544”]Le problème vient surtout de là

comment envoyer la personne et que la galerie s’ouvres avec les photos choisies[/quote]

Je suis désolé, mais je ne comprend pas ton problème. Est-ce que tu peux tenter une approche (sans code) en décrivant ce que tu as, ce que tu obtiens pour l’instant, et ce que tu veux obtenir ? (et, eventuellement, si ca ne découle pas du reste, ce qui manque)