8791 sujets

Développement web côté serveur, CMS

Bonjour .

Voilà , je voudrais pouvoir choisir un dossier de destination , à l'aide d'un formulaire , de la même façon que je choisi un fichier de départ , à télécharger sur mon ordinateur .
Cela depuis une page administration d'un site .

Plusieurs dossiers contenants des images sur un site , télécharger une image , et choisir son dossier de destination à chaque fois .

Je ne trouve pas une syntaxe qui fonctionne .

Si cela est possible .? Sauriez-vous , m'aider ??

Merci .
Cordialement .

Sujet résolu . Merci à tous .
Modifié par Go'Gaule (12 Sep 2010 - 01:12)
Bonjour.

Si j'ai bien compris ce que tu souhaite faire il suffit d'ajouter un champ dans ton formulaire pour désigner le dossier de destination (selectbox ?) puis d'utiliser la fonction move_uploaded_file une fois le fichier envoyé.
Salut,

si tu veux parler d'un équivalent de INPUT type file pour des répertoires ça n'existe pas. Je ne vois qu'un SELECT avec la liste des répertoires cibles possibles...
heyoan
a écrit :
si tu veux parler d'un équivalent de INPUT type file pour des répertoires ça n'existe pas.

Oui c'est à cela que je pensais .

moust , merci je vais essayer ta solution .
Modérateur
Bonjour,

Sinon, c'est de passer par une applet Java qui a accès au système de répertoires du serveur, mais pour des questions de sécurité, il serait préférable de générer une liste de dossiers cibles possibles dans un simple menu déroulant html, comme le propose Heyoan.
tony , merci .

Je rame avec php , alors un applet javascript .

Donc créer une liste et chaque 'item' pointe sur le dossier en question <a href ....

Je vais essayer cette solution .

Je ne pige pas ou il y aurais un pb de sécurité .

Si tu est fortiche en java .. d'accord et merci d'avance .

Cordialement.
Modérateur
Attention, je parlais d'une applet Java, et le Java n'a rien à voir avec Javascript.

Pour la sécurité, si une applet Java permet de parcourir les dossiers d'un serveur, c'est toujours un risque si c'est mal programmé et/ou mal pensé, surtout s'il est possible d'uploader un fichier dans le dossier de son choix.

Dans ton cas, laisse tomber l'applet Java, vas-y avec une solution beaucoup plus simple et sécuritaire.

Si j'ai soulevé cette solution, c'était seulement pour préciser que rien n'est impossible.
Modifié par Tony Monast (09 Sep 2010 - 15:55)
Tony Monast a écrit :
Si j'ai soulevé cette solution, c'était seulement pour préciser que rien n'est impossible.
C'est vrai que j'aurais dû préciser : c'est impossible en HTML pur.
Bonsoir .

