2017-03-19 3 views
1

Ich versuche, mehrere Einträge aus einer HTML-Array-Tabelle zur Datenbank hinzuzufügen, aber der Wert der Menge scheint zu duplizieren, einschließlich der Wert für Bemerkungen. Der gesamte Eintrag scheint ebenfalls zu duplizieren. Wie kann ich verhindern, dass sie passieren?So verhindern Sie, dass foreach Einträge aus einem HTML-Tabellenarray dupliziert

Hier ist meine PHP-Code für die Tabelle in der Datenbank einfügen:

<?php 
    $tmp = 0; 
    if (isset($_POST['submit'])) { 
     if(!empty($_POST["inRemarks"])) { 
      foreach($_POST["inRemarks"] as $inRemarks) if ($tmp++ < 2) { 
       $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
       $inQty = $_POST['incQty']; 
       foreach ($inQty as $key => $incQty) { 
        $prod = $_POST['prodItem']; 
        foreach($prod as $prodItem) { 
         $emp = $_POST['emp']; 
         $emp1 = $conn->query("SELECT empID AS empA FROM employee WHERE empName = '$emp'"); 
         $emp2 = $emp1->fetch(PDO::FETCH_ASSOC); 
         $emp3 = $emp2['empA']; 
         $prod1 = $conn->query("SELECT prodID AS prodA FROM product WHERE prodName = '$prodItem'"); 
         $prod2 = $prod1->fetch(PDO::FETCH_ASSOC); 
         $prod3 = $prod2['prodA']; 
         $sql = "INSERT INTO incoming (inQty, inDate, receiptNo, inRemarks, empID, prodID) 
         VALUES ('$incQty',CURDATE(),'".$_POST['rcno']."','$inRemarks','$emp3','$prod3')"; 
         $result = $conn->query($sql); 
         echo "<meta http-equiv='refresh' content='0'>"; 
        } 
       } 
      } 
     } 
    } 
?> 

Hier ist mein JavaScript-Code für das Formular und Tabelle:

function validateForm() { 
    if(document.getElementById('addRcpt').value == "") { 
     alert('Please Enter Receipt Number'); 
     document.getElementById('addRcpt').style.borderColor = "red"; 
     return false; 
    } 
    if (document.getElementById('addQty').value == "") { 
     alert('Please Enter Quantity'); 
     document.getElementById('addQty').style.borderColor = "red"; 
     return false; 
    } 
    if(confirm('Are you sure you want to add this entry?')) { 
     alert("Incoming Product Successfully Added"); 
     return true;   
    } 
    else { 
     return false;  
    } 
} 

function deleteRow(tableID) { 
    try { 
     var table = document.getElementById(tableID); 
     var rowCount = table.rows.length; 
     var current = ''; 
     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) { 
       if(rowCount <= 1) { 
        alert("Cannot delete all the rows."); 
        break; 
       } 

       table.deleteRow(i); 
       rowCount--; 
       i--; 
       regroup(i,rowCount,tableID); 
      } 
     } 
    }catch(e) { 
     alert(e); 
    } 
} 

function addRow(tableID) { 
    var table = document.getElementById(tableID); 
    var rowCount = table.rows.length; 
    var row = table.insertRow(rowCount); 
    var colCount = table.rows[0].cells.length; 
    for(var i=0; i<colCount; i++) { 
     var newcell = row.insertCell(i); 
     if(i==1){ 
      newcell.innerHTML = (rowCount+1) 
     } 
     else{ 
      newcell.innerHTML = table.rows[0].cells[i].innerHTML; 
     } 
     switch(newcell.childNodes[0].type) { 
      case "text": 
      newcell.childNodes[0].value=""; 
      break; 
      case "checkbox": 
      newcell.childNodes[0].checked = false; 
      break; 
      case "select-one": 
      newcell.childNodes[0].selectedIndex = 0; 
      break; 
     } 
    } 
} 

function regroup(i,rc,ti){ 
    for(j = (i+1);j<rc;j++){ 
     document.getElementById(ti).rows[j].cells[1].innerHTML = j+1; 
    } 
} 

Abfrageergebnis:

Query result

Antwort

0

Die verschachtelten foreach Schleifen multiplizieren Ihre Anfrage und Ihr Code ist absolut nicht zu tun, was Sie denken, es tut.

<?php 

    if (isset($_POST['submit'])) { 

     $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

     for ($index = 0; $index < count($_POST['prodItem']; $index++) { 

      $inRemarks = $_POST["inRemarks"][$index]; 
      $prodItem = $_POST['prodItem'][$index]; 
      $inQty = $_POST['incQty'][$index]; 
      $emp = $_POST['emp']; 

      $emp1 = $conn->query("SELECT empID AS empA FROM employee WHERE empName = '$emp'"); 
      $emp2 = $emp1->fetch(PDO::FETCH_ASSOC); 
      $emp3 = $emp2['empA']; 
      $prod1 = $conn->query("SELECT prodID AS prodA FROM product WHERE prodName = '$prodItem'"); 
      $prod2 = $prod1->fetch(PDO::FETCH_ASSOC); 
      $prod3 = $prod2['prodA']; 
      $sql = "INSERT INTO incoming (inQty, inDate, receiptNo, inRemarks, empID, prodID) 
      VALUES ('$incQty',CURDATE(),'".$_POST['rcno']."','$inRemarks','$emp3','$prod3')"; 
      $result = $conn->query($sql); 

      echo "<meta http-equiv='refresh' content='0'>"; 
     } 
    } 
?> 
+0

..Danke sehr !! es funktioniert !! wusste nie, dass für Schleife ist nur die Lösung, anstatt mehrere Foreach .. –

+0

Sie müssen verstehen, was Sie mit Ihrem Code getan haben :) die Logik war falsch. Es spielt keine Rolle, ob Sie eine For- oder Foreach-Schleife verwenden. – PinkTurtle

0

durch Filtern Ihrer $_POST["inRemarks"] und $_POST['incQty']; mit array_unique

if(!empty($_POST["inRemarks"])) { 
    $_inRemarks = array_unique($_POST["inRemarks"]); // <<<<<<<<<< 
    foreach($_inRemarks as $inRemarks) if ($tmp++ < 2) { 
     $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $inQty = array_unique($_POST['incQty']); // <<<<<<<<<< 
// ...... 
+0

Ich habe das schon versucht, aber es funktioniert immer noch nicht. :( –

+0

nach submit, was ist die Ausgabe von '$ _POST ['incQty']' und '$ _POST [" inRemarks "]' – hassan

+0

es berücksichtigt nur den endgültigen Wert und verdoppelt immer noch die Menge und die eingegebenen Bemerkungen, obwohl sie unterschiedliche Werte sind Es wird nur der letzte Wert berücksichtigt und es wird dupliziert, in dem der erste Wert ignoriert wird –

0

Sie müssen Ihre $ sql = „INSERT INTO ... Bewegung in der ersten foreach-Schleife.

foreach($_POST["inRemarks"] as $inRemarks){ 
.........other foreach loops and rest of code......... 
$sql = "INSERT INTO... 
} 
+0

der letzte Wert wird immer noch dupliziert und der erste Wert wird ignoriert –

+0

Versuch: print_r ($ _ POST), vielleicht haben deine Arrays auch Duplikate. – sonam

+0

..Ich habe das Problem entdeckt, die Foreach scheint meine Werte zu duplizieren, da ich Foreach Loops habe. –

Verwandte Themen