Restreindre un champ de type FILE aux formats JPG, PNG et GIF

Réduire
X
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [RÉGLÉ] Restreindre un champ de type FILE aux formats JPG, PNG et GIF

    Bonsoir,

    Dans un formulaire j'ai besoin d’utiliser des champs de type "file" pour permettre l'upload d'images.
    Dans le champ (fichier xml) j'ai ajouté l'attribut accept="image/*" au champ "file".
    (J'ai également essayé accept=".gif, .jpg, .png")

    Code:
    <field name="photoprincipale" type="File" label="PHOTOPRINCIPALE" description=" " accept="image/*" />
    <field name="photo3" type="File" label="PHOTO2" description=" " accept=".gif, .jpg, .png"/>
    https://docs.joomla.org/File_form_field_type/fr

    Mais l'upload n'est pas restreint au chargement de fichiers images. J'ai testé avec un fichier Word (.doc), le fichier est uploader.

    Quelqu'un saurait-il comment restreindre le type de fichier uploadable aux formats jpg, png et gif ?

    Cordialement.

    Eric

  • #2
    Salut

    Personnelement, j'utliserai une fonction javascript qui vérifie le nom du fichier en validation avant de transferer le fichier.

    Code PHP:
    function getExtension(myVar)
       {
       var 
    regFileExt = new RegExp("\.(png|gif|jpg|jpeg)$","i");
       return 
    regFileExt.test(myVar);
       } 
    ++

    Commentaire


    • #3
      Bonjour,
      J'ai fait un contrôle (code php) au niveau des extensions de fichiers mais une fois déposée, cela fonctionne mais rien n'empêche l'utilisateur de déposer autre chose qu'un fichier jpd, png ou gif.

      Merci beaucoup, je vais regarder dans cette direction.
      Je dépose ce code dans mon fichier annonceform.php ?
      J'offre la possibilité de déposer 4 photos, à quel endroit je peux différencier ces 4 photos?

      Cordialement.

      Eric

      Commentaire


      • #4
        Un gestionnaire de formulaire comme Fabrik vous permet de faire cela très bien et très facilement.
        Tous les services pour les sites Joomla! : sécurité, nettoyage de sites piratés, hébergement, SEO, applications Fabrik, migration, compatibilité mobiles, accessibilité, ...

        https://www.betterweb.fr/services

        Commentaire


        • #5
          Bonjour jfique, mais là il s'agit d'Easysocial, mon composant reprend des lignes de commandes ES.

          J'ai:
          Code PHP:
          <div class="format-bloc">
              <?php foreach((array)$this->item->pays as $value): ?>
                  <?php if(!is_array($value)): ?>
                      <input type="hidden" class="pays" name="jform[payshidden][<?php echo $value?>]" value="<?php echo $value?>" />
                  <?php endif; ?>
              <?php endforeach; ?>
              <?php echo $this->form->renderField('photoprincipale'); ?>

                          <?php if (!empty($this->item->photoprincipale)) : ?>
                              <?php $photoprincipaleFiles = array(); ?>
                              <?php foreach ((array)$this->item->photoprincipale as $fileSingle) : ?>
                                  <?php if (!is_array($fileSingle)) : ?>
                                      <a href="<?php echo JRoute::_(JUri::root() . 'uploads' DIRECTORY_SEPARATOR $fileSinglefalse);?>"><?php echo $fileSingle?></a> | 
                                      <?php $photoprincipaleFiles[] = $fileSingle?>
                                  <?php endif; ?>
                              <?php endforeach; ?>
                          <?php endif; ?>

                          <input id="photoprincipale" type="hidden" name="jform[photoprincipale_hidden]" id="jform_photoprincipale_hidden" value="<?php echo implode(','$photoprincipaleFiles); ?>" />
              </div>
          Pour le script, j'ai fait:

          Code:
          <script type="text/javascript">
          var photoprincipale = <?php echo $photoprincipaleFiles: ?>;    
              function getExtension(photoprincipale)
             {
             var regFileExt = new RegExp("\.(png|gif|jpg|jpeg)$","i");
             return regFileExt.test(photoprincipale);
             }
          </script>
          Mais il y a un soucis.
          Erreur 500.

          Cordialement.

          Eric

          Commentaire


          • #6
            Je ne sais pas ce que vous cherchez à faire par rapport à Easysocial, mais Fabrik peut se connecter à n'importe quelle table de la base de données et vous pouvez créer un formulaire pour ajouter des données dans cette table. Le plugin de champ "fileupload" permet d'uploader des images, avec possibilité de créer des vignettes, de recadrer, d'uploader plusieurs images, ...
            Tous les services pour les sites Joomla! : sécurité, nettoyage de sites piratés, hébergement, SEO, applications Fabrik, migration, compatibilité mobiles, accessibilité, ...

            https://www.betterweb.fr/services

            Commentaire


            • #7
              Bonjour,
              Désolé pour l'erreur 500 dont je faisais part dans un de mes posts précédents, c'est ma faute, j'ai mis : à la place de ; dans la variable JS qui récupère la variable php.
              Je teste la suite.

              En fait je fais appel à des API Eaysocial (Pour les afficher par exemple des popup) il ne s'agit pas que d'exploiter des données hébergées dans des tables.
              Pour le recadrage, j'utilise cropresize, mais je ne connais pas du tout Fabrik, je m'y pencherai cela à l'air assez pratique.

              Cordialement.

              Eric

              Commentaire


              • #8
                Bonjour,
                J'ai utilisé une autre solution, qui inspecte le contenu du champ, qui autorise l'utilisation du fichier que quand celui-ci n'est que: jpeg ou jpg ou png ou gif.
                Cela fonctionne bien.

                Cela ne bloque pas au moment de l'upload, mais je n'ai pas réussi à avoir de résultat fiable avec la script.

                Voici ce que j'ai fait:

                $an_annonce['photoprincipale'] est le résultat du foreach qui indique le nom de la photo stockée dans la base de données.

                Code PHP:
                $NoPhoto "google-camera.jpg";

                            
                // Détecter le format de la photo .jpg ou .jpeg ou .gif ou .png //            
                            
                $pos_separator1 strpos($PhotoPrincipale,'.',1);
                            
                $extension1 substr($PhotoPrincipale$pos_separator1 +1);            

                            if (
                $extension1 == "jpg")
                                {
                $LaPhoto1 $an_annonce['photoprincipale'];}
                            else if (
                $extension1 == "jpeg")
                                {
                $LaPhoto1 $an_annonce['photoprincipale'];}
                            else if (
                $extension1 == "gif")
                                {
                $LaPhoto1 $an_annonce['photoprincipale'];}
                            else if (
                $extension1 == "png")
                                {
                $LaPhoto1 $an_annonce['photoprincipale'];}
                            else {
                $LaPhoto1 $NoPhoto;} 
                Merci pour votre aide.

                Cordialement.

                Eric
                Dernière édition par Agrepe à 31/05/2018, 09h59

                Commentaire


                • #9
                  Pour ma part j'utiliserai le framework de joomla :
                  A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
                  Rejoignez le Joomla Users Groupe Alsace...
                  roland_d_alsace va-t-il devenir roland_du_grand_est ?

                  Commentaire


                  • #10
                    Bonjour Roland,
                    Merci beaucoup pour ton aide.

                    Bien entendu, c'est ce que je fais habituellement, mais là, va savoir pourquoi, cela ne fonctionne pas.

                    Cela m'intéresse, je n'étais pas allé voir cela, je regarde de plus près.

                    Bien cordialement.

                    Eric


                    Commentaire


                    • #11
                      Quand je demande à ce que mon champ soit obligatoire, complété ou pas il est toujours vu comme vide, l'alerte se déclenche.
                      Je suis en Joomla 3.8.2, j'ai vu que j'appelais:
                      JHtml::_('behavior.formvalidation');
                      Alors, j'ai changé avec:
                      JHtml::_('behavior.formvalidator');

                      Comme le précise la doc. Mon submit à bien la class validate.
                      Code PHP:
                      <button type="submit" class="validate btn btn-primary">
                                                  <?php echo JText::_('JSUBMIT'); ?>
                                              </button>
                      Dans l'XML mon champ est:
                      Code HTML:
                      <field id="photoprincipale" name="photoprincipale" type="File" label="COM_ESOFFERS_FORM_LBL_ANNONCE_PHOTOPRINCIPALE" description="COM_ESOFFERS_FORM_DESC_ANNONCE_PHOTOPRINCIPALE" hint="COM_ESOFFERS_FORM_LBL_ANNONCE_PHOTOPRINCIPALE" required="true" />
                      Quand j'ajoute required="true" (ce qui fonctionne sur mes autres champs), le champ complété ou pas est toujours considéré comme vide.

                      J'ai tenté avec: class="required" et required="required" mais à chaque fois le champ complété ou pas est aussi toujours considéré comme vide.

                      Je ne sais plus trop quoi faire.

                      Cordialement.

                      Eric
                      Dernière édition par Agrepe à 01/06/2018, 15h49

                      Commentaire

                      Annonce

                      Réduire
                      1 sur 2 < >

                      C'est [Réglé] et on n'en parle plus ?

                      A quoi ça sert ?
                      La mention [Réglé] permet aux visiteurs d'identifier rapidement les messages qui ont trouvé une solution.

                      Merci donc d'utiliser cette fonctionnalité afin de faciliter la navigation et la recherche d'informations de tous sur le forum.

                      Si vous deviez oublier de porter cette mention, nous nous permettrons de le faire à votre place... mais seulement une fois
                      Comment ajouter la mention [Réglé] à votre discussion ?
                      1 - Aller sur votre discussion et éditer votre premier message :


                      2 - Cliquer sur la liste déroulante Préfixe.

                      3 - Choisir le préfixe [Réglé].


                      4 - Et voilà… votre discussion est désormais identifiée comme réglée.

                      2 sur 2 < >

                      Assistance au forum - Outil de publication d'infos de votre site

                      Compatibilité: PHP 4.1,PHP4, 5, 6DEV MySQL 3.2 - 5.5 MySQLi from 4.1 ( @ >=PHP 4.4.9)

                      Support Version de Joomla! : | J!3.0 | J!2.5.xx | J!1.7.xx | J!1.6.xx | J1.5.xx | J!1.0.xx |

                      Version française (FR) D'autres versions sont disponibles depuis la version originale de FPA

                      UTILISER À VOS PROPRES RISQUES :
                      L'exactitude et l'exhaustivité de ce script ainsi que la documentation ne sont pas garanties et aucune responsabilité ne sera acceptée pour tout dommage, questions ou confusion provoquée par l'utilisation de ce script.

                      Problèmes connus :
                      FPA n'est actuellement pas compatible avec des sites Joomla qui ont eu leur fichier configuration.php déplacé en dehors du répertoire public_html.

                      Installation :

                      1. Téléchargez l'archive souhaitée : http://afuj.github.io/FPA/

                      Archive zip : https://github.com/AFUJ/FPA/zipball/master

                      2. Décompressez le fichier de package téléchargé sur votre propre ordinateur (à l'aide de WinZip ou d'un outil de décompression natif).

                      3. Lisez le fichier LISEZMOI inclus pour toutes les notes de versions spécifiques.

                      4. LIRE le fichier de documentation inclus pour obtenir des instructions d'utilisation détaillées.

                      5. Téléchargez le script fpa-fr.php à la racine de votre site Joomla!. C'est l'endroit que vous avez installé Joomla et ce n'est pas la racine principale de votre serveur. Voir les exemples ci-dessous.

                      6. Exécutez le script via votre navigateur en tapant: http:// www. votresite .com/ fpa-fr.php
                      et remplacer www. votresite .com par votre nom de domaine


                      Exemples:
                      Joomla! est installé dans votre répertoire web et vous avez installé la version française du fichier FPA:
                      Télécharger le script fpa-fr.php dans: /public_html/
                      Pour executer le script: http://www..com/fpa-fr.php

                      Joomla! est installé dans un sous-répertoire nommé "cms" et vous avez installé la version française du fichier FPA:
                      Télécharger le script fpa-fr.php dans: /public_html/cms/
                      Pour executer le script: http://www..com/cms/fpa-fr.php

                      En raison de la nature très sensible de l'information affichée par le script FPA, il doit être retiré immédiatement du serveur après son utilisation.

                      Pour supprimer le script de votre site, utilisez le lien de script de suppression fourni en haut de la page du script. Si le lien de suppression échoue pour supprimer le script, utilisez votre programme FTP pour le supprimer manuellement ou changer le nom une fois que le script a généré les données du site et le message publié sur le forum. Si le script est toujours présent sur le site, il peut être utilisé pour recueillir suffisamment d'informations pour pirater votre site. Le retrait du script empêche des étrangers de l'utiliser pour jeter un oeil à la façon dont votre site est structuré et de détecter les défauts qui peuvent être utilisé à vos dépends.
                      Voir plus
                      Voir moins
                      Travaille ...
                      X