Je ne parviens pas à faire "fonctionner" ce morceau de code .

     
<html>
     <head><title>Téléchargez vos images!</title></head>
     <body>
    

     <?php
     $poids_max = 512000; // Poids max de l'image en octets (1Ko = 1024 octets)
     $repertoire = './images'; // Répertoire de téléchargement
    
     if (isset($_FILES['fichier']))
     {
    
     // On vérifie le type du fichier
     if ($_FILES['fichier']['type'] != 'image/png' && $_FILES['fichier']['type'] != 'image/jpeg' && $_FILES['fichier']['type'] != 'image/jpg' && $_FILES['fichier']['type'] != 'image/gif')
     {
     $erreur = 'Le fichier doit être au format *.jpeg, *.gif ou *.png .';
     }
    
     // On vérifie le poids de l'image
     elseif ($_FILES['fichier']['size'] > $poids_max)
     {
     $erreur = 'L\'image doit être inférieur à ' . $poids_max/1024 . 'Ko.';
     }
    
     // On vérifie si le répertoire de téléchargement  existe
     elseif (!file_exists($repertoire))
     {
     $erreur = 'Erreur, le dossier de téléchargement n\'existe pas.';
     }
    
     // Si il y a une erreur on l'affiche sinon on peut télécharger
     if(isset($erreur))
     {
     echo '' . $erreur . '<br><a href="javascript:history.back(1)">Retour</a>';
     }
     else
     {
    
     // On définit l'extention du fichier puis on le nomme par le timestamp actuel
     if ($_FILES['fichier']['type'] == 'image/jpeg') { $extention = '.jpeg'; }
     if ($_FILES['fichier']['type'] == 'image/jpeg') { $extention = '.jpg'; }
     if ($_FILES['fichier']['type'] == 'image/png') { $extention = '.png'; }
     if ($_FILES['fichier']['type'] == 'image/gif') { $extention = '.gif'; }
     $nom_fichier = time().$extention;
    
     // On télécharge le fichier sur le serveur.
     if (move_uploaded_file($_FILES['fichier']['tmp_name'], $repertoire.$nom_fichier))
     {
     $url = 'http://localhost:8888/machin'.$repertoire.''.$nom_fichier.'';
     echo 'Votre image à été téléchargée sur le serveur avec succes!<br>Voici le lien: <input type="text" value="' . $url . '" size="60">';
     }
     else
     {
     echo 'L\'image n\'a pas pu être téléchargée sur le serveur.';
     }
    
     }
    
     }
     else
     {
     ?>

    <form method="post" enctype="multipart/form-data">
     <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $poids_max; ?>">
     <input type="file" name="fichier">
	 <!--<input type="selectbox" name="repertoire">-->
	 <select> name="repertoire" id="repertoire"
			 <option Value="">Choisissez la destination</option>
			 <option Value="images">Images</option>
			 <option Value="gym">Gym</option>
			 <option Value="locations">Locations</option>
			</select>
     <input type="submit" value="Envoyer">
     </form>
     <?php

}
?>[/code]
Merci d'avance.
Cordialement
Salut,

tu pourrais faire par exemple :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Test</title> 
</head> 
<body> 
<?php 
$poids_max = 512000; // Poids max de l'image en octets (1Ko = 1024 octets) 

$repertoires = array(	// chemins à modifier
	'Images'		=>	'./images/',
	'Gym'			=>	'./gym/',
	'Locations'	=>	'./images/locations/'
);

$erreur = false;
$repertoire = !empty($_POST['repertoire']) && array_key_exists($_POST['repertoire'], $repertoires) ? $_POST['repertoire'] : 'Images';

$upload_errors = 	array(
	// Erreurs liées à l'upload
	1	=>	'L\'image doit être inférieure à ' . $poids_max/1024 . 'Ko.',
	2	=>	'L\'image doit être inférieure à ' . $poids_max/1024 . 'Ko.', 
	3	=>	"Le fichier n'a été que partiellement téléchargé",
	4	=>	'Vous devez sélectionner un fichier',
	6	=>	'Un dossier temporaire est manquant.',
	7	=>	"Échec de l'écriture du fichier sur le disque",
	8	=>	"Une extension PHP a arrété l'envoi de fichier",
);
if($_SERVER['REQUEST_METHOD'] == 'POST') {
	if( empty($_FILES) ) {
		$erreur = 'L\'image doit être inférieur à ' . $poids_max/1024 . 'Ko.'; 
	} elseif($_FILES['fichier']['error'] != 0) { 
		$erreur = $upload_errors[$_FILES['fichier']['error']];
	} elseif($_FILES['fichier']['size'] > $poids_max) { 
		$erreur = 'L\'image doit être inférieur à ' . $poids_max/1024 . 'Ko.'; 
	} elseif( !$size = getimagesize($_FILES['fichier']['tmp_name']) ) {
		$erreur = 'Le fichier n\'est pas une image valide.'; 
	} else {
		$mime_types = array(
			1 => 'gif', 
			2 => 'jpg', 
			3 => 'png'
		);
		if( !array_key_exists( $size[2], $mime_types) ) {
			$erreur = 'Le fichier n\'est pas une image valide.';
		}
	}
	// Si il y a une erreur on l'affiche sinon on peut télécharger 
	if(!empty($erreur)) { 
		echo '<p>' . $erreur . '<br><a href="javascript:history.back(1)">Retour</a></p>'; 
	} else {
		$nom_fichier = uniqid().'.'.$mime_types[$size[2]];
		// On télécharge le fichier sur le serveur. 
		if (move_uploaded_file($_FILES['fichier']['tmp_name'], $repertoires[$repertoire].$nom_fichier)) { 
			echo '<p>Votre image à été téléchargée sur le serveur avec succès !</p><p><img src="'.$repertoires[$repertoire].$nom_fichier.'" alt=""' .$size[3].' />'; 
		} else {
			echo 'L\'image n\'a pas pu être téléchargée sur le serveur.'; 
		} 
	}
} else { 
?>
<form method="post" action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" enctype="multipart/form-data">
	<p>
		<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $poids_max; ?>" />
		<label for="fichier">Image : </label>
		<input type="file" name="fichier" id="fichier" />
	</p>
	<p>
		<label for="repertoire">Destination : </label>
		<select name="repertoire" id="repertoire">
		<?php
		foreach($repertoires as $key=>$value) {
			echo '<option value="'.$key.'">'.$key.'</option>'."\n";
		}
		?>
		</select>
	</p>
	<p>
		<input type="submit" value="Envoyer" />
	</p>
</form> 
<?php } ?>
</body> 
</html>

