2016-11-18 34 views
-1

我基本上爲用戶運行一個上傳文件,並在codeigniter上開發我的應用程序。它從文件中獲取一行,並在條目不存在時更新該表。移動到foreach循環中的下一個元素,如果條目已經在表中

但我想先檢查該條目是否已經在數據庫中。萬一它應該移動到下一個元素。

以下是我的型號代碼。

function upload($file_name){ 
$file = './uploads/'.$file_name; 


$this->load->library('excel'); 

$objPHPExcel = PHPExcel_IOFactory::load($file); 

$cell_collection = $objPHPExcel->getActiveSheet()->getCellCollection(); 

foreach ($cell_collection as $cell) { 
    $column = $objPHPExcel->getActiveSheet()->getCell($cell)->getColumn(); 
    $row = $objPHPExcel->getActiveSheet()->getCell($cell)->getRow(); 
    $data_value = $objPHPExcel->getActiveSheet()->getCell($cell)->getValue(); 


    if ($row == 1) { 
     $header[$row][$column] = $data_value; 
    } else { 
     $arr_data[$row][$column] = $data_value; 
    } 
} 
//send the data in an array format 
$data['header'] = $header; 
$data['values'] = $arr_data; 
foreach ($arr_data as $q){ 
$data = array(
    't_ref'=>$q['A'], 
    't_name'=>ucwords($q['B']), 
    't_cnic'=>$q['C'], 
    't_dept'=>$q['D'], 
    'status'=>$q['E'] 
    ); 
$this->db->select('t_cnic'); 
$this->db->where('t_cnic',$q['C']); 
$this->db->from('tbl_users'); 
$query = $this->db->get(); 
if($query->num_rows()>0){ 
break; 
}else{ 
$this->db->insert('tbl_users',$data); 
} 
} 
$msg = "Successfully Added"; 
return $msg; 
} 

(休息不動,以ofcourse下一個元素)

我如何可以移動到下一個元素,而不是僅僅停止時,它會發現網絡中心已經在表中現有的條目循環。

+1

通常,「繼續」; ? – Roger

+0

不知道如何在codeignitor中更改您的查詢,但可以使用ON DUPLICATE KEY UPDATE/IGNORE來更新現有的新行值(即使它們與舊值相同),也可以忽略更新並轉到下一個記錄..這就要求您的表至少有一個唯一索引或2列索引,這些索引在組合時必須是唯一的。 –

回答

2

你不需要打破,或繼續在這裏,只是收拾一下邏輯:

if ($query->num_rows()==0) { 
    $this->db->insert('tbl_users',$data); 
} 
2

更換breakcontinue

if($query->num_rows()>0) { 
    continue; 
} else { 

繼續被循環結構中使用跳過本次循環的休息,繼續在條件評估的執行,然後下一次循環的開始。

0

你爲什麼不只是這樣做

if($query->num_rows() === 0){ 
     $this->db->insert('tbl_users',$data); 
     $msg = "Successfully Added"; 
    } else { 
     $msg = "File Already exist"; 
    } 

    return $msg; 
相關問題