走出内循环并继续外循环

时间:2013-10-08 10:22:44

标签: php mysql csv

我有一个while循环,它从csv.Inside获取数据,而循环有一个条件(如果条件),如果条件为真,foreach循环将在我们想要一次一行插入数据库的地方执行。这应该在csv的每一行继续。如果我在csv中有10行,它应该在数据库中插入所有10行。但是我的代码插入第一行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');

1 个答案:

答案 0 :(得分:1)

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

  2. 在sql插入后添加continue 2;。 这将结束这个循环并进入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');