gestion d'upload par catégories

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 : gestion d'upload par catégories

Re: gestion d'upload par catégories

par zoukie » 21 oct. 2011, 23:18

salut !
voila j'avais mis de codé ce script, mais maintenant je m'y remet ;)
bon j'ai fais des améliorations mais encore un problème des erreurs que je ne comprend pas et que je n'arrive pas à résoudre !
voici mon code:

<?php

session_start();
header('Content-type: text/html; charset=utf-8');
include('./includes/config.php');

include('./includes/fonctions.php');
connexionbdd();
actualiser_session();

$titre = 'Inscription';

include('./includes/haut.php');

include ('./includes/colg.php'); 

?>
<div id="contenu">
<p>voici la page d'upload de maps,</br>
veuillez séléctionner les catégories qui sont liés à votre upload:</p>
<form method="POST" action="upload.php" enctype="multipart/form-data">	
<p>choix du jeux</p>
                                <select name="choix">
                                     <option value="css">counter-strike:source</option>
                                     <option value="tf2">tf2</option>
                                     <option value="dods">dods</option>
                                     <option value="cs16">counter-strike 1.6</option>
                                </select>

     <input type="hidden" name="MAX_FILE_SIZE" value="50000000">
     Fichier : <input type="file" name="map">
     <input type="submit" name="envoyer" value="Envoyer la map">

</form> 
</div>
<?php
$dossier = $dossier . $_POST['choix'] . './mapsatraiter/';
$fichier = $basename($_FILES['map']['name']);
$taille_maxi = 50000000;
$taille = $filesize($_FILES['map']['tmp_name']);
$extensions = array('.png', '.gif', '.jpg', '.jpeg');
$extension = $strrchr($_FILES['map']['name'], '.'); 

if(!in_array($extension, $extensions)) 
{
     $erreur = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt ou doc...';
}
if($taille>$taille_maxi)
{
     $erreur = 'Le fichier est trop gros...';
}
if(!isset($erreur)) 
{
     $fichier = strtr($fichier, 
          'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
          'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
     $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
     if(move_uploaded_file($_FILES['map']['tmp_name'], $dossier . $fichier)) 
     {
          echo 'Upload effectué avec succès !';
     }
     else 
     {
          echo 'Echec de l\'upload !';
     }
}
else
{
     echo $erreur;
}
?>
<?php
include('./includes/bas.php');
mysql_close();
?>
et voici mes erreurs :

Image

voila sinon je commence a regarder la classe de AB mais j'aimerai bien réussir sa de moi même =p
@ ++++

Re: gestion d'upload par catégories

par AB » 13 oct. 2011, 04:35

Une classe c'est un ensemble de fonctions qui sont regroupée dans un "conteneur" dont le nom commence par le mot "class".

La classe dont je te parle se trouve vers la fin de ce message (précédé du titre "La classe"). Donc tu clique pour sélectionner tout le code et tu le copie dans une page vierge de ton site que tu enregistreras sous le nom "class_upload.php". Voilà pour la mise en place de la classe de téléchargement. Normalement tu n'auras plus à toucher à ce fichier.

Ensuite dans le même répertoire où tu as mis le fichier de la classe, tu crée un autre fichier dans lequel tu mets le script de ce message.
Tu vois qu'en deuxième ligne de ce script on fait appel à la classe avec "require('class_upload.php');".

Ensuite la ligne
 $dossiers_autorise = array('nature','sport','portraits','autres');
défini les dossiers. Donc si tu as des dossiers nommés CSS, TF2, dods, cs16, il te suffit de remplacer cette ligne par
 $dossiers_autorise = array('CSS','TF2','dods','cs16');
Plus loin dans le code tu complète avec les extensions que tu souhaites autoriser dans
$extensions = array("jpeg", "jpg");
(tu écris les extensions sans le "." devant).

Dernière chose tu modifies les valeurs 1000 (largeur maximum) et 800 (hauteur maximum) de la ligne
$up->Set_Redim ('1000','800');
selon tes propres valeurs si tu veux faire un redimensionnement automatique des images, ou tu supprime cette ligne si te ne souhaite pas faire de redimensionnement des images.

Voilà normalement tu as déjà quelque chose de fonctionnel sans rien modifier de plus :) (le select se construit automatiquement)