Modifié par Heyoan (10 Sep 2010 - 20:12)
Bonjour à toutes et tous .

Heyoan , hier tu a posté un script et tu me disais dans le commentaire que c'était dangereux car on pouvais "pirater" mon script . Tu ajoutais comme cela .

Aujourd'hui mon ordinateur a de drôle de comportements : une image disque apparait sur le bureau
que je ne parviens pas à enlever , tout le contenu de mon dossier de téléchargements et passé dans la corbeille . ect...

Alors ???

Merci de donner l'antidote ..
Je te mettais en garde contre une faille de sécurité mais j'avais dit une bêtise puisque tu vérifiais déjà l'extension des images et qu'il n'y avait pas de risque. Comme je m'en suis rendu compte et que tu n'avais pas encore répondu j'ai supprimé ce passage mais je n'avais pas pensé que tu avais reçu ma première réponse par mail. Smiley smile

Du coup je ne vois pas du tout de quoi tu parles ni le rapport avec le script d'upload.
Bonjour à toutes et tous .

Excuse -moi .

J'ai pensé que tu m'avais fait une "blague " pour m'apprendre à me protéger .

Toujours est-il qu'une image apparait sur mon bureau .. non deux : net et home ...?????

Si vous avez une idée .

Cordialement.
Administrateur
Bonjour,

Il n'y a (il ne peut y avoir) aucun rapport entre les fichiers placés sur un serveur web et une infection de ton ordinateur personnel par un virus/troyen/malware/etc
L'inverse (un virus sur ton ordianteur qui permet d'infecter un de tes sites) est possible, ça m'est arrivé mais dans le sens serveur -> ordinateur personnel non.

Modo ou pas, expert ou pas, personne ici n'a accès à ton ordinateur à part toi et ta famille.

