Je n'arrive pas à insert (Je ne voit pas d'où viens mon erreur)

Résolu/Fermé
ScreamFR Messages postés 73 Date d'inscription lundi 30 décembre 2019 Statut Membre Dernière intervention 19 mai 2022 - 16 nov. 2020 à 21:36
ScreamFR Messages postés 73 Date d'inscription lundi 30 décembre 2019 Statut Membre Dernière intervention 19 mai 2022 - 18 nov. 2020 à 00:14
Bonjour, bonsoir,
Je rencontre un petit problème dans mon code qui consiste à faire une mupli insertion dans une base de données en jQuery ajax etc.
Donc le but j'ai de pouvoir ajouter plusieurs article en même temps pour vous facilité je vais essayer de faire de mon mieux pour bien vous présentez mes fichiers.

Ma base de données articles :






Mon code html / php : app-invoice-add.php


<div class="invoice-product-details ">
                                            
                                                <div data-repeater-list="group-a">
                                                    <div data-repeater-item>
                                                        <div class="row mb-50">
                                                            <div class="col-3 col-md-4 invoice-item-title">Article</div>
                                                            <div class="col-3 invoice-item-title">Coût</div>
                                                            <div class="col-3 invoice-item-title">Quantite</div>
                                                            <div class="col-3 col-md-2 invoice-item-title">Prix</div>
                                                        </div>
                                                        <div class="invoice-item d-flex border rounded mb-1">
                                                            <div class="invoice-item-filed row pt-1 px-1">
                                                                <div class="col-12 col-md-4 form-group">
                                                                    <select id="article" class="form-control invoice-item-select">
                                                                        <option value="Pas d'article">Selectionner un article</option>
                                                                        <?php foreach($article as $articlee): ?>
                                                                        <option value="<?= $articlee['article'] ?>"><?= $articlee['article'] ?></option>
                                                                        <?php endforeach; ?>
                                                                    </select>
                                                                </div>
                                                                <div class="col-md-3 col-12 form-group">
                                                                    <input id="cout" type="number" class="form-control" placeholder="0" onkeyup="myFunction()">
                                                                </div>
                                                                <div class="col-md-3 col-12 form-group">
                                                                    <input id="quantite" type="number" class="form-control" placeholder="0" onkeyup="myFunction()">
                                                                </div>
                                                                <div class="col-md-2 col-12 form-group">
                                                                          <strong id="demo" class="text-primary align-middle">00.00 €</strong>
                                                                </div>
                                                                <div class="col-md-4 col-12 form-group">
                                                                    <label for="ref">REF :</label>
                                                                    <input id="referencearticle" type="text" class="form-control invoice-item-desc" placeholder="Réference">
                                                                </div>
                                                            </div>
                                                            <div class="invoice-icon d-flex flex-column justify-content-between border-left p-25">

                                                                <div class="dropdown">
                                                                    <i class="bx bx-cog cursor-pointer dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" role="button"></i>
                                                                    <div class="dropdown-menu p-1">
                                                                        <div class="row">
                                                                            <div class="col-12 form-group">
                                                                                <label for="discount">Remise(%)</label>
                                                                                <input id="remise" value="0" type="number" class="form-control" id="discount" placeholder="remise">
                                                                            </div>
                                                                             <div class="col-12 form-group">
                                                                                <label for="discount">Tva(%)</label>
                                                                                <input id="tva" value="0" type="number" class="form-control" id="discount" placeholder="0">
                                                                            </div>
                                                                        </div>
                                                                        <hr>
                                                                    </div>
                                                                </div>
                                                            </div>
                                                        </div>
                                                    </div>
                                                </div>
                                            <div class="form-group">
                                                <div class="col p-0">
                                                    <button class="btn btn-light-primary btn-sm" type="button">
                                                        <i class="bx bx-plus"></i>
                                                        <span type="button" id="button_send" class="invoice-repeat-btn">Ajouter l'article</span>
                                                    </button>
                                                </div>
                                            </div>
                                            <table id="table" name="table" class="table table-bordered"><style>.red{color: red;} .line{text-decoration: underline;}</style>
                                                <tbody>
                                                    <tr>
                                                        <th>Facture</th>
                                                        <th>Nom</th>
                                                        <th>Ref</th>
                                                        <th>Ct</th>
                                                        <th>Qt</th>
                                                        <th>Tva(%)</th>
                                                        <th>Red(%)</th>
                                                    <tr>
                                                </tbody>
                                            </table>
                                        </div>




