Page 1 sur 2

tableau dynamique

Posté : 13 déc. 2015, 11:05
par olivierser
Bonjour ,

voulant faciliter mes prises de commandes pour mon travail , j'ai fait un tableau avec recherche sur bd avec "datatable" avec session pour un ajout sur une page d'impression , mais je coince pour ce qui est de l'ajout d'une quantité . je ne sais pas si datatable est adapté a mon projet personnel en fait .
Merci de votre aide

Re: tableau dynamique

Posté : 13 déc. 2015, 17:06
par Ascla
Bonjour,
Par quel intermédiaire passes-tu ? Lorsque tu parles de "Datatable", c'est le plugin jQuery ?
Il nous faudra plus de détails pour que l'on puisse t'aider.

Re: tableau dynamique

Posté : 13 déc. 2015, 21:22
par olivierser
j'ai mal exposé mon projet ,
j'ai un tableau datatable de jQuery de recherche d'article sur ma base de donné avec une sélection de ligne , une session , et une page "bon de commande" où sont mes choix sélectionnés avant une impression de la page .
je voudrai ajouter une "case" quantité soit dans la page "recherche" ou dans la page "bon de commande" pour calculer quantité unitaire x quantité voulu .

Merci

Re: tableau dynamique

Posté : 13 déc. 2015, 22:44
par Ascla
Tout d'abord, je pense que ce problème relève de Javascript et non de Php.
Je ne connaissais pas Datatable mais je viens d'y jeter un coup d'œil et ils proposent un manuel très bien expliqué : https://www.datatables.net/manual/data#Objects

Pour ajouter une colonne, il faudra juste ajouter une valeur dans ton initialisation (tout est marqué dans le manuel).

Si tu souhaites que l'on puisse t'aider davantage, il faudra nous montrer à quoi ressemble ton code actuel.

Re: tableau dynamique

Posté : 13 déc. 2015, 23:28
par olivierser
<?php
include "session.php";
include "db.php";

if (!isset($_SESSION['cart']))
    $_SESSION['cart'] = array();

if (!empty($_GET['add']))
{
    array_push($_SESSION['cart'], $_GET['add']);
    header("Location: {$_SERVER['PHP_SELF']}");
}


if (!empty($_GET['del']))
{
    foreach ($_SESSION['cart'] as $element)
    {
        if ($element == $_GET['del'])
            $_SESSION['cart'] = delete_element($element, $_SESSION['cart']);
    }
    header("Location: {$_SERVER['PHP_SELF']}");
}
?>

<!DOCTYPE html>
<html lang="en">
    <head>
    <header id="logo"> 
			<a href="index.php"><img src="image/header.png"></a>
        </header>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    
    <meta name="description" content="">
    <meta name="author" content="">
    <link rel="icon" href="favicon.ico">

    <title>projet</title>

    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
    <link rel="stylesheet" href="https://cdn.datatables.net/1.10.9/css/dataTables.bootstrap.min.css">
    

    <link href="mercuriale.css" rel="stylesheet">
        
    <script src="http://getbootstrap.com/assets/js/ie-emulation-modes-warning.js"></script>


    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
    
</head>

