PHP从CSV更新MySQL跳过错误行

PHP从CSV更新MySQL跳过错误行,php,mysqli,fgetcsv,Php,Mysqli,Fgetcsv,所以基本上,我有一个CSV文件,它将被上传,但不会存储在服务器上,PHP将从中提取数据并相应地更新数据库 我的问题是,如果在数据库中已经找到一个条目,但它在第一个错误时停止,并且没有跳过,我将尝试跳过CSV中的行 第62行,我添加了一条评论,这就是我试图实现这一目标的地方 if($update==1)&($update2==1))后面的ELSE语句中有一个continue,这意味着如果update和update2不==1,则跳过,或者我认为是这样,但它只是在找到第一个重复序列号后停止 非常感谢您

所以基本上,我有一个CSV文件,它将被上传,但不会存储在服务器上,PHP将从中提取数据并相应地更新数据库

我的问题是,如果在数据库中已经找到一个条目,但它在第一个错误时停止,并且没有跳过,我将尝试跳过CSV中的行

第62行,我添加了一条评论,这就是我试图实现这一目标的地方

if($update==1)&($update2==1))后面的ELSE语句中有一个continue,这意味着如果update和update2不==1,则跳过,或者我认为是这样,但它只是在找到第一个重复序列号后停止

非常感谢您的帮助

    public function upload() {
    $this->data['token'] = $this->session->data['token'];
    $connect = mysqli_connect("localhost", "username", "password", "database");
    $this->load->model('setting/mail');
    if (isset($_POST["upload"])) {
        if ($_FILES['update_cases']['name']) {
            $filename = explode(".", $_FILES['update_cases']['name']);
            if (end($filename) == "csv") {
                $handle = fopen($_FILES['update_cases']['tmp_name'], "r");
                fgetcsv($handle);
                $this->load->model('sale/order');
                while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
                    print "row start<br>";
                    $order_id = mysqli_real_escape_string($connect, $data[0]);
                    $product_sn = mysqli_real_escape_string($connect, $data[1]);
                    $customer_email = mysqli_real_escape_string($connect, $data[2]);
                    $status = mysqli_real_escape_string($connect, $data[13]);
                    $rma_number = mysqli_real_escape_string($connect, $data[17]);
                    $rma_type = mysqli_real_escape_string($connect, $data[18]);
                    $planned_product = mysqli_real_escape_string($connect, $data[19]);
                    $tur = mysqli_real_escape_string($connect, $data[20]);
                    $pi = mysqli_real_escape_string($connect, $data[21]);
                    $cir = mysqli_real_escape_string($connect, $data[22]);
                    $cmr = mysqli_real_escape_string($connect, $data[23]);
                    $waive_return = mysqli_real_escape_string($connect, $data[24]);
                    $replacement_tracking = mysqli_real_escape_string($connect, $data[26]);
                    $inventory = mysqli_real_escape_string($connect, $data[27]);
                    $replacement_sn = mysqli_real_escape_string($connect, $data[28]);
                    $replacement_sn2 = mysqli_real_escape_string($connect, $data[29]);
                    $qty_shipped = mysqli_real_escape_string($connect, $data[33]);
                    $date_shipped = mysqli_real_escape_string($connect, $data[35]);
                    $result1 = $this->model_sale_order->getOrderById($order_id);
                    $current_status = $result1['order_status'];
                    $rma_num = $result1['order_rma'];
                    $customer_id = $result1['cus_id'];
                    $regpro_id = $result1['regpro_id'];
                    $update = 0;
                    $update2 = 0;
                    $batch_data = array(
                        "order_id" => $order_id, 
                        "rpl_tracking" => $replacement_tracking, 
                        "qty_shipped" => $qty_shipped, 
                        "replacement_sn" => $replacement_sn, 
                        "replacement_sn2" => $replacement_sn2, 
                        "inventory" => $inventory, 
                        "rma_type" => $rma_type, 
                        "pi_num" => $pi, 
                        "tur_num" => $tur, 
                        "cir_num" => $cir, 
                        "cmr_num" => $cmr, 
                        "waive_return" => $waive_return, 
                        "update_status" => $status, 
                        "date_shipped" => $date_shipped, 
                        "pre_status" => $current_status, 
                        "comment" => $planned_product, 
                        "planned_product" => $planned_product
                    );
                    if ($qty_shipped !== 0) {
                        $this->load->model('catalog/product');
                        $this->load->model('catalog/regproduct');
                        // If Two replacement products
                        if ($qty_shipped == 2) {
                            //Check if Serial Number Already Exists (If exists, I want the script to skip this row and move onto the next row in the excel sheet)
                            $check_sn = $this->model_catalog_regproduct->checkSNBelong2($replacement_sn);
                            $check_sn2 = $this->model_catalog_regproduct->checkSNBelong2($replacement_sn2);
                            if ($check_sn) {
                                $update = 0;
                                $this->error['error_replacement_sn'] = "SN " . $replacement_sn . " in use!";
                            } else {
                                $update = 1;
                            }
                            if ($check_sn2) {
                                $update2 = 0;
                                $this->error['error_replacement_sn2'] = "SN " . $replacement_sn2 . " in use!";
                            } else {
                                $update2 = 1;
                            }
                            if (($update == 1) && ($update2 == 1)) {
                                $replacement_product = $this->model_catalog_product->getProductBySN($replacement_sn);
                                $replacement_product2 = $this->model_catalog_product->getProductBySN($replacement_sn2);
                                $defective_product_warranty = $this->model_catalog_regproduct->getRegproductById($customer_id, $regpro_id);
                                $warr_date = $defective_product_warranty['regpro_warr_date'];
                                $replacement_model = $replacement_product['m_type'];
                                $replacement_model2 = $replacement_product2['m_type'];
                                $replacement_family = $replacement_product['f_type'];
                                $replacement_family2 = $replacement_product2['f_type'];
                                $this->model_catalog_regproduct->addRegproductReplacement2($customer_id, $replacement_sn2, $replacement_family2, $replacement_model2, $warr_date);
                                $this->model_catalog_regproduct->addRegproductReplacement($customer_id, $replacement_sn, $replacement_family, $replacement_model, $warr_date);
                                $this->model_sale_order->confirmOrder3($this->user->getId(), $batch_data);
                                if (((int)$current_status) !== ((int)$status)) {
                                    if ((int)$status == 210) {
                                        if ($rma_type != "Standard") {
                                            $template = $this->model_setting_mail->getTemplateByLabel('RMA_PRODUCT_RECEIVED_ADVANCED');
                                        } elseif ($rma_type == "Standard") {
                                            $template = $this->model_setting_mail->getTemplateByLabel('RMA_PRODUCT_RECEIVED_STANDARD');
                                        }
                                    } elseif ((int)$status == 230) {
                                        if ($rma_type != "Standard") {
                                            $template = $this->model_setting_mail->getTemplateByLabel('RMA_REPLACEMENT_PRODUCT_SHIPPED_ADVANCED');
                                        } elseif ($rma_type == "Standard") {
                                            $template = $this->model_setting_mail->getTemplateByLabel('RMA_REPLACEMENT_PRODUCT_SHIPPED_STANDARD');
                                        }
                                    } elseif ((int)$status == 500) {
                                        $template = $this->model_setting_mail->getTemplateByLabel('RMA_CLOSED');
                                    }
                                    if ((int)$template['email_status'] == 1) {
                                        $subject = $template['email_subject'];
                                        $message = $template['email_content'];
                                        // Get Customer Email
                                        $this->load->model('sale/customer');
                                        $order_info = $this->model_sale_customer->getCustomerByEmail($customer_email);
                                        $customer_info = $this->model_sale_customer->getCustomer($order_info['cus_id']);
                                        $email = $customer_info['cus_username'];
                                        $this->load->model('sale/order');
                                        $result_tracking = $this->model_sale_order->getOrderById($order_id);
                                        $replacement_tracking = $result_tracking['order_return_tracking_num'];
                                        $message = str_replace('%FIRSTNAME%', $customer_info['cus_firstname'], $message);
                                        $message = str_replace('%LASTNAME%', $customer_info['cus_lastname'], $message);
                                        $message = str_replace('%RMA%', $rma_num, $message);
                                        $message = str_replace('%TRACKING%', $replacement_tracking, $message);
                                        $mail = new Mail();
                                        $mail->protocol = $this->config->get('mail_protocol');
                                        $mail->hostname = $this->config->get('smtp_host');
                                        $mail->username = $this->config->get('smtp_username');
                                        $mail->password = $this->config->get('smtp_password');
                                        $mail->port = $this->config->get('smtp_port');
                                        $mail->timeout = $this->config->get('smtp_timeout');
                                        $mail->setTo($email);
                                        $mail->setFrom($this->config->get('sender_email'));
                                        $mail->setSender($this->config->get('sender_name'));
                                        $mail->setSubject(html_entity_decode($subject, ENT_QUOTES, 'UTF-8'));
                                        $mail->setText(html_entity_decode($message, ENT_QUOTES, 'UTF-8'));
                                        try {
                                            $mail->send();
                                        }
                                        catch(Exception $e) {
                                            $this->error['warning'] = $e->getMessage();
                                        }
                                    }
                                }
                                $this->session->data['success'] = $this->language->get('text_success');
                                //$this->redirect($this->url->link('report/sale_return', 'token=' . $this->data['token'], 'SSL'));

                            } else {
                                print $update."<br>";
                                print $update2."<br>";
                                print "Errors<br>";
                                continue;
                            }
                            //row start
                            //0
                            //0
                            //Errors
                            //row start
                            //0
                            //0
                            //Errors
                            //row start
                            //row end
                            //row start
                            //row end
                            //row start
                            //row end
                        } else if ($qty_shipped == 1) {
                            // will do something else
                        } else if ($qty_shipped == 0) {
                            // will also do something else
                        }
                    } else if (!isset($qty_shipped)) {
                        // will also do something else
                    }
                    print "row end<br>";
                }
            }
        }
    }
}
公共函数上传(){
$this->data['token']=$this->session->data['token'];
$connect=mysqli_connect(“本地主机”、“用户名”、“密码”、“数据库”);
$this->load->model('setting/mail');
如果(isset($_POST[“upload”])){
如果($_文件['update_cases']['name'])){
$filename=explode(“.”,$\u文件['update\u cases']['name']);
如果(结束($filename)=“csv”){
$handle=fopen($_文件['update_cases']['tmp_name'],“r”);
fgetcsv($handle);
$this->load->model('sale/order');
while(($data=fgetcsv($handle,1000,“,”)!==FALSE){
打印“行开始
”; $order\u id=mysqli\u real\u escape\u字符串($connect,$data[0]); $product\u sn=mysqli\u real\u escape\u字符串($connect,$data[1]); $customer\u email=mysqli\u real\u escape\u字符串($connect,$data[2]); $status=mysqli\u real\u escape\u字符串($connect,$data[13]); $rma_number=mysqli_real_escape_字符串($connect,$data[17]); $rma_type=mysqli_real_escape_string($connect,$data[18]); $planned_product=mysqli_real_escape_字符串($connect,$data[19]); $tur=mysqli\u real\u escape\u字符串($connect,$data[20]); $pi=mysqli\u real\u escape\u字符串($connect,$data[21]); $cir=mysqli\u real\u escape\u字符串($connect,$data[22]); $cmr=mysqli\u real\u escape\u字符串($connect,$data[23]); $弃权_返回=mysqli_real_escape_字符串($connect,$data[24]); $replacement\u tracking=mysqli\u real\u escape\u string($connect,$data[26]); $inventory=mysqli\u real\u escape\u字符串($connect,$data[27]); $replacement\u sn=mysqli\u real\u escape\u字符串($connect,$data[28]); $replacement_sn2=mysqli_real_escape_string($connect,$data[29]); $qty_shipped=mysqli_real_escape_string($connect,$data[33]); $date_shipped=mysqli_real_escape_string($connect,$data[35]); $result1=$this->model\u sale\u order->getOrderById($order\u id); $current_status=$result1['order_status']; $rma_num=$result1['order_rma']; $customer_id=$result1['cus_id']; $regpro_id=$result1['regpro_id']; $update=0; $update2=0; $batch_data=array( “订单id”=>$order\U id, “rpl_跟踪”=>$replacement_跟踪, “已发货数量”=>已发货数量美元, “替换序列号”=>$replacement\u序列号, “替换\u sn2”=>$replacement\u sn2, “库存”=>$库存, “rma_类型”=>rma_类型, “pi_num”=>pi美元, “tur_num”=>$tur, “cir_num”=>cir$, “cmr_num”=>cmr美元, “放弃回报”=>$弃权回报, “更新_状态”=>$status, “发货日期”=>$date\u发货日期, “前状态”=>$当前状态, “评论”=>$计划产品, “计划产品”=>$计划产品 ); 如果($qty_shipped!==0){ $this->load->model('catalog/product'); $this->load->model('catalog/regproduct'); //如果更换两个产品 如果($qty_shipped==2){ //检查序列号是否已经存在(如果存在,我希望脚本跳过此行并移动到excel工作表中的下一行) $check\u sn=$this->model\u catalog\u regproduct->checkSNBelong2($replacement\u sn); $check\u sn2=$this->model\u catalog\u regproduct->checkSNBelong2($replacement\u sn2); 如果($check\u sn){ $update=0; $this->error['error\u replacement\u sn']=“sn”。$replacement\u sn.“正在使用!”; }否则{ $update=1; } 如果($check\u sn2){ $update2=0; $this->error['error\u replacement\u sn2']=“SN”。$replacement\u sn2。“正在使用!”; }否则{ $update2=1; } 如果($update==1)和($update2==1)){ $replacement\u product=$this->model\u catalog\u product->getProductBySN($replacement\u sn); $replacement\u product2=$this->model\u catalog\u product->getProductBySN($replacement\u sn2); $defected\u product\u warranty=$this->model\u catalog\u regproduct->getRegproductById($customer\u id,$regpro\u id);