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

Langage PHP Discussion :

SQL Foreach : insertion double


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2018
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2018
    Messages : 300
    Points : 67
    Points
    67
    Par défaut SQL Foreach : insertion double
    Hello,
    J'insers des données en base de données (un devis avec des articles). Mon devis et mes articles s'ajoutent bien, mais une ligne en double (vide) dans la table article s'ajoute en base à chaque fois en même temps.
    code:
    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
    Données envoyées    $('#bt_Envoi').click(function() {
        var params_envoi = {
            article_ref: [],
            article_devis  : [],
            article_designationarticle: [], 
            article_pu: [],
            article_unite: [], 
            article_quantite: [],
            article_remise: [],
            article_total: [],
            devis_ref: [],
            devis_client: [],
            devis_contact: [],
            devis_fournisseur: [],
            devis_fabricant: [],
            devis_date: [],
            devis_daterelance: []
        };
        $(".article_ref").each(function() { params_envoi.article_ref.push( $(this).val()); });
        $(".article_devis").each(function()     { params_envoi.article_devis.push( $(this).val()); });
        $(".article_designationarticle").each(function() { params_envoi.article_designationarticle.push( $(this).val()); });
        $(".article_pu").each(function()     { params_envoi.article_pu.push( $(this).val()); });
        $(".article_unite").each(function() { params_envoi.article_unite.push( $(this).val()); });
        $(".article_quantite").each(function()     { params_envoi.article_quantite.push( $(this).val()); });
        $(".article_remise").each(function() { params_envoi.article_remise.push( $(this).val()); });
        $(".article_total").each(function()     { params_envoi.article_total.push( $(this).val()); });
     
        $(".devis_ref").each(function()     { params_envoi.devis_ref.push( $(this).val()); });
        $(".devis_client").each(function()     { params_envoi.devis_client.push( $(this).val()); });
        $(".devis_contact").each(function() { params_envoi.devis_contact.push( $(this).val()); });
        $(".devis_fournisseur").each(function()     { params_envoi.devis_fournisseur.push( $(this).val()); });
        $(".devis_fabricant").each(function() { params_envoi.devis_fabricant.push( $(this).val()); });
        $(".devis_date").each(function()     { params_envoi.devis_date.push( $(this).val()); });
        $(".devis_daterelance").each(function()     { params_envoi.devis_daterelance.push( $(this).val()); });
     
        $("#thedevis").load("../PHP/insert/article.php", params_envoi );
        console.log( params_envoi );  
        });
      });
    formulaire d'insertion
    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
     
    <?php require_once('../../Include/connect.php') ;  
     
    if(!empty($_POST['article_ref']) && !empty($_POST['article_total']) && !empty($_POST['article_ref'] != "") && !empty($_POST['article_devis'] != "0"))
    {
      foreach ($_POST['article_ref'] as $key => $value)
      {
        $article_ref = trim($_POST["article_ref"][$key]);
        $article_devis = trim($_POST["article_devis"][$key]);
        $article_designationarticle = trim($_POST["article_designationarticle"][$key]);
        $article_pu = trim($_POST["article_pu"][$key]);
        $article_unite = trim($_POST["article_unite"][$key]);
        $article_quantite = trim($_POST["article_quantite"][$key]);
        $article_remise = trim($_POST["article_remise"][$key]);
        $article_total = trim($_POST["article_total"][$key]);
     
        $req = $bdd->prepare("INSERT INTO article(article_ref, article_devis, article_designationarticle,
        article_pu, article_unite, article_quantite, article_remise, article_total) VALUES(?,?,?,?,?,?,?,?)");
        $req->execute(array($article_ref,$article_devis,
        $article_designationarticle,$article_pu,$article_unite,$article_quantite,$article_remise,$article_total));
      }
        foreach ($_POST['devis_ref'] as $key => $value)
        {
        $devis_ref = trim($_POST["devis_ref"][$key]);
        $devis_client = trim($_POST["devis_client"][$key]);
        $devis_contact = trim($_POST["devis_contact"][$key]);
        $devis_fournisseur = trim($_POST["devis_fournisseur"][$key]);
        $devis_fabricant = trim($_POST["devis_fabricant"][$key]);
        $devis_date = trim($_POST["devis_date"][$key]);
        $devis_daterelance = trim($_POST["devis_daterelance"][$key]);
     
        $req = $bdd->prepare("INSERT INTO devis(devis_ref, devis_client, devis_contact, devis_fournisseur, devis_fabricant, devis_date, devis_daterelance) VALUES(?,?,?,?,?,?,?)");
        $req->execute(array($devis_ref,$devis_client,$devis_contact,$devis_fournisseur,$devis_fabricant,$devis_date,$devis_daterelance));
     
        echo "<span class='success'>Votre devis a bien été créé.</span>";
      } 
    } ?>
    <script>
    setTimeout(function(){ location.replace("../Atelier/accueil.php") }, 1200);
    </script>
    Résultat en bdd d'une insertion.
    table Article:
    Nom : ok.png
