Partage
  • Partager sur Facebook
  • Partager sur Twitter

JS & INSERT : Warning: Invalid argument foreach

Problème de foreach lors d'insertion

Sujet résolu
Anonyme
    19 octobre 2018 à 11:01:57

    Bonjour,

    J'essaye d'insérer des lignes de tableaux dans ma bdd. Seulement je me mange un warning, et l'insertion ne se fait pas:

    Warning: Invalid argument supplied for foreach() in F:\xampp\htdocs\Contact\Atelier\2.php on line 8

    Si quelqu'un trouve la solution ça serait cool, et si vous pouviez me dire comment le faire de moi-même le prochain coup ça serait encore mieux. Merci d'avance! (le warning est donc dans 2.php).

    1.php

    <HTML>
    <HEAD>
    <TITLE> Add/Remove dynamic rows in HTML table </TITLE>
    <?php include 'construire.php' ?>
    <?php include '2.php' ?>
    <SCRIPT language="javascript">
    function addRow(tableID) {
    
          var table = document.getElementById(tableID);
    
          var rowCount = table.rows.length;
          var row = table.insertRow(rowCount);
    
          var cell1 = row.insertCell(0);
          var element1 = document.createElement("input");
          element1.type = "checkbox";
          element1.name="chkbox[]";
          cell1.appendChild(element1);
    
          var cell2 = row.insertCell(1);
          cell2.innerHTML = "<input type='text'  name='devis_id[]' />";
    
          var cell3 = row.insertCell(2);
          cell3.innerHTML = "<input type='text'  name='devis_contact[]' />";
          //cell2.innerHTML = "<select name='item[]' id='facture_fournisseur' type='text' class='form-control'>< $list = $bdd->query('SELECT * FROM fournisseur');while ($data = $list->fetch()) { ?><option value='< echo $data['fournisseur_nom']; ?>'> < echo $data['fournisseur_nom']; ?></option>< } $list->closeCursor(); ?></select>";
    
          var cell4 = row.insertCell(3);
          cell4.innerHTML = "<input type='text'  name='devis_refarticle[]' />";
    
          var cell5 = row.insertCell(4);
          cell5.innerHTML =  "<input type='text'  name='devis_designationarticle[]' />";
    
          var cell6 = row.insertCell(5);
          cell6.innerHTML = "<input type='text'  name='devis_pu[]' />";
    
          var cell7 = row.insertCell(6);
          cell7.innerHTML =  "<input type='text'  name='devis_unite[]' />";
    
          var cell8 = row.insertCell(7);
          cell8.innerHTML = "<input type='text'  name='devis_quantite[]' />";
    
          var cell9 = row.insertCell(8);
          cell9.innerHTML =  "<input type='text'  name='devis_prixnetunite[]' />";
          }
    
        function deleteRow(tableID) {
            try {
            var table = document.getElementById(tableID);
            var rowCount = table.rows.length;
    
            for(var i=0; i<rowCount; i++) {
                var row = table.rows[i];
                var chkbox = row.cells[0].childNodes[0];
                if(null != chkbox && true == chkbox.checked) {
                    table.deleteRow(i);
                    rowCount--;
                    i--;
                }
            }
            }catch(e) {
                alert(e);
            }
        }
    
    </SCRIPT>
    </HEAD>
    <BODY>
          <div class="return"></div>
    <INPUT type="button" class="btn btn-success" value="Ajouter un autre produit" onClick="addRow('dataTable')" />
    
    <INPUT type="button" class="btn btn-danger" value="Supprimer le produit" onClick="deleteRow('dataTable')" />
    
    <form action="" method="post" name="f">
    
    <table class="table table-bordered table-striped table-condensed" width="1000" border="1">
    <thead>
    <tr>
    <th width="40"></th>
    <th width="40">ID</th>
    <th width="40">Contact</th>
    <th width="40">Référence Article</th>
    <th width="40">Désignation Article</th>
    <th width="40">Prix unitaire</th>
    <th width="40">Unité</th>
    <th width="40">Quantité</th>
    <th width="40">Prix Net Unitaire</th>
    </tr>
    </thead>
    <tbody id="dataTable">
    
    </tbody>
    </TABLE>
    
    
    <INPUT type="submit" value="Insert" name="submit" />
    </form>
    </BODY>
    

    2.php

    <?php try { $bdd = new PDO('mysql:host=localhost;dbname=contact', 'root', '', array (PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));}
    catch (Exception $e) {
      die('Erreur : ' . $e->getMessage()) ; }
    $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
        if($_POST['submit'])
          {
           foreach ($_POST['id'] as $key => $value)
              {
                  $devis_id = $_POST["devis_id"][$key];
                  $devis_contact = $_POST["devis_contact"][$key];
                  $devis_refarticle = $_POST["devis_refarticle"][$key];
                  $devis_designationarticle = $_POST["devis_designationarticle"][$key];
                  $devis_pu = $_POST["devis_pu"][$key];
                  $devis_unite = $_POST["devis_unite"][$key];
                  $devis_quantite = $_POST["devis_quantite"][$key];
                  $devis_prixnetunite = $_POST["devis_prixnetunite"][$key];
    
                  $req = $bdd->prepare("INSERT INTO devis(devis_id, devis_contact, devis_refarticle, devis_designationarticle, devis_pu, devis_unite, devis_quantite, devis_prixnetunite) VALUES(?,?,?,?,?,?,?,?)");
                  $req->execute(array($devis_id,$devis_contact,$devis_refarticle,$devis_designationarticle,$devis_pu,$devis_unite,$devis_quantite,$devis_prixnetunite));
    
              }
        }
    ?>
    




    • Partager sur Facebook
    • Partager sur Twitter
      19 octobre 2018 à 11:07:24

      Bonjours l'erreur est le fait que tu donne une chaîne de caractère au lieux d'une array a Foreach ^^

      Peut tu nous faire un var_drump($_POST) ? merci

      -
      Edité par LenX1s 19 octobre 2018 à 11:08:00

      • Partager sur Facebook
      • Partager sur Twitter
      Google est beau et gentils il vous donnera toujours tout si vous lui demandé gentiment comme ceci
      Anonyme
        19 octobre 2018 à 11:21:03

        Merci pour ta réponse!

        le var_dump me retourne

        array(0) { } 

        Bizarre pourtant je pense bien retourner une array non?

        name='devis_prixnetunite[]'
        name='devis_quantite[]'

        Merci d'avance :)


        • Partager sur Facebook
        • Partager sur Twitter
          19 octobre 2018 à 11:22:05

          Bonjour,

          Sauf erreur, on ne peut pas mettre un array pour un input de type text

          • Partager sur Facebook
          • Partager sur Twitter
            19 octobre 2018 à 11:27:13

            En fait tu ne donne pas autre chose qu'une array() tu lui donne rien ^^.

            Essaye de mettre les lignes 69 a 71 après la ligne 73.

            Edit :

            Je ne pensais pas non plus jusqu’à ceci après je ne sais ce que cela vaut j'ai que lut en travers.

            -
            Edité par LenX1s 19 octobre 2018 à 11:29:24

            • Partager sur Facebook
            • Partager sur Twitter
            Google est beau et gentils il vous donnera toujours tout si vous lui demandé gentiment comme ceci
            Anonyme
              19 octobre 2018 à 11:30:08

              Ca ne change rien, mais lorsque je fais un insert :

              Warning: Invalid argument supplied for foreach() in F:\xampp\htdocs\Contact\Atelier\2.php on line 10
              array(9) { ["devis_id"]=> array(1) { [0]=> string(2) "55" } ["devis_contact"]=> array(1) { [0]=> string(2) "ff" } ["devis_refarticle"]=> array(1) { [0]=> string(2) "ff" } ["devis_designationarticle"]=> array(1) { [0]=> string(2) "ff" } ["devis_pu"]=> array(1) { [0]=> string(2) "55" } ["devis_unite"]=> array(1) { [0]=> string(2) "55" } ["devis_quantite"]=> array(1) { [0]=> string(2) "55" } ["devis_prixnetunite"]=> array(1) { [0]=> string(2) "55" } ["submit"]=> string(6) "Insert" } 

              Tout semble passer, pas l'insertion ne se fait pas. On doit pas être très loin :)

              -
              Edité par Anonyme 19 octobre 2018 à 11:31:13

              • Partager sur Facebook
              • Partager sur Twitter
                19 octobre 2018 à 11:30:54

                Super, sujet déplacé ...

                ----

                Salut,

                La question c'est qu'est tu as modifié depuis ces quelques jours ? ....

                Ensuite concernant le code :

                if($_POST['submit'])

                N'est pas correct pour la simple raison que si 'submit' n'existe pas encore tu auras une erreur. Si tu veux vérifier l’existence de 'submit' utilise la fonction isset()

                -
                Edité par HekoHello 19 octobre 2018 à 11:31:42

                • Partager sur Facebook
                • Partager sur Twitter
                  19 octobre 2018 à 11:33:25

                  Oui sauf tu fais un foreach sur $_POST['id'] et a aucun moment je ne vois d'input ayant ce nom
                  • Partager sur Facebook
                  • Partager sur Twitter
                    19 octobre 2018 à 11:34:11

                    Ah deja on a quelleque chose dans le var_drump 

                    Je pence qu'il y'a peut etre un petit erreur dans le name :

                     en regardant la doc de $_POST j'ai vue ceci :

                    <form ....>
                    <input name="person[0][first_name]" value="john" />
                    <input name="person[0][last_name]" value="smith" />
                    ...
                    <input name="person[1][first_name]" value="jane" />
                    <input name="person[1][last_name]" value="jones" />
                    </form>

                    donc peut etre voire pour changer un peut comme ceci :

                    var cell2 = row.insertCell(1);
                          cell2.innerHTML = "<input type='text'  name='devis[$une_variable_pour_compter][devis_id]' />";

                    Et après pour palier le problème de l'array tu peut simplement faire une array Multi dimension :

                    
                    $var_array = array ((ID_premier_insertion, contact_premier_insertion, ... , prix_net_unitaire_premiere_insertion),(ID_second_insertion, contact_second_insertion, ... , prix_net_unitaire_second_insertion), ...   )





                    -
                    Edité par LenX1s 19 octobre 2018 à 11:39:14

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Google est beau et gentils il vous donnera toujours tout si vous lui demandé gentiment comme ceci
                      19 octobre 2018 à 11:35:11

                      Au lieu de te focaliser sur l'INSERT, qui est très loin du foreach, essaie de savoir ce que tu envoies à ton script ;)

                      En l'état,il faut entrer dans le FOREACH avant de dire que l'insertion ne fonctionne pas, et pour l'instant tu es au pied du foreach tu attends qu'on te donne LA solution.

                      Cherche un peu, la solution est donnée dans l'erreur: tu ne lui donnes pas un tableau OR il attends un tableau.

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        19 octobre 2018 à 11:49:02

                        Merci à tous pour vos réponses.

                        En effet c'était bien le foreach qui visait un "id", qui n'existait pas.

                        Résolu!

                        • Partager sur Facebook
                        • Partager sur Twitter
                          19 octobre 2018 à 11:56:14

                          ZarkoffeVeor a écrit:

                          Merci à tous pour vos réponses.

                          En effet c'était bien le foreach qui visait un "id", qui n'existait pas.

                          Résolu!


                          en même temps en lisant ton script ....
                          • Partager sur Facebook
                          • Partager sur Twitter

                          JS & INSERT : Warning: Invalid argument foreach

                          × 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