Re: gestion d'upload par catégories

par zoukie » 13 oct. 2011, 00:32

Merci a toi !
Désolé mais je suis un gros débutant en php et je ne sais même pas ce qu'est une classe .... Je vais lire ton tuto, et voir tout sa.
Pour les choix je l'ai déjà fait et les noms de mes dossiers son cours sans espaces ni points (ex: CSS, TF2, dods, cs16 ).
Merci encore a vous !

Re: gestion d'upload par catégories

par AB » 12 oct. 2011, 23:53

Et puis dans ton select c'est la valeur (value) de l'option qui sera récupérée dans $_POST['choix'].

Tu as donc intérêt à mettre les valeurs des dossiers de destination que tu veux récupérer en fonction du choix, genre :
<select name="choix">
<option value="counter_strike_source">counter-strike:source</option>
<option value="tf2">tf2</option>
<option value="dods">dods</option>
<option value="counter-strike-1.6">counter-strike 1.6</option>
</select>
Sinon l'intérêt d'utiliser la classe, (merci xTG :) ) c'est qu'elle intègre une gestion des erreurs, un renommage des fichiers (si déjà existants sur le serveur) et d'autres options, qu'il te faudra pas mal de temps à coder (sans même parler des options dont tu n'as pas besoin) pour faire l'équivalent. C'est pratique ceux qui ne veulent pas se prendre la tête et avoir un code complet. Maintenant si tu veux apprendre, il y a aussi ce tuto

Autre remarque, évites de mettre des espaces ou des caractères spéciaux (autres que '_' , '-', '.') dans tes noms de dossiers, ça t'éviteras d'éventuels problèmes.

Re: gestion d'upload par catégories

par zoukie » 12 oct. 2011, 20:52

Merci a vous sa va bien m'aider !! (je suis un gros noob en php e passerais souvent ! Bon aller a plus j vais vois ce que je peux faire avec vos conseil pour mon code ;)

Re: gestion d'upload par catégories

par xTG » 12 oct. 2011, 20:21

Il t'a au contraire très bien conseillé, la class PHP indiquée est très bien conçue pour l'upload de fichier, plutôt que les nombreux codes maisons incomplets qu'on trouve sur le net.

Concernant ta requête, ce n'est qu'un problème de concaténation.
Tu fournis le nom du dossier grâce à ton formulaire, il suffit donc de le récupérer et de le concaténer au lien final de l'upload.
Pour ton code ce serais en très basique de ce genre :
$dossier = $dossier . $_POST['choix'] . '/';
Ainsi l'upload renverrai vers mapsatraiter/choix1/ par exemple.

Re: gestion d'upload par catégories

par Zahnzao » 12 oct. 2011, 20:19

Salut,

Lorsque tu envoie le formulaire, la valeur sélectionnée dans ta liste est envoyée en $_POST, ici en l’occurrence dans la variable $_POST['choix'].

En partant de la, tu n'a plus qu'a tester cette valeur dans ton fichier upload.php pour envoyer le fichier dans le bon dossier.

A noter que tu dois inclure ta liste entre les balises <form> et </form> et non avant comme tu l'as fait.

Re: gestion d'upload par catégories

par zoukie » 12 oct. 2011, 19:59

bonsoir, je crois que tu n'as pas compris ce que je voulais dire; voila ma page html que j'ai retouché tu va comprendre ce que je voulais dire.
p>voici la page d'upload de maps,</br>veuillez séléctionner les catégories qui sont liés à votre upload:</p>

<p>choix du jeux</p><select name="choix">
                                <option value="choix1">counter-strike:source</option>
                                <option value="choix2">tf2</option>
                                <option value="choix3">dods</option>
                                <option value="choix4">counter-strike 1.6</option>
                                </select>
<form method="POST" action="upload.php" enctype="multipart/form-data">	
     <input type="hidden" name="MAX_FILE_SIZE" value="50000000">
     Fichier : <input type="file" name="map">
     <input type="submit" name="envoyer" value="Envoyer la map">

</form> 
ce dont je te parlais en fait c'est du choix du jeux, par exemple un utilisateur choisit le jeux counter strike source pour uploader sa map quand il uploadera sa map je veux qu'elle soir uploadé dans le dossier counter strike source; pareil pour les autres jeux tf2 la map soit uploadée danc un dossier tf2

en espérant avoir une réponce rapide
cordialement zoukie
@ ++

Re: gestion d'upload par catégories

par zoukie » 12 oct. 2011, 07:52

Ok merci a toi pour m'avoir aidé, je reposterai ici si j'ai un problème ;)

