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

Symfony PHP Discussion :

[Symfony] Téléchargements groupés avec des checkBox


Sujet :

Symfony PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 71
    Points : 24
    Points
    24
    Par défaut [Symfony] Téléchargements groupés avec des checkBox
    Bonjour , je suis bloqué sur un problème depuis maintenant 2 Semaines .

    Je vous explique .

    J'ai , dans mon problème plusieurs fichiers.

    Pour commencer j'ai ce tableau , ou dans chaque ligne il y a une checkBox . Chaque ligne correspond a un fichier , et mon objectif est de cliqué sur des checkBox et de cliquer sur un bouton Tout Télécharger. Je ne peux faire un formulaire comprenant le tableau entier car pour chaque ligne du tableau il y a déjà un formulaire sur le Bouton "Supprimer" pour corriger la faille crsf.



    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    <table id="searchTable" class="table-responsive">
     
                <thead>
     
     
                <th></th>
                <th class="col-md-2">Nom du document</th>
                <th class="col-md-1">Type de document</th>
                <th class="col-md-1">Date de création</th>
                <th class="col-md-1">Télécharger</th>
                <th class="col-md-2">Actions</th>
     
                </thead>
     
                <tbody>
     
     
     
     
     
                {% for file in files %}
     
     
     
                    {% set path = ico_exist(file) %}
     
                    <tr>
     
     
                        <td class="col-md-1"><input type="checkbox" class="files" id="{{ file.id }}"></td>
                        <td>{{ file.name }}</td>
                        <td>{{ file.doctype.name }}</td>
                        <td>{{ file.date.format('Y-m-d')}}</td>
                        <td class="col-md-1"><a href="{{ path('sa_platform_file_download',{'id':file.id}) }}"><img src="{{ asset(path) }}" class="ico"/></a></td>
                        <td>
                            <button onclick="location.href='{{ path('sa_platform_file_view',
                            {'id':file.id,
                                    'date':file.date.format('YmdHis'),
                                    'ext':file.ext}) }}'" class="col-md-4"
                            >
                                <span class="glyphicon glyphicon-eye-open color-blue"></span>
     
                            </button>
                            <button onclick="location.href='{{ path('sa_platform_file_edit',{'id':file.id}) }}'" class="col-md-4">
                                <span class="glyphicon glyphicon-edit color-green"></span>
                            </button>
                            {% if is_granted('ROLE_BUSINESS') %}
                                {{ form_start(file.validForm,{'attr':{'action':path('sa_platform_file_remove',{'id':file.id})}}) }}
                                <button type="submit" class="col-md-4"
                                        onclick="return confirm('Etes vous sur de vouloir supprimer le fichier?');">
                                    <span class="glyphicon glyphicon-remove color-red"></span>
                                </button>
                                {{ form_end(file.validForm) }}
                            {% endif %}
     
                        </td>
     
                    </tr>
     
     
     
     
     
                {% endfor %}
     
     
                </tbody>
            </table>
     
     
            <button id="down">Down</button>




    Ensuite , j'ai ce script là , qui gère l'appuis du bouton et récupère les Checkbox pour mettre leur valeur dans un Array.



    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
    /**
     * Created by santanas on 19/10/16.
     */
     
     
        $(document).ready(function(){
     
            $('#down').on('click', function(){
                var sel=[];
                $(".files:checked").each( function(){
                    sel.push( $(this).attr('id') );
                });
                console.log(sel);
     
                $.post(downloadPath,{'files[]':sel });
            });
     
     
     
        });

    Puis le controlleur , comme vous le verrez j'ai mis certaines lignes en commentaire , ceci étant pour faire des tests. Pour l'instant , avant toute chose je voudrait que lorsque je clique sur le bouton tous les fichiers se téléchargent. Le seul problème , c'est que lorsque (en phase test) je vais sur la route qui actionne le controlleur , le téléchargement se fait bien , mais lorsque je clique sur le bouton dans ma page "index" , symfony appelle bien le controlleur avec Post et tout a l'air de bien se passer mais , rien ne se passe ,aucun téléchargement n'est lancé.

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    public function groupedDownloadAction(Request $request)
        {
     
            //$files_id = $request->request->get('files');
     
     
     
     
            $files = $this->getDoctrine()->getRepository('SAPlatformBundle:File')->findAll();
     
           /* foreach ($files_id as $id)
            {
                $files[] =  $this->getDoctrine()->getRepository('SAPlatformBundle:File')->find($id);
     
     
            }*/
     
                $webdir = $this->get('kernel')->getRootDir().'/../web/tmpFile/';
                $date = new \DateTime;
                $zip_name = $webdir.$date->format('YmdHis').'.zip';
                $zip = new \ZipArchive();
                $zip->open($zip_name,\ZipArchive::CREATE);
     
            foreach ($files as $file)
                {
                    $file->setPath();
                    $zip->addFile($file->getPath());
                }
                $zip->close();
     
                //Download
     
            header('Content-Type: application/zip');
            header('Content-disposition: attachment; filename='.$zip_name);
            header('Content-Length: ' . filesize($zip_name));
            readfile($zip_name);
     
                return $this->redirectToRoute('sa_platform_index');
     
     
     
     
     
        }

    Alors, est-ce que j'ai fait le bon choix sur ma façon de faire? Y a il une autre façon de faire la même chose de façon plus optimisée? Que faire ? Je suis bloqué et cela me rend fou !



    Merci d'avance les amis.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Points : 1 022
    Points
    1 022
    Par défaut
    Bonjour,
    une autre façon de voir très différente.
    on peux ne pas utiliser les formulaires .
    Chaque input checkbox a un " name[ ]= "
    Ensuite dans le code on récupère l'array name ( par POST ) qui contient tout les checkbox cochés pour les utiliser ailleurs .
    Si par exemple tu veux que chaque fichier correspond a un checkbox , il suffit de la faire dans la boucle des fichiers.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 71
    Points : 24
    Points
    24
    Par défaut
    Merci de votre réponse , si j'ai bien compris , je ne fais pas de script Jquery , mais je récupère dans mon controlleur tous les checkbox par $_POST('names"), et je fais le tri pour ne sélectionner que les Checkbox , et je regarde si elles sont checked? Et si c'est le cas je récupère leur value , qui est égale a l'id du fichier? Ou alors j'ai rien compris? . On peut récupérer des élements HTML en php?

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Points : 1 022
    Points
    1 022
    Par défaut
    Bonjour ,
    je reformule
    Dans l'action contrôleur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    use Symfony\Component\HttpFoundation\Request;
    //
    public function indexAction(Request $request) {
                    $inputcheckbox = $this->getRequest()->get('name');
    et dans twig
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     <input type="checkbox" name="name[]" value="{{i}}"   >
    la valeur {{ i }} peut etre l'indice dans la boucle.
    Un checkbox non coché va retourner un NULL sinon il renvoie la value {{i}}.
    Enfaîte tu va avoir suite au submit , un array " name " qui va contenir tout les inputs cochés , array ( key,value ) ou les valeurs sont les {{ i }}

    Le code JQuery est dans ce cas inutile sauf si tu veux faire un bouton par exemple (Cocher tous ,Décocher Tous)

Discussions similaires

  1. [MySQL] Probleme d'affichage avec des checkbox
    Par napz dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 08/11/2006, 14h43
  2. FileListBox avec des checkbox..
    Par tazthedev dans le forum Delphi
    Réponses: 1
    Dernier message: 09/10/2006, 16h34
  3. Réponses: 1
    Dernier message: 26/06/2006, 11h33
  4. [Tableaux] Problème de foreach avec des checkboxes
    Par nanor21 dans le forum Langage
    Réponses: 10
    Dernier message: 15/05/2006, 01h04
  5. Problème simple avec des checkbox
    Par nanor21 dans le forum Langage
    Réponses: 2
    Dernier message: 07/05/2006, 00h26

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