<body>  
<?php
if (count($_SESSION['cart']) > 0) {
    $condition = " WHERE code_article IN (";
    foreach ($_SESSION['cart'] as $element)
        $condition .= $element.',';
    $condition = substr($condition,0, -1);
    $condition .= ")";
    $requete = $bdd->prepare("SELECT DISTINCT code_article, designation, fournisseur, marque, prix_ht FROM essais
    $condition ORDER BY prix_ht asc");
    $requete->execute();
}
else {
    $requete = $bdd->prepare("SELECT DISTINCT code_article, designation, fournisseur, marque, prix_ht FROM essais where code_article=-1");
    $requete->execute();
}
$results = $requete->fetchAll(PDO::FETCH_ASSOC);

?>
<nav class="navbar hidden-print">
  <div class="container-fluid">
    <div class="navbar-header">
      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button>
       </div>
    <div id="navbar" class="navbar-collapse collapse">
      <ul class="nav navbar-nav">
        <li><a href="essais.php"><i class='glyphicon glyphicon-list-alt'></i> Liste recherche</a></li>
      </ul>
      <ul class="nav navbar-nav navbar-right">
        <li class="active"><a href="BC.php"><i class='glyphicon glyphicon-shopping-cart'></i> Bon de Commande</a></li>
        
        <li class="dropdown"> 
          <ul class="dropdown-menu">
          </ul>
        </li>
      </ul>
    </div>
  </div>
</nav>
    <section class="main" >
        <div class="container-fluid middle">
            

            <div class="col-xs-12 col-md-8 col-md-offset-2" id="resulat">
                <?php
                $class = (count($_SESSION['cart']) > 0)?"":"disabled='disabled'";
                ?>
                <div class="center row hidden-print">
                    <button class="btn btn-default"<?php echo $class; ?> id="print">Imprimer</button>
                </div>
                <table id="tarif" class="row table table-striped table-hover" cellspacing="0" width="100%">
                    <thead>
                        <tr>
                            <th>Code Article</th>
                            <th>Désignation</th>
                            <th>Fournisseur</th>
                            <th>Marque</th>
                            <th>Prix</th>
                            <th class="hidden-print">Selection</th>
                        </tr>
                    </thead>
                    <tbody>
                        <?php
                        foreach($results as $result){
                            echo "<tr>";
                            echo "  <td>{$result['code_article']}</td>";
                            echo "  <td>{$result['designation']}</td>";
                            echo "  <td>{$result['fournisseur']}</td>";
                            echo "  <td>{$result['marque']}</td>";
                            echo "  <td>".$result['unite_commande']."</td>"; 
                            $prix = explode('.', $result['prix_ht']);
                            echo "  <td>$prix[0]€$prix[1]</td>";
                            echo "  <td class='center hidden-print'><a href='{$_SERVER['PHP_SELF']}?del={$result['code_article']}'><i class='glyphicon glyphicon-minus'></i></a></td>";
                            echo "</tr>";
                        }
                        ?>
                    </tbody>
                </table>
            </div>
        </div>
    </section>
 
    <script type="text/javascript" src="https://code.jquery.com/jquery-1.11.3.min.js"></script> 	     
    <script type="text/javascript" src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script> 	     
    <script type="text/javascript" src="https://cdn.datatables.net/1.10.9/js/jquery.dataTables.min.js"></script> 	 
    <script type="text/javascript" src="https://cdn.datatables.net/1.10.9/js/dataTables.bootstrap.min.js"></script> 	 
    <script>
        $(document).ready(function(){
            $('#tarif').DataTable( {
                language: {
                    "sProcessing":     "Traitement ...",
                    "sSearch":         "Rechercher&nbsp;:",
                    "sLengthMenu":     "Afficher _MENU_ &eacute;l&eacute;ments",
                    "sInfo":           "_START_ &agrave; _END_ / _TOTAL_ ",
                    "sInfoEmpty":      "0 &agrave; 0 sur 0 &eacute;l&eacute;ments",
                    "sInfoFiltered":   "(filtr&eacute; de _MAX_ &eacute;l&eacute;ments au total)",
                    "sInfoPostFix":    "",
                    "sLoadingRecords": "Chargement en cours...",
                    "sZeroRecords":    "Aucun &eacute;l&eacute;ment &agrave; afficher",
                    "sEmptyTable":     "Aucune donn&eacute;e disponible dans le tableau",
                    "oPaginate": {
                        "sFirst":      "Premier",
                        "sPrevious":   "Pr&eacute;c&eacute;dent",
                        "sNext":       "Suivant",
                        "sLast":       "Dernier"
                    },
                    "oAria": {
                        "sSortAscending":  ": activer pour trier la colonne par ordre croissant",
                        "sSortDescending": ": activer pour trier la colonne par ordre d&eacute;croissant"
                    }
                },
                "lengthMenu": [ [10, 25, 50, -1], [10, 25, 50, "Tout"] ]
            });
            
            $('#print').click(function(){
                 window.print();
            });
        });
    </script>
    <footer>
		<p><img src="image/footer1.png"></p>
        </footer>
</body>
</html>

Re: tableau dynamique

Posté : 14 déc. 2015, 00:52
par Ascla
Pour commencer, il faudrait modifier ta base de données en ajoutant un attribut "quantité" (si ce n'est déjà fait).
Ensuite, il faudrait s'occuper du côté PHP en ajoutant le nouvel attribut.
<?php
if (count($_SESSION['cart']) > 0) {
    $condition = " WHERE code_article IN (";
    foreach ($_SESSION['cart'] as $element)
        $condition .= $element.',';
    $condition = substr($condition,0, -1);
    $condition .= ")";
    $requete = $bdd->prepare("SELECT DISTINCT code_article, designation, fournisseur, marque, prix_ht, ICI_LE_NOUVEL_ATTRIBUT FROM essais
    $condition ORDER BY prix_ht asc");
    $requete->execute();
}
else {
    $requete = $bdd->prepare("SELECT DISTINCT code_article, designation, fournisseur, marque, prix_ht, ICI_LE_NOUVEL_ATTRIBUT FROM essais where code_article=-1");
    $requete->execute();
}
$results = $requete->fetchAll(PDO::FETCH_ASSOC);

?>
Puis modifier le côté HTML (rajouter une colonne dans le tableau).
<thead>
                        <tr>
                            <th>Code Article</th>
                            <th>Désignation</th>
                            <th>Fournisseur</th>
                            <th>Marque</th>
                            <th>Prix</th>
                            <th>NOUVEL_ATTRIBUT</th>
                            <th class="hidden-print">Selection</th>
                        </tr>
                    </thead>
Et enfin la lecture de données (en PHP) qui permet le remplissage de ton tableau.
<?php
                        foreach($results as $result){
                            echo "<tr>";
                            echo "  <td>{$result['code_article']}</td>";
                            echo "  <td>{$result['designation']}</td>";
                            echo "  <td>{$result['fournisseur']}</td>";
                            echo "  <td>{$result['marque']}</td>";
                            echo "  <td>".$result['unite_commande']."</td>"; 
                            $prix = explode('.', $result['prix_ht']);
                            echo "  <td>$prix[0]€$prix[1]</td>";
                            echo "  <td>{$result['NOUVEL_ATTRIBUT']}</td>";
                            echo "  <td class='center hidden-print'><a href='{$_SERVER['PHP_SELF']}?del={$result['code_article']}'><i class='glyphicon glyphicon-minus'></i></a></td>";
                            echo "</tr>";
                        }
                        ?>
Une fois ceci en place, l'affichage devrait être parfait.

Re: tableau dynamique

Posté : 14 déc. 2015, 17:10
par olivierser
Merci de ton aide Ascla ,

mais je dois modifier tout le code , je comprend pas , mes essais ne sont pas concluants .

Merci

Re: tableau dynamique

Posté : 14 déc. 2015, 20:03
par Ascla
Oui, si tu ajoutes une colonne tu devras modifier tous les points donnés plus haut.
mes essais ne sont pas concluants
Qu'est-ce qui ne fonctionne pas ?

Re: tableau dynamique

Posté : 14 déc. 2015, 21:51
par olivierser
dans ma bd j'ai creer une colonne "quantité" .varchar(45) utf8_general_ci

ensuite deux erreur et le contenu de ma bd n'est pas appelée .
Notice: Undefined variable: results
Warning: Invalid argument supplied for foreach()

Merci

Re: tableau dynamique

Posté : 14 déc. 2015, 22:40
par Ascla
Pour la quantité, je pense que tu devrais plutôt utiliser le type INTEGER et mettre une valeur par défaut.
Pour tes erreurs, d'après ce qui est écrit, cela vient du fait que tu envoies des variables vides.

Re: tableau dynamique

Posté : 14 déc. 2015, 22:50
par olivierser
merci de tes réponses ,
pour mes variables vides , je ne vois pas l'erreur,j'ai juste modifié le code par le tiens ,
je ne sais pas si datatable est adapté a mon projet

Merci

Re: tableau dynamique

Posté : 15 déc. 2015, 00:43
par Ascla
Quand je parle de variable vide, je fais référence à une donnée dans ta bdd qui aurait une valeur Null.
Il suffit donc d'une seule ligne où il n'y a pas de quantité (valeur Null) et php pourrait te renvoyer un warning.
Pour ceci, veille à mettre une valeur par défaut et à pourquoi pas ajouter la contrainte "Not Null".

Quant à datatable, il ne sert qu'à donner un affichage et une méthode de triage à tes tableaux.
DataTables is a plug-in for the jQuery Javascript library. It is a highly flexible tool, based upon the foundations of progressive enhancement, and will add advanced interaction controls to any HTML table.
Du coup, l'utiliser ou non, ton problème restera toujours le même car il relève de PHP et de BDD, et non de Javascript.

Ah oui, j'espère que tu n'as pas fait un bête copier/coller de ce que je t'ai donné. Il fallait au minimum remplacer le nom du nouvel attribut ! :lol:

Re: tableau dynamique

Posté : 15 déc. 2015, 07:32
par olivierser
Bonjour Ascla,

le code je l'ai bien mis comme il faut , ma bd bien remplie .
pour datatable , je disais peut être pas adapter a mon projet car pour ajouter une quantité manuellement ce n'est peut pas possible ?
ou alors modifier "quantité" dans ma page "impression" , je suis un peu perdu là :(

Merci

Re: tableau dynamique

Posté : 15 déc. 2015, 13:48
par Ascla
Eh bien si tout est bien remplie, je ne vois pas le soucis.
Il ne faut pas oublier que l'utilisation de Datatable n'aura que pour seul objectif l'esthétique.

Par contre, si tu as bien tout remplie comme je te l'ai mentionné plus haut, tu devrais normalement avoir une nouvelle colonne "Quantité" possédant des valeur. Arrives-tu à avoir cette colonne ? Si oui, possède-t-elle des valeurs ?
pour ajouter une quantité manuellement ce n'est peut pas possible ?
Lorsque tu dis "manuellement", c'est directement depuis ton tableau graphique ? Ou alors depuis ta bdd ?

Je te propose de reposter ton code actuel pour me permettre de réactualiser ma vision sur ton programme.

Re: tableau dynamique

Posté : 15 déc. 2015, 15:57
par olivierser
<?php
include "session.php";
include "db.php";

if (!empty($_GET['add']))
{
    array_push($_SESSION['cart'], $_GET['add']);
    header("Location: {$_SERVER['PHP_SELF']}");
}

if (!empty($_GET['del']))
{
    foreach ($_SESSION['cart'] as $element)
    {
        if ($element == $_GET['del'])
            $_SESSION['cart'] = delete_element($element, $_SESSION['cart']);
    }
    header("Location: {$_SERVER['PHP_SELF']}");
}

?>
<!DOCTYPE html>
<html lang="en">
    <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="">
    <meta name="author" content="">
    <link rel="icon" href="favicon.ico">

    <title>Mercuriale</title>

    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
    <link rel="stylesheet" href="https://cdn.datatables.net/1.10.9/css/dataTables.bootstrap.min.css">
    
    <link href="css/mercuriale.css" rel="stylesheet">
        
    <script src="http://getbootstrap.com/assets/js/ie-emulation-modes-warning.js"></script>

    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    
</head>

<body>
		<header id="logo"> 
			<a href="index.php"><img src="image/header.png"></a>
        </header>		
	    
<?php
if (count($_SESSION['cart']) > 0) {
    $condition = " WHERE code_article IN (";
    foreach ($_SESSION['cart'] as $element)
        $condition .= $element.',';
    $condition = substr($condition,0, -1);
    $condition .= ")";
    $requete = $bdd->prepare("SELECT DISTINCT code_article, designation, fournisseur, marque, unite_commande,  prix_ht, quantite FROM essais
    $condition ORDER BY prix_ht asc");
    $requete->execute();
}
else {
    $requete = $bdd->prepare("SELECT DISTINCT code_article, designation, fournisseur, marque, unite_commande,  prix_ht, quantite FROM essais where code_article=-1");
    $requete->execute();
}
$results = $requete->fetchAll(PDO::FETCH_ASSOC);

?>
    <section class="main" >
        <div class="container-fluid middle">
            <nav class="navbar">
                <div class="container-fluid">
                    <div class="navbar-header">
                        <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
                            <span class="sr-only">Toggle navigation</span>
                            <span class="icon-bar"></span>
                            <span class="icon-bar"></span>
                            <span class="icon-bar"></span>
                        </button>
                        
                    </div>

                    <div id="navbar" class="navbar-collapse collapse">
                        <ul class="nav navbar-nav">
                           
                            <li class="active"><a href="./mercuriale.php"><i class='glyphicon glyphicon-list-alt'></i> Liste recherche</a></li>
                            
                            
                        </ul>
                        <ul class="nav navbar-nav navbar-right">
                            <li><a href="BC.php"><i class='glyphicon glyphicon-shopping-cart'></i> Bon de Commande</a></li>
                            <li class="dropdown">
                                
                                <ul class="dropdown-menu">
                                    
                                </ul>
                            </li>
                        </ul>
                    </div>
                </div>
            </nav>
           
            <div class="col-xs-12 col-md-8 col-md-offset-2" id="resulat">
                <table id="tarif" class="table table-striped table-hover" cellspacing="0" width="100%">
                    <thead>
                        <tr>
                            <th>Code Article</th>
                            <th>Désignation</th>
                            <th>Fournisseur</th>
                            <th>Marque</th>
			    <th>Unité de commande</th>
                            <th>Prix</th>
                            <th>Quantité</th>
                            <th class="hidden-print">Selection</th>
                        </tr>
                    </thead>
                    <tbody>
                  
                       <?php
                        foreach($results as $result){
                            echo "<tr>";
                            echo "  <td>{$result['code_article']}</td>";
                            echo "  <td>{$result['designation']}</td>";
                            echo "  <td>{$result['fournisseur']}</td>";
                            echo "  <td>{$result['marque']}</td>";
			    echo "  <td>{$result['unite_commande']}</td>";
                            $prix = explode('.', $result['prix_ht']);
                            echo "  <td>$prix[0]€$prix[1]</td>";
                            echo "  <td>{$result['quantite']}</td>";
                            echo "  <td class='center hidden-print'><a href='{$_SERVER['PHP_SELF']}?del={$result['code_article']}'><i class='glyphicon glyphicon-minus'></i></a></td>";
                            echo "</tr>";
                        }
                        ?>
                    </tbody>
                </table>  
            </div>
        </div>
    </section>
    
    <script type="text/javascript" src="https://code.jquery.com/jquery-1.11.3.min.js"></script> 	     
    <script type="text/javascript" src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script> 	     
    <script type="text/javascript" src="https://cdn.datatables.net/1.10.9/js/jquery.dataTables.min.js"></script> 	 
    <script type="text/javascript" src="https://cdn.datatables.net/1.10.9/js/dataTables.bootstrap.min.js"></script> 	 
    <script>
        $(document).ready(function(){
            $('#tarif').DataTable( {
                language: {
                    "sProcessing":     "Traitement ...",
                    "sSearch":         "Rechercher&nbsp;:",
                    "sLengthMenu":     "Afficher _MENU_ &eacute;l&eacute;ments",
                    "sInfo":           "_START_ &agrave; _END_ / _TOTAL_ ",
                    "sInfoEmpty":      "0 &agrave; 0 sur 0 &eacute;l&eacute;ments",
                    "sInfoFiltered":   "(filtr&eacute; de _MAX_ &eacute;l&eacute;ments au total)",
                    "sInfoPostFix":    "",
                    "sLoadingRecords": "Chargement en cours...",
                    "sZeroRecords":    "Aucun &eacute;l&eacute;ment &agrave; afficher",
                    "sEmptyTable":     "Aucune donn&eacute;e disponible dans le tableau",
                    "oPaginate": {
                        "sFirst":      "Premier",
                        "sPrevious":   "Pr&eacute;c&eacute;dent",
                        "sNext":       "Suivant",
                        "sLast":       "Dernier"
                    },
                    "oAria": {
                        "sSortAscending":  ": activer pour trier la colonne par ordre croissant",
                        "sSortDescending": ": activer pour trier la colonne par ordre d&eacute;croissant"
                    }
                },
                "lengthMenu": [ [10, 25, 50, -1], [10, 25, 50, "Tout"] ]
            });
        });
    </script>
	<footer>
		<p><img src="image/footer1.png"></p>
        </footer>
</body>
</html>
voici le code modifié , je n'ai plus de message d'erreur , j'ai bien ma colonne "quantité" , le contenu de ma bd n'est pas affiché par contre .
la quantité je voudrai la noté manuellement sur mon tableau et lorsque je vais sur "bon de commande" en passant par ma session , le calcul "quantité"x"unité de commande" se fasse .

Merci