2013-10-08 3 views
0

У меня есть цикл while, который извлекает данные из csv. Внутри цикла while есть условие (если условие), если условие истинно, цикл foreach будет выполняться там, где мы хотите вставить одну строку за раз в базу данных. Это должно продолжаться для каждой строки csv. если у меня есть 10 строк в csv, он должен вставить все 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'); 

ответ

1
  1. Вы должны установить break; после кода. Он закроет первую петлю (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'); 
    
Смежные вопросы