Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme de mise en place de datatables

    13 février 2019 à 10:04:07

    Bonjour à tous,

    après un temps d’arrêt en terme de programmation, je me remets en selle...

    et j'ai bien du mal:

    Mon but est juste de mettre en place un tableau en utilisant datatables (en mode serveur side bien sur)

    pour cela j'ai essayé de respecter la doc officielle ici :https://datatables.net/

    J'ai donc un fichier PHP principal comme suit :

    <?php
    include ("include/sw_head.php");
    include("include/5e_form_connexion.php"); 
    ?>
    
    
    	<div id="menu_sw"> <!-- Cadre 1er sous-menu -->
            <h3>Menu</h3> <!-- Titre du sous-menu -->
           <ul>
               <li><a href="sw_landspeeder.php">Landspeeder</a></li>
    		   <li><a href="sw_airspeeder.php">Airspeeder</a></li>
    		   <li><a href="sw_vl.php">Véhicules au sol</a></li>
               <li><a href="sw_vaisseaux.php">Vaisseaux</a></li>
              (blablabla)
               
               
    		 
               <li><a href="../index.php">Retour Accueil</a></li>
           
           </ul>
       </div>
      
    
     
    <div id="corps" >
     
    
    <table id="landspeeder" class="display"> 
       <thead>  <!-- En-tete du tableau -->
           <tr>
    			<th>ID</th>
                <th class="dataTableTH" >Nom</th>
                <th class="dataTableTH" >Nom FR</th>
                <th class="dataTableTH" >Gabarit</th>
                <th class="dataTableTH" >Vitesse</th>
                <th class="dataTableTH" >Maniabilité</th>
                <th class="dataTableTH" >Def Av</th>
                <th class="dataTableTH" >Def Ar</th>
                <th class="dataTableTH" >Blindage</th>
                <th class="dataTableTH" >Seuil DC</th>
                <th class="dataTableTH" >Seuil Sm</th>
                <th class="dataTableTH" >Altitude</th>
                <th class="dataTableTH" >Equipage</th>
                <th class="dataTableTH" >Charge Utile</th>
                <th class="dataTableTH" >Passagers</th>
                <th class="dataTableTH" >Prix</th>
                <th class="dataTableTH" >Rareté</th>
                <th class="dataTableTH" >Emplacements</th>
                <th class="dataTableTH" >Armes</th>
                <th class="dataTableTH" >Livre</th>
            </tr>
    
    </thead>
     <tfoot>  <!--pied du tableau -->
           <tr>
    			<th>ID</th>
                <th class="dataTableTH" >Nom</th>
                <th class="dataTableTH" >Nom FR</th>
                <th class="dataTableTH" >Gabarit</th>
                <th class="dataTableTH" >Vitesse</th>
                <th class="dataTableTH" >Maniabilité</th>
                <th class="dataTableTH" >Def Av</th>
                <th class="dataTableTH" >Def Ar</th>
                <th class="dataTableTH" >Blindage</th>
                <th class="dataTableTH" >Seuil DC</th>
                <th class="dataTableTH" >Seuil Sm</th>
                <th class="dataTableTH" >Altitude</th>
                <th class="dataTableTH" >Equipage</th>
                <th class="dataTableTH" >Charge Utile</th>
                <th class="dataTableTH" >Passagers</th>
                <th class="dataTableTH" >Prix</th>
                <th class="dataTableTH" >Rareté</th>
                <th class="dataTableTH" >Emplacements</th>
                <th class="dataTableTH" >Armes</th>
                <th class="dataTableTH" >Livre</th>
            </tr>
    
    </tfoot>
     
     
     <tbody>
    
    </tbody>
    </table>
     <script src="js/sw_tableau_test.js"></script><!-- code de génération du tableau en Datatables -->
     
    
    </div> <!-- fin du <div id="corps"> -->
    
    
    <?php
    //include ("include/sw_footer.php");
    ?>
    

    dans mon dossier JS j'ai donc sw_tableau_test.js :

    $(document).ready(function() {
        // Setup - add a text input to each footer cell
        $('#landspeeder tfoot th').each( function () {
            var title = $(this).text();
            $(this).html( '<input type="text" placeholder="Search '+title+'" />' );
        } );
    
        // DataTable
        var table = $('#landspeeder').DataTable(
        {
            "processing": true,
            "serverSide": true,
            "ajax": {
    			"url": "../sw_server_processing_test.php",
    			// "dataType": "jsonp"
    		},
            "language": 
            {
                "sProcessing":     "Traitement en cours...",
                "sSearch":         "Rechercher :",
                "sLengthMenu":     "Afficher _MENU_ éléments",
                "sInfo":           "Affichage de l'élément _START_ à _END_ sur _TOTAL_ éléments",
                "sInfoEmpty":      "Affichage de l'élément 0 à 0 sur 0 élément",
                "sInfoFiltered":   "(filtré de _MAX_ éléments au total)",
                "sInfoPostFix":    "",
                "sLoadingRecords": "Chargement en cours...",
                "sZeroRecords":    "Aucun élément à afficher",
                "sEmptyTable":     "Aucune donnée disponible dans le tableau",
                "oPaginate": {
                    "sFirst":      "Premier",
                    "sPrevious":   "Précédent",
                    "sNext":       "Suivant",
                    "sLast":       "Dernier"
                },
                "oAria": {
                    "sSortAscending":  ": activer pour trier la colonne par ordre croissant",
                    "sSortDescending": ": activer pour trier la colonne par ordre décroissant"
                },
                "select": {
                    "rows": {
                        "_": "%d lignes sélectionnées",
                        "0": "Aucune ligne sélectionnée",
                        "1": "1 ligne sélectionnée"
                    }  
                }
            }
        } );
    
        //Apply the search
        table.columns().every( function () {
            var that = this;
     
            $( 'input', this.footer() ).on( 'keyup change', function () {
                if ( that.search() !== this.value ) {
                    that
                        .search( this.value )
                        .draw();
                }
            } );
        } );
    
    } );


    Le JS fait appel à un dernier fichier php (
    "url": "../sw_server_processing_test.php"), à la racine, au meme niveau que mon premier fichier php:

    // DB table to use
    $table = 'SW_landspeeder';
     
    // Table's primary key
    $primaryKey = 'id';
     
    // Array of database columns which should be read and sent back to DataTables.
    // The `db` parameter represents the column name in the database, while the `dt`
    // parameter represents the DataTables column identifier. In this case simple
    // indexes
    $columns = array(
        array( 'db' => 'id', 'dt' => 0 ),
        array( 'db' => 'nom_en',  'dt' => 1 ),
        array( 'db' => 'nom_fr',   'dt' => 2 ),
        array( 'db' => 'gabarit',     'dt' => 3 ),
        array( 'db' => 'vitesse',     'dt' => 4 ),
        array( 'db' => 'mania',     'dt' => 5 ),
        array( 'db' => 'def_av',     'dt' => 6 ),
        array( 'db' => 'def_ar',     'dt' => 7 ),
        array( 'db' => 'blindage',     'dt' => 8 ),
        array( 'db' => 'seuil_dc',     'dt' => 9 ),
        array( 'db' => 'seuil_sm',     'dt' => 10 ),
        array( 'db' => 'altitude',     'dt' => 11 ),
        array( 'db' => 'equipage',     'dt' => 12 ),
        array( 'db' => 'charge',     'dt' => 13 ),
        array( 'db' => 'passagers',     'dt' => 14 ),
        array( 'db' => 'prix',     'dt' => 15 ),
        array( 'db' => 'rarete',     'dt' => 16 ),
        array( 'db' => 'emplacement',     'dt' => 17 ),
        array( 'db' => 'armes',     'dt' => 18 ),
        array( 'db' => 'livre',     'dt' => 19 )
       
        )
    );
     
    // SQL server connection information
    $sql_details = array(
        'user' => 'mon code',
        'pass' => 'mon code',
        'db'   => 'mon code',
        'host' => 'mon code'
    );
     
     
    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
     * If you just want to use the basic configuration for DataTables with PHP
     * server-side, there is no need to edit below this line.
     */
     
    require( 'DataTables/DataTables-1.10.18/js/ssp.class.php' );
    
    // if ( $jsonp ) {
    	// echo $jsonp.'('.json_encode(
    		// SSP::simple( $_GET, $sql_details, $table, $primaryKey, $columns )
    	// ).');';
    // } 
    echo json_encode(
        SSP::simple( $_GET, $sql_details, $table, $primaryKey, $columns )
    );

    J'ai vérifié et fait des copiers/coller sur mes codes de connexion à la BDD...Pas d'erreur de ce coté.

    Malheureusement, j'ai une erreur 500 qui me bloque complètement, comme ici en ligne :

    http://manu-jdr.fr/star_wars_test.php


    Merci d'avance pour vos idées :)


    -
    Edité par manuzed78 13 février 2019 à 10:34:45

    • Partager sur Facebook
    • Partager sur Twitter
      13 février 2019 à 12:07:24

      Bonjour,

      Activer les erreurs php.

      Pour moi la parenthèse fermante de la ligne 33 de fichier php est de trop.

      • Partager sur Facebook
      • Partager sur Twitter
        13 février 2019 à 16:14:51

        Domi65 a écrit:

        Bonjour.

        Peut-être du secours ici

        Cordialement.


        merci, je suis en train de regarder tout cela.

        Aurélien.C a écrit:

        Bonjour,

        Activer les erreurs php.

        Pour moi la parenthèse fermante de la ligne 33 de fichier php est de trop.


        Merci, j'ai effectivement viré cette parenthèse en trop!

        Quand je travaillais en local, je pouvais gérer les affichages d'erreur mais la je suis uniquement en ligne (OVH). Est il possible de le faire? et peut on leur demander les logs comme Domi65 me le suggère?

        -
        Edité par manuzed78 13 février 2019 à 16:17:55

        • Partager sur Facebook
        • Partager sur Twitter
          13 février 2019 à 21:13:34

          Si tu n'as pas accès au fichier php.ini alors fais-le par le code.

          ça ne change rien la ligne 33 comme j'ai dit ?

          • Partager sur Facebook
          • Partager sur Twitter
            14 février 2019 à 9:24:49

            Aurélien.C a écrit:

            ça ne change rien la ligne 33 comme j'ai dit ?


            Malheureusement non, comme tu peux le constater en ligne...

            D'ailleurs, c'est étonnant qu'il n'y avait pas une erreur spécifique pour cette parenthèse en trop!

            Si tu n'as pas accès au fichier php.ini alors fais-le par le code :

            mon début de fichier ressemble désormais à ça :

            <?php
            include ("include/sw_head.php");
            include("include/5e_form_connexion.php"); 
            
            ini_set('display_errors', 1);
            error_reporting(e_all);
            ?>

            Mais cela n'a rien changé : http://manu-jdr.fr/star_wars_test.php

            Il doit y avoir un autre truc à faire pour les activer ?


            -
            Edité par manuzed78 14 février 2019 à 9:25:13

            • Partager sur Facebook
            • Partager sur Twitter
              14 février 2019 à 12:13:14

              Salut,

              e_all n'existe pas , E_ALL oui et il faudrait que la ligne se retrouve avant tous tes autres codes. Et ce n'est pas une bonne idée en prod de laisser le display_errors à 'on',   il faut plutôt aller consulter les erreurs dans tes logs, ou mieux avoir un environnement de dev

              • Partager sur Facebook
              • Partager sur Twitter
              le bienfait n'est jamais perdu
                14 février 2019 à 13:26:19

                WillyKouassi a écrit:

                Salut,

                e_all n'existe pas , E_ALL oui et il faudrait que la ligne se retrouve avant tous tes autres codes. Et ce n'est pas une bonne idée en prod de laisser le display_errors à 'on',   il faut plutôt aller consulter les erreurs dans tes logs, ou mieux avoir un environnement de dev


                Ok merci j'ai mis ça du coup :

                <?php
                ini_set('display_errors', 1);
                error_reporting(E_ALL );
                include ("include/sw_head.php");
                include("include/5e_form_connexion.php"); 
                
                
                

                Je n'ai toujours que " Invalid JSON response"

                Par contre, difficile pour moi de me faire une environnement de travail actuellement.

                J'en suis bien conscient...

                -
                Edité par manuzed78 14 février 2019 à 13:27:07

                • Partager sur Facebook
                • Partager sur Twitter
                  14 février 2019 à 14:00:52

                  Le retour dans ton appel AJAX est vide (onglet réseau) et tu as un code 200 signifie que tu n'as pas d'erreur sur ta page sw_server_processing_test.php. Ouvre le fichier ssp.class.php, dans la méthode static function simple, fait un var_dump de $data pour voir si tu as tu contenu.
                  • Partager sur Facebook
                  • Partager sur Twitter
                  le bienfait n'est jamais perdu
                    14 février 2019 à 15:57:28

                    WillyKouassi a écrit:

                    Le retour dans ton appel AJAX est vide (onglet réseau) et tu as un code 200 signifie que tu n'as pas d'erreur sur ta page sw_server_processing_test.php. Ouvre le fichier ssp.class.php, dans la méthode static function simple, fait un var_dump de $data pour voir si tu as tu contenu.


                    Dans la class SSp, il y a pleins de fonctions

                    et avant la fin de la class j'y ai rajouté var_dump ($data);

                    le code erreur passe de 1 à 7 ...

                    DataTables warning: table id=landspeeder - Ajax error. For more information about this error, please see http://datatables.net/tn/7

                    • Partager sur Facebook
                    • Partager sur Twitter
                      14 février 2019 à 16:01:24

                      C'est pourquoi j'ai précisé dans la méthode static function simple , et f12 onglet Réseaux pour voir le retour ou tu copies le lien généré par Datatable directement dans ton navigateur
                      • Partager sur Facebook
                      • Partager sur Twitter
                      le bienfait n'est jamais perdu
                        14 février 2019 à 16:41:03

                        WillyKouassi a écrit:

                        C'est pourquoi j'ai précisé dans la méthode static function simple , et f12 onglet Réseaux pour voir le retour ou tu copies le lien généré par Datatable directement dans ton navigateur


                        Oh punaise, mes reflexes sont bien lointains...

                        J'ai donc ajouté cette fonction :

                        static function simple ()
                        	{		
                        		var_dump ($data);
                        	}

                        Mais du coup ou est appelée cette fonction? 

                        il n'y a rien de plus dans "network"

                        PS: merci de ta patience avec des boulets comme moi...

                        • Partager sur Facebook
                        • Partager sur Twitter
                          14 février 2019 à 19:16:41

                          Pas de demander d'ajouter une méthode mais la.méthode existe déjà regarde dans le corps de la méthode simple tu verras une variable $data et juste après ajoute le var_dump($data); exit ; ensuite dans la console tu cherches xhr dans l'onglet réseaux , tu verras l'url, copie là dans ton navigateur pour voir si ton var_dump s'affiche.

                          Ps: Regarde aussi tes logs pour voir les eventuelles erreurs PHP

                          • Partager sur Facebook
                          • Partager sur Twitter
                          le bienfait n'est jamais perdu
                            15 février 2019 à 11:41:23

                            Ok merci, j'ai donc mis ceci :

                            static function simple ( $request, $conn, $table, $primaryKey, $columns )
                            	{
                            		$bindings = array();
                            		$db = self::db( $conn );
                            		// Build the SQL query string from the request
                            		$limit = self::limit( $request, $columns );
                            		$order = self::order( $request, $columns );
                            		$where = self::filter( $request, $columns, $bindings );
                            		// Main query to actually get the data
                            		$data = self::sql_exec( $db, $bindings,
                            			"SELECT `".implode("`, `", self::pluck($columns, 'db'))."`
                            			 FROM `$table`
                            			 $where
                            			 $order
                            			 $limit"
                            		);
                            		var_dump($data);
                            		exit ;
                            		// Data set length after filtering
                            		$resFilterLength = self::sql_exec( $db, $bindings,
                            			"SELECT COUNT(`{$primaryKey}`)
                            			 FROM   `$table`
                            			 $where"
                            		);
                            		$recordsFiltered = $resFilterLength[0][0];
                            		// Total data set length
                            		$resTotalLength = self::sql_exec( $db,
                            			"SELECT COUNT(`{$primaryKey}`)
                            			 FROM   `$table`"
                            		);
                            		$recordsTotal = $resTotalLength[0][0];
                            		/*
                            		 * Output
                            		 */
                            		return array(
                            			"draw"            => isset ( $request['draw'] ) ?
                            				intval( $request['draw'] ) :
                            				0,
                            			"recordsTotal"    => intval( $recordsTotal ),
                            			"recordsFiltered" => intval( $recordsFiltered ),
                            			"data"            => self::data_output( $columns, $data )
                            		);
                            	}

                             mais toujours rien dans le retour réseau!

                            • Partager sur Facebook
                            • Partager sur Twitter
                              15 février 2019 à 12:07:12

                              Tu as toujours le var_dump dans ton code ? Sais-tu où tes logs sont ?
                              • Partager sur Facebook
                              • Partager sur Twitter
                              le bienfait n'est jamais perdu
                                15 février 2019 à 14:58:32

                                WillyKouassi a écrit:

                                Tu as toujours le var_dump dans ton code ? Sais-tu où tes logs sont ?


                                Var_dump ligne 17 ci-dessus

                                et non, comme je suis en ligne, je ne sais pas ou vont les logs :colere2:

                                • Partager sur Facebook
                                • Partager sur Twitter

                                Probleme de mise en place de datatables

                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                • Editeur
                                • Markdown