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"/>


    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é, ...
        Administrateur certifié Joomla! 3
        https://www.betterweb.fr

        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é, ...
            Administrateur certifié Joomla! 3
            https://www.betterweb.fr

            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
                      Aucune annonce pour le moment.

                      Partenaire de l'association

                      Réduire

                      Hébergeur Web PlanetHoster
                      Travaille ...
                      X