2016-05-31 17 views
1

私は2つの関数、Mysqlデータベースのma配列からデータを挿入するためのinsertInto、配列内の現在の行がすでに存在するかどうかを確認するcheckRowがあります。配列tableArrayの構造は$ tableArray ["Tabelle2"] [行の数] [列の数]です。ただし、常にページを更新すると、データベースにさらに多くの行が挿入され、行がすでに存在するかどうかを確認する必要はありません。関数を呼び出すときに無限ループforループ

機能 insertInto:

function insertInto($i, $tableArray, $conn){ //insert into db 
    $dateFormated = split('/', $tableArray["Tabelle2"][$i][3]); 
    $date = $dateFormated[2].'-'.$dateFormated[0].'-'.$dateFormated[1]; 

    $insertInto = "insert into Excel(Arbeitsplatz, Auftragsart, Auftragsnummer, Datum, Tageszeit, Erklaerung, Beschreibung, AG, StdArt, Anwender) 
    values('".$tableArray["Tabelle2"][$i][0]."', '".$tableArray["Tabelle2"][$i][1]."', '".$tableArray["Tabelle2"][$i][2]."', '".$date."', 
    '".$tableArray["Tabelle2"][$i][4]."', '".$tableArray["Tabelle2"][$i][5]."', '".$tableArray["Tabelle2"][$i][6]."', 
    '".$tableArray["Tabelle2"][$i][7]."', '".$tableArray["Tabelle2"][$i][8]."', '".$tableArray["Tabelle2"][$i][9]."')"; 
    if($conn->query($insertInto) === true){echo "Datensatz Nr. ".$i." wurde eingefuegt.<br />";}else{echo "Datensatz Nr. ".$i." wurde nicht eingefuegt.<br />";} 
} 

機能checkRow

function checkRow($i, $tableArray, $conn){ //if(... == ...) 
    $count = "select count(*) from Excel;"; 
    $res = $conn->query($count); 
    $row = $res->fetch_assoc(); 
    $rowsNum = $row["count(*)"];  
    if($rowsNum == 0){ 
     insertInto($i, $tableArray, $conn); 
    } else { 
     for($b = 1; $b <= $rowsNum; $b++){ 
      $select = "select * from Excel where ExcelID = '".$b."'"; 
      $result = $conn->query($select); 
      $row = $result->fetch_assoc(); 
      if($tableArray["Tabelle2"][$i][0] == $row["Arbeitsplatz"] && $tableArray["Tabelle2"][$i][1] == $row["Auftragsart"] && $tableArray["Tabelle2"][$i][2] == $row["Auftragsnummer"] && $tableArray["Tabelle2"][$i][4] == $row["Tageszeit"] && $tableArray["Tabelle2"][$i][5] == $row["Erklaerung"] && $tableArray["Tabelle2"][$i][6] == $row["Beschreibung"] && $tableArray["Tabelle2"][$i][7] == $row["AG"] && $tableArray["Tabelle2"][$i][8] == $row["StdArt"] && $tableArray["Tabelle2"][$i][9] == $row["Anwender"]){ 
       echo "Datensatz ist bereits vorhanden.<br />"; 
      } else { 
       insertInto($i, $tableArray, $conn); 
      } 
     } 
    } 
} 

Iが関数checkRow呼び出しループ:

for($g = 1; $g <= count($tableArray["Tabelle2"]); $g++){ 
    checkRow($g, $tableArray, $conn); 
} 

答えて

0

私はそれを解決し、 p問題はcheckRow();にありました。私は常に配列から現​​在の行をMysqlデータベースの1行でチェックし、それらのすべてをチェックしませんでした。配列の現在の行がデータベースの行と同じでない場合、常に+1を数える$counterを追加することで、私はこの問題を解決しました。

更新機能checkRow

function checkRow($i, $tableArray, $conn){ //if(... == ...) 
      $count = "select count(*) from Excel;"; 
      $res = $conn->query($count); 
      $row = $res->fetch_assoc(); 
      $rowsNum = $row["count(*)"]; 
      $counter = 0; 

      if($rowsNum == 0){ 
       insertInto($i, $tableArray, $conn); 
       } elseif($rowsNum > 0) { 
        for($b = 1; $b <= $rowsNum; $b++){ 
         $select = "select * from Excel where ExcelID = '".$b."'"; 
         $result = $conn->query($select); 
         $row = $result->fetch_assoc(); 
         if($tableArray["Tabelle2"][$i][0] == $row["Arbeitsplatz"] && $tableArray["Tabelle2"][$i][1] == $row["Auftragsart"] && $tableArray["Tabelle2"][$i][2] == $row["Auftragsnummer"] && $tableArray["Tabelle2"][$i][4] == $row["Tageszeit"] && $tableArray["Tabelle2"][$i][5] == $row["Erklaerung"] && $tableArray["Tabelle2"][$i][6] == $row["Beschreibung"] && $tableArray["Tabelle2"][$i][7] == $row["AG"] && $tableArray["Tabelle2"][$i][8] == $row["StdArt"] && $tableArray["Tabelle2"][$i][9] == $row["Anwender"]){ 
           echo "Datensatz ist bereits vorhanden.<br />"; 
          } else {$counter++;} 
        } 
        if($counter == $rowsNum){ 
         insertInto($i, $tableArray, $conn); 
         $counter = 0; 
        } 
       } 
     }