Code Js = app-add.js

        $(document).ready(function(){
        var id = 1; 
        /*Assigning id and class for tr and td tags for separation.*/
        $("#button_send").click(function(){
            var newid = id++; 
            $("#table").append(`<tr valign="top" id="${newid}">
            <td width="100px" class="numeros${newid}">${$("#numeros").val()}</td>
            <td width="100px" class="article${newid} line">${$("#article").val()}</td>
            <td width="100px" class="referencearticle${newid} line">${$("#referencearticle").val()}</td>
            <td width="100px" class="cout${newid}">${$("#cout").val()}</td>
            <td width="100px" class="quantite${newid}">${$("#quantite").val()}</td>
            <td width="100px" class="tva${newid}">${$("#tva").val()} %</td>
            <td width="100px" class="remise${newid}">${$("#remise").val()} %</td>
            <td width="100px"><a href="javascript:void(0);" class="remCF"><i class='bx bx-x red'></i></a></td></tr>`);
        });

        // function to remove article if u don't want it
        $("#table").on('click', '.remCF', function(){
            $(this).parent().parent().remove();
        });
        /*crating new click event for save button this will save to the database*/
        $("#button_save").click(function(){
            var lastRowId = $('#table tr:last').attr("id"); /*finds id of the last row inside table*/
            var numeros = new Array();
            var article = new Array(); 
            var referencearticle = new Array();
            var cout = new Array();
            var quantite = new Array();
            var tva = new Array();
            var remise = new Array();
            
            for ( var i = 1; i <= lastRowId; i++) {
                numeros.push($("#"+i+" .numeros"+i).html());
                article.push($("#"+i+" .article"+i).html()); 
                referencearticle.push($("#"+i+" .referencearticle"+i).html()); 
                cout.push($("#"+i+" .cout"+i).html());
                quantite.push($("#"+i+" .quantite"+i).html()); 
                tva.push($("#"+i+" .tva"+i).html()); 
                remise.push($("#"+i+" .remise"+i).html());
            }

            var sendNumeros = JSON.stringify(numeros);
            var sendArticle = JSON.stringify(article); 
            var sendRef = JSON.stringify(referencearticle);
            var sendcout = JSON.stringify(cout);
            var sendquantite = JSON.stringify(quantite);
            var sendTVA = JSON.stringify(tva);
            var sendremise = JSON.stringify(remise);

            $.ajax({
                url: "php/insert_articles_facture.php",
                type: "POST",
                data: {
                    numeros : sendNumeros,
                    article : sendArticle,
                    referencearticle : sendRef, 
                    cout : sendcout, 
                    quantite : sendquantite,
                    tva : sendTVA,
                    remise : sendremise,
                },
                success:function(data){
                }
            });
        });
        });





Code php = insert_articles_facture.php


<?php
$numArr = json_decode($_POST["numeros"]);
$artArr = json_decode($_POST["article"]);
$refArr = json_decode($_POST["referencearticle"]);
$coutArr = json_decode($_POST["cout"]);
$tvaArr = json_decode($_POST["tva"]);
$remiseArr = json_decode($_POST["remise"]);
$quantite = json_decode($_POST["quantite"]);
$id_session = "0";

$con = mysqli_connect("localhost", "root", "", "u243663731_");