Il n'empêche que d'après la description que tu en fais, tu as bel et bien un problème sérieux avec ton ordinateur perso :
- ça n'a pas de rapport direct avec le thème de ce Forum
- commence par changer tous tes mots de passe ordi (et il est une bonne pratique d'en choisir des difficilement devinables et de ne pas utiliser le même partout genre le même pour ton ordinateur, ton mail, ton serveur, sur les sites, etc)
- demande-toi si ce ne serait pas un logiciel installé dont ce serait la fonction de créer une image disque et un nettoyage automatique trop poussé qui aurait supprimé le contenu d'un dossier. On y pense pas toujours au moment où on les utilise Smiley smile
- nettoie ton ordinateur. Sur PC Antivir, CCleaner, Malware anti-bytes, etc mais je vois dans ton profil que tu as un Mac. Une image disque ça peut être une clef USB ou un logiciel, déconnecte-toi du réseau (wifi et câble Ethernet), éteins, rallume et réessaie ?? Sinon pose la question sur un forum d'utilisateurs Mac : c'est assez peu sensible aux virus ces bêtes-là même si ç'est quand même sensible aux failles de sécurité des logiciels pas à jour et des endroits pas sûrs comme le WiFi public non sécurisée (ça c'est une vraie sal***rie)
- (si c'est le cas mais j'en sais rien, je parle en général Smiley baille ) évite de visiter des sites à risque (téléchargement illégaux, coquins et "trop beaux pour être vrais") et si c'est le cas avec un navigateur type Firefox ou Safari à jour, pas IE.
- quand tu es certain que le nettoyage est fait, rechange tes mots de passe ordi ET change tout ce qui était enregistré sur ton ordi (mots de passe du serveur dans Filezilla, connexion aux bases de données du serveur inscrits dans les fichiers PHP que tu conserves sur ton ordi avant de les envoyer via Filezilla, mots de passe de sites web enregistrés dans le navigateur, comptes MSN, comptes mails, banque, Paypal, etc) ... Il y en a une tripotée
- (si c'est le cas) discute 2 minutes avec toutes les personnes ayant accès à ton ordinateur pour ce qui concerne sites visités, sérieux des mots de passe et informations échangées sur le web

L'antidote c'est donc un nettoyage puis de la prévention à l'avenir Smiley smile
Bonjour Felipe .

Merci pour tes réponses .

J'ai déjà tout changé et nettoyé .. jusqu'à la prochaine fois .
a écrit :
Felipe Modo ou pas, expert ou pas, personne ici n'a accès à ton ordinateur à part toi et ta famille.


Je suis septique , pas sur les modo d' alsacréation en particulier mais sur les forums en général .

Cordialement.
Administrateur
Comme tout webmaster de site, j'ai accès à ton IP, le navigateur que tu utilises et sur quel système d'exploitation il tourne (et on pourrait ajouter la liste complète des plugins comme Flash, Silverlight, VLC, ... avec leur numéro de version).
Avec certains FAI ça suffit à te géolocaliser et à savoir dans quel village ou quartier tu habites (ce sera plus simple avec le village de 200 habitants de mes parents qu'avec le quart d'un arrondissement parisien !).
Puisque c'est un forum et que je suis un des admins, j'ai accès à ton mail d'inscription et je pourrais avoir ton mot de passe si on (dew) le souhaitait.

Si tu utilises le même mot de passe partout, alors je peux accéder à un nombre incalculable des services que tu utilises Smiley jap
Mais un admin/webmaster pourrait aussi tomber sur un membre qui le fait exprès et qui va le prendre sur le fait d'utilisation frauduleuse de données. Sur un site comme Alsacréations ça ferait une jolie réputation dans le monde du web francophone ! Smiley biggol

Sinon qu'est-ce que je pourrais bien faire de ces données sans mot de passe ? Ca va pas me faire rentrer sur ton ordinateur et encore moins si c'est un Mac avec Firefox (i.e 2 systèmes plus fiables que la moyenne et bien à mis à jour, contrairement par exemple à un Windows cracké qui n'aura jamais été mis à jour depuis des mois ou des années ...).
Si en plus ton WiFi a une sécurité WPA2 ou que tu l'as désactivé, je pourrai rien en restant en bas de chez toi non plus.
Il reste l'humain : toi qui visite un site ou installe un logiciel pourri, un ami ou collègue qui te refile une clef USB ou un mail du même tonneau, etc

Sinon se méfier est une sage précaution, pas de doute Smiley jap
Bonsoir.
Felipe .
a écrit :

Si tu utilises le même mot de passe partout, alors je peux accéder à un nombre incalculable des services que tu utilises

C'était bien ce que je pensais .
Mais laisserais tu des traces dans mon ordi ??

Cordialement.