0

我有一个while循环,它正在从csv中获取数据。在while循环内部有一个条件(如果条件),如果条件为真,foreach循环将在我们想要一次将一行插入数据库的地方执行。这应该继续对于csv的每一行。如果我在 csv 中有 10 行,它应该在数据库中插入所有 10 行。但是 mycode 将第一行插入 10 次。

$handle = fopen($_FILES['upcsv']['tmp_name'], "r");
$count = count(file($_FILES['upcsv']['tmp_name']));
fgetcsv($handle, 1000, ",");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) 
{
   $clt = mysql_query("select MCLNTLKNOFLG,MCLNTDKTRNGFRM,MCLNTDKTRNGTO from mclientmst where MCLNTCD ='".$data[1]."'");
   if(mysql_num_rows($clt)>0)
   {    
      $clts = mysql_fetch_array($clt);
      if($clts['MCLNTLKNOFLG']==1)
      {
         $i=1 ;
         foreach(range ($clts['MCLNTDKTRNGFRM'], $clts['MCLNTDKTRNGTO']) as $num)
         {
           $dkt = mysql_query("select XCMPCD from  xdockethdr where XDKTNO ='$num'");
           $ndkt = mysql_query("select XCMPCD from  xtempdockethdr where XDKTNO ='$num'");
           if(mysql_num_rows($dkt)==0 && mysql_num_rows($ndkt)==0)
           {
              $date = explode('/',$data[3]);
              $dt = $date[2].'-'.$date[1].'-'.$date[0];
              $dktid = mysql_query("select MAX(XDKTID) as maxid from xtempdockethdr");
              $maxid = mysql_fetch_array($dktid);
              $max = $maxid['maxid'] +1;
              $query = mysql_query("insert into xtempdockethdr (XCMPCD,XCLNTCD,XDKTNO,XCNSGCD,XDKTPUDATE,XDKTPUTIME,XDKTNOPKGS,XDKTMODLV,XDKTHTOCONCD,XDKTDCTVAL,XDKTDIMWT,XDKTACTWT,XUNIQUEID,XDKTID) VALUES ('".$data[0]."','".$data[1]."','".$num."','".$data[2]."','".$dt."','".$data[4]."','".$data[5]."','".$data[6]."','".$data[7]."','".$data[8]."','".$data[9]."','".$data[10]."','".$data[11]."','".$max."')");   
              $i++; 
           }
         }
      }
   }    
}
fclose($handle);
header('Location:upload_docketentry.php');
4

1 回答 1

1
  1. 您需要break;在代码之后设置 a 。它将关闭第一个循环(foreach)并下降。

  2. continue 2;在 sql 插入后添加。这将结束这个循环并进入while循环的开始并继续工作。

    $handle = fopen($_FILES['upcsv']['tmp_name'], "r");
    $count = count(file($_FILES['upcsv']['tmp_name']));
    fgetcsv($handle, 1000, ",");
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) // **#1 point**
    {
       $clt = mysql_query("select MCLNTLKNOFLG,MCLNTDKTRNGFRM,MCLNTDKTRNGTO from mclientmst where MCLNTCD ='".$data[1]."'");
       if(mysql_num_rows($clt)>0)
       {    
          $clts = mysql_fetch_array($clt);
          if($clts['MCLNTLKNOFLG']==1)
          {
             $i=1 ;
             foreach(range ($clts['MCLNTDKTRNGFRM'], $clts['MCLNTDKTRNGTO']) as $num)
             {
               $dkt = mysql_query("select XCMPCD from  xdockethdr where XDKTNO ='$num'");
               $ndkt = mysql_query("select XCMPCD from  xtempdockethdr where XDKTNO ='$num'");
               if(mysql_num_rows($dkt)==0 && mysql_num_rows($ndkt)==0)
               {
                  $date = explode('/',$data[3]);
                  $dt = $date[2].'-'.$date[1].'-'.$date[0];
                  $dktid = mysql_query("select MAX(XDKTID) as maxid from xtempdockethdr");
                  $maxid = mysql_fetch_array($dktid);
                  $max = $maxid['maxid'] +1;
                  $query = mysql_query("insert into xtempdockethdr (XCMPCD,XCLNTCD,XDKTNO,XCNSGCD,XDKTPUDATE,XDKTPUTIME,XDKTNOPKGS,XDKTMODLV,XDKTHTOCONCD,XDKTDCTVAL,XDKTDIMWT,XDKTACTWT,XUNIQUEID,XDKTID) VALUES ('".$data[0]."','".$data[1]."','".$num."','".$data[2]."','".$dt."','".$data[4]."','".$data[5]."','".$data[6]."','".$data[7]."','".$data[8]."','".$data[9]."','".$data[10]."','".$data[11]."','".$max."')");   
                  $i++; 
                  // continue 2; // Goes to #1
                  // break; // Goes to #2
               }
             } // #2 point
             var_dump(__LINE__); // This will executed if you place break operator
          }
       }    
    }
    fclose($handle);
    header('Location:upload_docketentry.php');
    
于 2013-10-08T11:42:24.893 回答