if (mysqli_connect_errno())
{
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

for ($i = 0; $i < count($artArr); $i++) {

    if(($artArr[$i] != "")) { /*not allowing empty values and the row which has been removed.*/

        $sql = "INSERT INTO articles(article, referencearticle, cout, quantite, tva, remise, numeros, id_session)
            VALUES ('$artArr[$i]','$refArr[$i]','$coutArr[$i]','$quantite[$i]','$tvaArr[$i]','$remiseArr[$i]','$numArr[$i]','$id_session[$i]')";
        
        if (!mysqli_query($con, $sql))
        {
            die('Error: ' . mysqli_error($con));
        }

    }
}


mysqli_close($con);
?>



Quand j'appui sur le button avec l'id=button_save ca fait rien.
ps = id= numeros apparait pas dans mon code mais il est
tout en haut
sachant que avant mon code avant que j'ajoute quantite marcher très bien
A voir également:

3 réponses

jordane45 Messages postés 38151 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 mai 2024 4 652
16 nov. 2020 à 21:46
Bonjour,

Là, comme ça, ça va être compliqué de te donner la réponse....

Commence par ouvrir la console javascript de ton navigateur ( je te conseille d'utiliser FIREFOX pour débuguer l'ajax )
et regarde si tu n'as pas des messages d'erreur...

Ajoute également quelques console.log dans ton code JS pour essayer de voir ce qui se passe
il faut aussi ajouter le "error" sur l'ajax pour voir les éventuels soucis ...

par exemple :

$("#button_save").click(function(){
  console.log('button_save CLICK !! ');
  var lastRowId = $('#table tr:last').attr("id"); /*finds id of the last row inside table*/
  var numeros = new Array();
  var article = new Array(); 
  var referencearticle = new Array();
  var cout = new Array();
  var quantite = new Array();
  var tva = new Array();
  var remise = new Array();
  
  for ( var i = 1; i <= lastRowId; i++) {
    numeros.push($("#"+i+" .numeros"+i).html());
    article.push($("#"+i+" .article"+i).html()); 
    referencearticle.push($("#"+i+" .referencearticle"+i).html()); 
    cout.push($("#"+i+" .cout"+i).html());
    quantite.push($("#"+i+" .quantite"+i).html()); 
    tva.push($("#"+i+" .tva"+i).html()); 
    remise.push($("#"+i+" .remise"+i).html());
  }

  var sendNumeros = JSON.stringify(numeros);
  var sendArticle = JSON.stringify(article); 
  var sendRef = JSON.stringify(referencearticle);
  var sendcout = JSON.stringify(cout);
  var sendquantite = JSON.stringify(quantite);
  var sendTVA = JSON.stringify(tva);
  var sendremise = JSON.stringify(remise);

  var datas = {
          numeros : sendNumeros,
          article : sendArticle,
          referencearticle : sendRef, 
          cout : sendcout, 
          quantite : sendquantite,
          tva : sendTVA,
          remise : sendremise,
      };
  console.log('DATAS',datas);
  
  $.ajax({
      url: "php/insert_articles_facture.php",
      type: "POST",
      data: datas,
      success:function(data){
        console.log('REPONSE AJAX',data);
      },
      error: function(xhr, ajaxOptions, error){
        console.log('ERREUR AJAX',xhr, ajaxOptions, error);
        var errorMessage = xhr.status + ': ' + xhr.statusText
        alert('Error - ' + errorMessage);
      }
  });
});




1
ScreamFR Messages postés 73 Date d'inscription lundi 30 décembre 2019 Statut Membre Dernière intervention 19 mai 2022 3
17 nov. 2020 à 20:59
Merci bonjour, j'ai trouver mon erreur j'ai oublie d'enlever le [$i] dans la requête pour id_session vue qui n'est pas le tableau ca a tout fait bug ,
Mais j'ai rencontre un petit autre problème:

en gros après l'ajoute de mes articles ,j'ai crée une liste avec toutes les factures et dans la liste
ya la partie montant : (c'est l'ensemble du montant de tout les articles) donc pour chaque article je doit faire (cout * quantite) pour tout les articles.

Mon code :
// le select pour récupérer le cout et la quantité

$pdoStt = $bdd->prepare('SELECT cout,quantite FROM articles WHERE id_session = :num AND numeros=:numeros');
$pdoStt->bindValue(':num',"1"); //$_SESSION['id_session']
$pdoStt->bindValue(':numeros',$factures['numerosfacture']); //$factures est le numéros de la facture pour laquelle les articles sont assigné 
$pdoStt->execute();
$articles = $pdoStt->fetchAll();

// var_dump($articles);

array (size=3)
  0 => 
    array (size=2)
      'cout' => string '10' (length=2)
      'quantite' => string '10' (length=2)
  1 => 
    array (size=2)
      'cout' => string '10' (length=2)
      'quantite' => string '20' (length=2)
  2 => 
    array (size=2)
      'cout' => string '10' (length=2)
      'quantite' => string '10' (length=2)

// la partie affichage 

<?php

foreach($article as $articless):

$montant = $articless['cout'] * $articless['quantite'];

$montant_t += $montant;

endforeach;

 ?>

<td><span class="invoice-amount"><?= $montant_t; ?> <?= $factures['monnaie'] ?></span></td>




Bien sur c'est pas comme ca j'ai enlever toutes les autres balises html , pour conclure ca ne marche pas et ce que j'ai essaye de faire :

($articless['cout'] * $articless['quantite']) + ($articless['cout'] * $articless['quantite']) + ect ect // de l'ensemble des articles dans la boucles
0
jordane45 Messages postés 38151 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 mai 2024 4 652
17 nov. 2020 à 21:11
Bon...
Déjà, il est d'usage sur ce forum que pour un "nouveau souci" on créé une discussion qui lui soit propre....
Merci d'y penser à l'avenir !

Quoi qu'il en soit,
// le select pour récupérer le cout et la quantité
try{
  
  $sql = "SELECT cout
          ,quantite 
          ,(cout * quantite ) as TOTAL
  FROM articles 
  WHERE id_session = :num 
  AND numeros=:numeros";
  
  $req = $bdd->prepare($sql);
  $req->bindValue(':num',"1"); //$_SESSION['id_session']
  $req->bindValue(':numeros',$factures['numerosfacture']); //$factures est le numéros de la facture pour laquelle les articles sont assigné 
  $req->execute();
  $articles = $req->fetchAll();
}catch(Exception $e){
  echo "Erreur " . $e->getMessage();
}
// var_dump($articles);

$montant_t = 0;
if(!empty($articles)){
  foreach($articles as $A){
    $montant_t += float($A['TOTAL']);
  }
}


Maintenant, si ton but c'est juste d'avoir le total... il suffit de faire
try{
  
  $sql = "SELECT SUM(T.TOTAL) as MONTANT_T
          FROM (
          SELECT cout
                  ,quantite 
                  ,(cout * quantite ) as TOTAL
          FROM articles 
          WHERE id_session = :num 
          AND numeros=:numeros 
          ) T ";
  
  $req = $bdd->prepare($sql);
  $req->bindValue(':num',"1"); //$_SESSION['id_session']
  $req->bindValue(':numeros',$factures['numerosfacture']); //$factures est le numéros de la facture pour laquelle les articles sont assigné 
  $req->execute();
  $res = $req->fetch();
}catch(Exception $e){
  echo "Erreur " . $e->getMessage();
}
// var_dump($res );

$montant_t = !empty($res) ? $res['MONTANT_T'] : 0;


PS: Merci de mettre la discussion en RESOLUE.

.
0
ScreamFR Messages postés 73 Date d'inscription lundi 30 décembre 2019 Statut Membre Dernière intervention 19 mai 2022 3
18 nov. 2020 à 00:14
Ohh ca marche youpi xD merci beaucoup !
0