@+

Re: gestion d'upload par catégories

par AB » 12 oct. 2011, 01:10

Il y a un exemple tout fait ici Cet exemple utilise une classe que tu devras charger (elle se trouve dans le 1er message du topic en lien) si tu veux faire fonctionner le script tel quel. Sinon tu peux regarder et te servir uniquement de la première partie du script qui concerne la récupération de la catégorie, et le code html qui va avec, puis intégrer ton propre code php de téléchargement (plutôt que d'utiliser la classe de téléchargement).

gestion d'upload par catégories

par zoukie » 12 oct. 2011, 00:32

salut ! je viens de découvrir ce forum en cherchant de l'aide a mon problème, donc je m’arrête ici pour vous demander de l'aide, voici mon problème:
je voudrai faire un upload par catégories c'est a dire que l'utilisateur devra sélectionner une catégorie ( ou plusieurs ) et en fonction de la catégorie choisie le fichier uploadé sera placé dans un dossier du serveur lié à la catégorie. ici c'est un upload de map (couter strike source ou autre jeux vidéos) et ce serait pour trier les maps uploadés pour que je ne passe pas trois heures après a trier les maps ^^'

voici ma page html de base avec l'envoi du fichier ( dans la demande de catégories parce que je ne sais pas comment on fait ><):
<p>voici la page d'upload de maps,</br>veuillez séléctionner les catégories qui sont liés à votre upload:</p>
<form method="POST" action="upload.php" enctype="multipart/form-data">	
     <input type="hidden" name="MAX_FILE_SIZE" value="50000000">
     Fichier : <input type="file" name="map">
     <input type="submit" name="envoyer" value="Envoyer la map">

</form> 
et voici le formulaire ou est renvoyé le fichier:
<?php
$dossier = 'mapsatraiter/';
$fichier = basename($_FILES['map']['name']);
$taille_maxi = 50000000;
$taille = filesize($_FILES['map']['tmp_name']);
$extensions = array('.png', '.gif', '.jpg', '.jpeg');
$extension = strrchr($_FILES['map']['name'], '.'); 

if(!in_array($extension, $extensions)) 
{
     $erreur = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt ou doc...';
}
if($taille>$taille_maxi)
{
     $erreur = 'Le fichier est trop gros...';
}
if(!isset($erreur)) 
{
     $fichier = strtr($fichier, 
          'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
          'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
     $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
     if(move_uploaded_file($_FILES['map']['tmp_name'], $dossier . $fichier)) 
     {
          echo 'Upload effectué avec succès !';
     }
     else 
     {
          echo 'Echec de l\'upload !';
     }
}
else
{
     echo $erreur;
}
?>
voila pourriez vous me dire comment procéder pour envoyer les fichiers uploadés par catégories ? merki !
cordialement zoukie