Affichages : 130
Taille : 5,5 Ko

    Comme vous pouvez le voir, j'ai tenté des vérification du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(!empty($_POST['article_devis'] != "0"))
    Mais rien y fait, il s'insers tout de même avec pour valeur 0.
    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      foreach ($_POST['article_ref'] as $key => $value)
      {
    Que donne var_dump( $_POST['article_ref'] ); ?

  3. #3
    Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2018
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2018
    Messages : 300
    Points : 67
    Points
    67
    Par défaut
    Hello jreaux62,
    un var dump dès le début de mon foreach me donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array(1) { [0]=> string(11) "article_ref" } array(1) { [0]=> string(11) "article_ref" }
    Je n'ai ajouté qu'un seul article.

    merci d'avance

  4. #4
    Invité
    Invité(e)
    Par défaut
    Donc,
    • array(1) { [0]=> string(11) "article_ref" } s'affiche DEUX fois ??
    • et $_POST['article_ref'][0] vaut... "article_ref".... ??



    Tu n'as pas l'impression qu'il y a un problème ?

  5. #5
    Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2018
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2018
    Messages : 300
    Points : 67
    Points
    67
    Par défaut
    Oups, j'ai fais un var_dump sans le $_POST, par mégarde.
    Voici donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array(2) { [0]=> string(9) "Produit 1" [1]=> string(0) "" } array(2) { [0]=> string(9) "Produit 1" [1]=> string(0) "" }
    merci

  6. #6
    Invité
    Invité(e)
    Par défaut
    Donc :
    • tu vois bien qu'il y a DEUX valeurs : "Produit 1" ET "" !

    Ce qui explique les 2 lignes insérées en BDD.

    Le problème se situe en AMONT (dans le script d'envoi).

  7. #7
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    Bonjour,

    Pour éviter les problèmes en amont, il faudrait commencer par écrire quelque chose de plus lisible côté JS selon moi.
    De plus, il s'agit d'un formulaire, donc l'événement à écouter n'est pas click mais submit

    Ce qui donne, avec l'utilisation de $.ajax() et $.serialize() :
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $('body').on('submit', '#idDuFormulaireParExemple', function (e) {
            e.preventDefault();
            var $this = $(this);
            $.ajax({
                method: 'POST',
                url: '../PHP/insert/article.php',
                data: $this.serialize(),
                success: function (response) {
                    console.log('response', response);
                }
            });
            return false;
        });

    C'est quand même plus lisible, et pas besoin de changer le code JS à chaque changement du formulaire !

  8. #8
    Invité
    Invité(e)
    Par défaut
    +1 darkstar123456

    1- Je n'avais pas vu/lu que Zarkoffe avait encore construit une usine à gaz !
    (@Zarkoffe : ne le prends pas de mal, j'en ai construit beaucoup moi aussi...)

    2- Sinon, on peut s'assurer de ne pas enregistrer la ligne vide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      foreach ($_POST['article_ref'] as $key => $value)
      {
          if( !empty(trim($_POST["article_ref"][$key])) )
          {
    ...

Discussions similaires

  1. [SQL] Probême de double curseur...
    Par plomy dans le forum Oracle
    Réponses: 7
    Dernier message: 17/01/2006, 11h17
  2. [SQL] requete INSERT possible?
    Par clad523 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 03/08/2005, 15h42
  3. Réponses: 9
    Dernier message: 17/03/2005, 09h20
  4. Réponses: 3
    Dernier message: 11/01/2005, 08h20
  5. [C#][SQL Server] Insertion de données inversées
    Par lamiae18 dans le forum ASP.NET
    Réponses: 7
    Dernier message: 20/04/2004, 16h11

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