Php foreach 循环仅在 mysql 检查重复项时添加第一行

Php foreach loop only adds first row in mysql when checking for duplicates

当用户在文本区域中输入多行时,我有一个页面。

$systemName = "MySystem";
// scandata is a textarea element
if(isset($_POST['submit'])) {
////////////
$rows = preg_split('/\n/',$_POST['scandata']);
foreach($rows as $row){
    $data = preg_split('/\t/',$row);
    if(count($data) == 6){
        $sigID = $data[0];
        $sigGroup = $data[1];
        $sigType = $data[2];
        $sigName = $data[3];
        $sigScanStrenght = $data[4];
        if (preg_match('/\b[A-Z][A-Z][A-Z]-[0-9][0-9][0-9]\b/', $sigID)){
            if ($sigGroup == "22") { 
                 if ($sigType == "11") {
                    if ($sigName == "") {
                        $add_action[] = "<div class=\"alert alert-danger fade in alert_me\">$button_x_close <b>ERROR:</b> \t Sorry, but signature ID <u>$sigID</u> is not scanned down enough. Please scan it to higher percentage.</div>\n";
                    }else { 

                    //function VALIDATE
                        $validateSQL= "SELECT `id` FROM `signature` WHERE `sigName` = '$sigName' AND `systemName` = '$systemName' AND `sigID` = '$sigID' AND `already_run` = 'no'";

                        if ($validate_result=mysqli_query($con,$validateSQL))
                          {
                          // Return the number of rows in result set
                          $validate_rowcount=mysqli_num_rows($validate_result);
                          if ($validate_rowcount > 0){
                          $sql_to_add = false;
                          $add_action[] = "<div class=\"alert alert-warning fade in alert_me\">$button_x_close Sorry, but signature ID <u>$sigID</u> you entered is a duplicate</div>";}
                          else{
                          $sql_to_add = true;
                          $to_add_action = "<div class=\"alert alert-success fade in alert_me\">$button_x_close Succes signature ID <u>$sigID</u> has been added</div>";}

                    if($sql_to_add) {$sql = "INSERT INTO `signature` (`systemName`, `sigName`, `sigGroup`, `sigType`, `sigScanStrenght`, `reporter`, `sigID`)
                        VALUES ('$systemName', '$sigName', '$sigGroup', '$sigType', '$sigScanStrenght', '$reporter', '$sigID')";
                        if (!mysqli_query($con,$sql)) {   die('Error: ' . mysqli_error($con));      }
                        }
                        else {$sql = "";}

                        $add_action[] = $to_add_action;
                        // Free result set
                        mysqli_free_result($validate_result);
                        mysqli_close($con); 
                        }
                }//else sigName close

                }//if sigtype close
                else {$add_action[] = "<div class=\"alert alert-danger fade in alert_me\">$button_x_close <b>ERROR:</b> \t Sorry, but signature type <u><b>$sigType</b></u> is not added</div> \n";}

            }// if sigroup close
            else {$add_action[] = "<div class=\"alert alert-danger fade in alert_me\">$button_x_close <b>ERROR:</b> \t Sorry, but signature ID <u>$sigID</u> has invalid signature group (<i> $sigGroup </i>)</div> \n";}

        }//if pregmatch sigid close
        else {$add_action[] = "<div class=\"alert alert-danger fade in alert_me\">$button_x_close <b>ERROR:</b> \t Sorry, but you entered invalid signature ID (<i> $sigID </i>)</div> \n";}

    }//if count close 
    else {$add_action[] = "<div class=\"alert alert-danger fade in alert_me\">$button_x_close <b>ERROR:</b> \t Bad data input. Make sure you pasted the result right.</div> \n";}

}//foreach close
}//main function close

问题是第一行是否成功。它只将第一行输入数据库。如果其他行不符合前面的 if 语句,它会打印出正确数量的错误。

我很确定我遗漏了 foreach 循环的一个要点,但我找不到它。

不胜感激。

编辑代码使其完整。

编辑:代码本身有效。问题是它只添加文本区域的第一行。

我数了 13 个左括号“{”和 9 个右括号“}”。如果问题真的出在 foreach 循环上,那就不是什么好事了。

感谢您修复括号不平衡问题并格式化代码以使其更易于阅读。

我没有你的测试数据集所以我不能确定,但​​在快速测试中

mysqli_close($con);

阻止我对连接进行其他查询。一旦你点击这条线,我认为所有额外的查询都会失败。报错了吗?我在后续查询中遇到了很多错误。