двойная отправка SQL-запроса

#javascript #sql #node.js #db2 #ejs

#javascript #sql #node.js #db2 #ejs

Вопрос:

У меня есть форма, в которой я вставляю сведения о продукте в свою таблицу базы данных. однако, по какой-то причине, это двойная подача. Я ни за что на свете не могу понять, почему. вот код как переднего, так и заднего плана:

интерфейс:

 

<form method="GET" action="/addProducts" style="border: 2px solid black">
   <h1>Add a product</h1>
   <fieldset>
      <label for="productName">Product Name:</label>
      <input type="text" id="item" name="item" placeholder="Candy Socks" style="border: 1px solid black" required>
      <label for="productPrice">Price:</label>
      <input type="text" id="price" name="price" placeholder="$9.99" style="border: 1px solid black" required>
      <!-- <label for="productCategory">Category:</label>
         <input type="text" id="category" name="category" placeholder="Socks" style="border: 1px solid black"equired> -->
      <label for="productCategory">SIZES (OPTIONAL):</label>
      <!-- <input type="text" id="size" name="size" placeholder="(EX) XS, S, M, L, XL, XXL" style="border: 1px solid black"> -->
      <label for="check-1">Extra Small</label>
      <input type="checkbox" name="size[]" id="extra-small" value="xs" onclick="xsFunction()">
      <style>
         .hide { display: none; }
      </style>
      <span id="smallPrice" class="hide" >Price $ <input type="text" id="small"></span>
      <script>
         function xsFunction() {
           // document.getElementById("xs").innerHTML = '<label for="check-1">XS Price ($)</label><input type="text" name="xs" id="extra-small">';
           document.getElementById("smallPrice").classList.toggle('hide');
         }
      </script>
      <p id="xs"></p>
      <label for="check-1">Small</label>
      <input type="checkbox" name="size[]" id="small" value="small" onclick="sFunction()">
      <script>
         function sFunction() {
           document.getElementById("s").innerHTML = '<label for="check-1">SMALL Price ($)</label><input type="text" name="s" id="small">';
         }
      </script>
      <p id="s"></p>
      <label for="check-1">Medium</label>
      <input type="checkbox" name="size[]" id="medium" value="medium" onclick="mFunction()">
      <script>
         function mFunction() {
           document.getElementById("m").innerHTML = ' <label for="check-1">MEDIUM Price ($)</label><input type="text" name="m" id="medium">';
         }
      </script>
      <p id="m"></p>
      <label for="check-1">Large</label>
      <input type="checkbox" name="size[]" id="large" value="large" onclick="lFunction()">
      <script>
         function lFunction() {
           document.getElementById("l").innerHTML = '<label for="check-1">LARGE Price ($)</label> <input type="text" name="l" id="large">';
         }
      </script>
      <p id="l"></p>
      <label for="check-1">Extra Large</label>
      <input type="checkbox" name="size[]" id="extra-large" value="xl" onclick="xlFunction()">
      <script>
         function xlFunction() {
           document.getElementById("xl").innerHTML = ' <label for="check-1">XL Price ($)</label><input type="text" name="xl" id="xl">';
         }
      </script>
      <p id="xl"></p>
      <label for="divisionCategory">CATEGORY (OPTIONAL):</label>
      <select name="category" id="">
         <% if(data.length){ 
            for(var i = 0;i < data.length;i  ) { %>
         <option value="<%= data[i].CATEGORIES %>"><%= data[i].CATEGORIES %></option>
         <% }
            }else{ %>
         <% } %>
      </select>
   </fieldset>
   <fieldset>
      <label for="bio">Description:</label>
      <textarea id="bio" name="description" placeholder="Beautiful and fun Candy Socks!" style="border: 1px solid black" required></textarea>
   </fieldset>
   <button id="submitButton" type="submit">NEXT</button>
</form>


 

серверная часть:

 var addProducts =
    "insert into PRODUCTS ( ITEM, DESCRIPTION, PRICE, SIZES, DIVISION, XS, S, M, L, XL ) VALUES ('"  
    req.query.item  
    "', '"  
    req.query.description  
    "', '"  
    req.query.price  
    "', '"  
    size  
    "', '"  
    req.query.category  
    "', '"  
    req.query.xs  
    "', '"  
    req.query.s  
    "', '"  
    req.query.m  
    "', '"  
    req.query.l  
    "', '"  
    req.query.xl  
    "' )";
ibmdb.open(req.session.ibmdbconnDash, function(err, conn) {
    if (err) 
        return console.log(err);
    conn.query(addProducts, function(err, rows) {
        if (err) {
            console.log(err);
        }

        conn.close(function() {
            console.log("closed the function /add-products");
        });

        var getProductDetails = "select * from products where ITEM = '"   req.query.item   "'";
        ibmdb.open(req.session.ibmdbconnDash, function(err, conn) {
            if (err) return console.log(err);
            conn.query(getProductDetails, function(err, dataset2) {
                if (err) {
                    console.log(err);
                }

                var productAddedValue = ""
                console.log(gianluca)
                res.render("add-products2", {
                    page_title: "add-products2",
                    data: dataset2,
                    userName: req.session.username,
                    FN: req.session.firstname,
                    LN: req.session.lastname,
                    CO: req.session.company,
                    productAddedValue: productAddedValue,
                });

                conn.close(function() {
                    console.log("closed the function /add-products p2");
                });
            });
        });



    });
});
 

Я знаю, насколько запутан этот код, поэтому приношу свои извинения. Я нахожусь в тумане, пытаясь все уладить. но все равно двойная подача, что так странно. Я вижу двойники каждого продукта, когда нажимаю отправить. спасибо за помощь!

Комментарии:

1. Форма не будет отправляться дважды сама по себе. Существует ли JavaScript, который отправляет форму в дополнение к автоматической отправке?

2. Вы должны использовать параметры в SQL-запросе вместо объединения строк, чтобы предотвратить внедрение SQL.

3. Ваша форма должна использовать действие post вместо действия get.

4. не знаю почему, но изменение его на POST сработало … не могли бы вы объяснить, почему?

5. и ПОЧЕМУ a ibmdb.open() вложено в a ibmdb.open() ?