IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

traitement des extensions et taille image (formulaire) [Fait]


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 12
    Points : 7
    Points
    7
    Par défaut traitement des extensions et taille image (formulaire)
    bonjour
    je tente tant bien que mal de faire un formulaire qui upload des images et infos avec réception par mail.
    je reçois bien le mail avec toutes les infos, en tenant compte du poids imposé de l'image, sauf que je ne sais pas comment corriger le code pour:

    - gérer les extensions: accepter seulement jpg jpeg png et gif
    - créer un dossier à chaque uoload de manière à ne pas mélanger les image et eviter les erreurs de ma part
    - imposer une taille d'image
    - recevoir le texte sans caracteres spéciaux

    j'ai mis de bout de code mais je pense qu'ils ne sont pas rattachés...

    voici le code partie php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    $formTitre = $_POST['titre'];
    $formActivite = $_POST['activite'];
    $formNom = $_POST['nom'];
    $formPrenom = $_POST['prenom'];
    $formMail = $_POST['mail'];
    $formAdresse = $_POST['adresse'];
    $formCode_ville = $_POST['code_ville'];
    $formTelephone = $_POST['tel'];
    $formPortable = $_POST['port'];
    $formSite_web = $_POST['site_web'];
    $formGamme_prix = $_POST['gamme_prix'];
    $formZone_activite = $_POST['zone_activite'];
    $formFichier1 = $_FILES['fichier1'];
    $formDescription = $_POST['description']; 
     
    if (isset($_FILES['fichier1']) && $_FILES['fichier1']['error'] == 0) $erreur = "Erreur lors du tranfsert";
    	{
    {
    				$infosfichier = pathinfo($_FILES['fichier1']['name']);
                    $extension_upload = $infosfichier['extension'];
    $nom_fichier=$_FILES['fichier1']['name'];
                    $extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png');
            if (in_array($extension_upload, $extensions_autorisees)) 
    $fichier = preg_replace ("` `i","",$fichier);
    		if ($image_sizes[160] > $maxwidth OR $image_sizes[160] > $maxheight) $erreur = "Image trop grande";
    					{
    move_uploaded_file($_FILES['fichier1']['tmp_name'], 'uploads/' . basename($_FILES['fichier1']['name']));
                          @chmod('uploads/' . basename($_FILES['fichier1']['name']),0777);
    					}
    				}
    }
    et partie html dans le body:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <form id="form1" name="form1" enctype="multipart/form-data" method="post" action="formule_visibilite.php">
    <input type="hidden" name="MAX_FILE_SIZE" value="10000" />
                    <input name="fichier1" type="file" size="35" class="fond" accept="image/jpg" />
    la suite fonctionne, c'est par ici que ça ne fonctionne pas.

    par avance si qqu veut bien m'accorder un peu de son temps... un GRAND MERCI

  2. #2
    Membre régulier Avatar de TiEuAM
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 75
    Points : 101
    Points
    101
    Par défaut
    Salut, voici quelques indices :

    - extensions : voir l'élément type du tableau $_FILES reçu (fichier1)
    - créer un dossier : fonction mkdir de php
    - imposer une taille d'image : taille octet ou pixel ??
    - recevoir le texte sans caracteres spéciaux : c'est à dire ? tu veux garder que des lettres simples (abcde...123..) ??

  3. #3
    Futur Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    merci de ton intervention

    - je n'ai pas compris ce que tu voulais dire pour les extensions
    - ta réponse pour fonction mkdir de php crée un seul dossier non? je voudrais un dossier à chaque upload, si par exemple j'ai 10 formulaires remplis en une journée, je voudrais trouver 10 dossiers
    - la taille à imposer est en px, le poids en ko est déjà en place et fonctionne
    - le texte bien géré au niveau des caractères spéciaux, il ne gère pas les carac spéciaux comme é, à etc

    je vais toutefois approfondir mkdir en attendant plus d'info sur ce fil, merci de ton aide!

    So

  4. #4
    Membre régulier Avatar de TiEuAM
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 75
    Points : 101
    Points
    101
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $_FILES['fichier1']['type'];
    type du tableau $_FILES te retourne l'extension du fichier envoyé, donc tu peu le lire pour t'assurer que c'est bien un fichier que tu autorises.

    Il n'y a pas d'autre choix en php que mkdir, à chaque form rempli, tu peu très bien créer un répertoire, avec nom différent donc.

    Pour les images, tu peu faire un redimensionnement automatique, ou bien lire la taille pixel et interdire au dessu d'un certain seuil.
    voir les fonctions php/gd : getimagesize, imagecopyresampled

    Pour les caractères spéciaux, si c'est dans le nom du fichier de l'image, je suis pas sur que ce soit possible, tu vas devoir les convertir en non spéciaux.

  5. #5
    Futur Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    pardon mais je ne suis pas du tout développeuse, je débute comme tu as du le deviner... c'est la lutte...

    pour le type de fichier, il me faut bien lui dire quelque part les fichiers que j'autorise non? c'est en haut de page que je le détermine? si oui sous quelle forme?

    pour le mkdir, i semble créer un dossier manquant, mais je ne peux pas savoir à l'avance combien de dossier il me faut créer , le souci en laissant tout dans le dossier upload c'est le risque d'écrasement si deux images ont le même nom, à moins de pouvoir les renommer systématiquement et automatiquement avec un préfixe aléatoire?

    la redim des image est faite avant l'enregistrement? comme ce sont des images de photographes, je crains que ce soit mal géré?? si non, dans l'absolu je voudrais imposer une taille et si la taille ne répond pas à la contrainte indiquer que l'image n'est pas à la bonne taille (c'est ce que je voulais faire au départ avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($image_sizes[160] > $maxwidth OR $image_sizes[160] > $maxheight) $erreur = "Image trop grande";
    pour les carac spéciaux c'est dans le contenu texte que je reçois via le formulaire, pourtant j'ai mis ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(!empty($formTitre) && !empty($formActivite) && !empty($formNom) && !empty($formPrenom) && !empty($formMail) && !empty($formAdresse) && !empty($formCode_ville) && !empty($formTelephone) &&!empty($formPortable) &&!empty($formSite_web) &&!empty($formGamme_prix) &&!empty ($formZone_activite) ){ 
    //ok pas vide //on convertie les caractètres HTML du commentaire 
    	$formDescription = htmlentities($formDescription);
    mais ça ne fonctionne pas

  6. #6
    Membre régulier Avatar de TiEuAM
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 75
    Points : 101
    Points
    101
    Par défaut
    Mouarf, pas mal de ptite choses étaient manquante en fait, et tu ne peu contrôler la taille de l'image qu'une fois uploader qqpart sur ton serveur.

    Ca devrait mieux rouler, repars sur cet exemple.
    Tu n'as plus qu'a voir pour généré un nom de fichier aléatoire pour t'éviter la création de répertoires.
    exemple: tu transmets "mon-image.jpg", au final tu obtiendrais "aR7Klm8i-mon-image.jpg", ou les 8 premiers caractères sont tiré au hasard.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    <?php
    $erreur = '';
    $maxwidth = 160;
    $maxheight = 160;
    $extensions_autorisees = array('image/jpeg', 'image/pjpeg', 'image/gif', 'image/xpng', 'image/x-png', 'image/png');
    $emplacement = './uploads/';
     
    if(isset($_FILES['fichier1']) && $_FILES['fichier1']['error'] == 0) {
    	$infosfichier = pathinfo($_FILES['fichier1']['name']);
    	$nom_fichier = $_FILES['fichier1']['name'];
    	$extension_upload = $_FILES['fichier1']['type'];
    	$tmp_fichier = $_FILES['fichier1']['tmp_name'];
     
    	if(in_array($extension_upload, $extensions_autorisees)) {
    		$nom_fichier = preg_replace('` `i', '', $nom_fichier);
    		$chemin_complet = $emplacement.$nom_fichier;
    		if(!is_uploaded_file($tmp_fichier) && $erreur === '') { $erreur = 'Image non uploadé'; }
    		if(!move_uploaded_file($tmp_fichier, $chemin_complet) && $erreur === '') { $erreur = 'Image non copié'; }
    		if($erreur === '') {
    			$taille = getimagesize($chemin_complet);
    			$width = $taille[0];
    			$height = $taille[1];
    			if($width <= $maxwidth && $height <= $maxheight) {
    				chmod($chemin_complet, 0777); // N'importe qui peu editer/supprimer si tu laisses ça
    				}else{
    					@unlink($chemin_complet);
    					$erreur = 'Image trop grande';
    					}
    			}
    		}else{ $erreur = 'Fichier non autorisée'; }
    	}else{ $erreur = 'Erreur lors du tranfsert'; }
     
    echo $erreur;
    ?>

Discussions similaires

  1. [MySQL] Traitement des données sur une checkbox - Formulaire
    Par kenjiendo dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 08/08/2011, 11h35
  2. Traitement des données provenant d'un formulaire
    Par captainflex dans le forum Ruby on Rails
    Réponses: 2
    Dernier message: 03/05/2007, 15h21
  3. [Traitement d'image] Modification des couleur d'une image png
    Par lio33 dans le forum Webdesign & Ergonomie
    Réponses: 3
    Dernier message: 01/10/2006, 22h24
  4. [Upload] Upload d'image, restriction des extensions
    Par WeDgEMasTeR dans le forum Langage
    Réponses: 11
    Dernier message: 30/04/2006, 23h23
  5. [Formulaires] Traitement des données dans une autre page...
    Par sekiryou dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 04/03/2006, 09h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo