импорт данных Excel в таблицу базы данных с использованием php - PullRequest
0 голосов
/ 12 апреля 2019

проблема в моем Excel 369 строк. Когда я отображаю эти данные, они отображаются правильно, но когда я вставляю те же данные в таблицу БД, вставляются только 18-30 записей.

if (isset($_POST['Submit'])) {
    $file = $_FILES['csv_file']['tmp_name'];
    $handle = fopen($file, "r");
    if ($file == NULL) {
    error(_('Please select a file to import'));
    redirect(page_link_to('excel_data_upload'));
    }else {
        $conn = connect();
        while(($filesop = fgetcsv($handle, 1000, ",")) !== false)
        {
            $num3 = $filesop[3];
            $num8 = $filesop[8];
            $num9 = $filesop[9];
            $num20 = $filesop[20];
            if($num3!='ExpiryDate' &&$num8!='VCNO' &&$num20!='TotalB2CAmount' && $num9 !='STBNO'){

                $insertAgent =  mysqli_query($conn, "INSERT INTO `upload_billing_data` 
                (`vc_number`,`stb_number`,`operator_id`,`expiry_date`,`monthly_bill_amount`) 
                VALUES ('$num8','$num9',140,'$num3','$num20')");

                if($insertAgent)
                {
                    echo 'succss';
                }else{
                    echo 'error';
                }

            }  
        }
        close($conn);

    }
}

Я получаю данные Excel. Я хочу вставить все записи

Ответы [ 2 ]

0 голосов
/ 12 апреля 2019

Пожалуйста, проверьте этот модифицированный код

if (isset($_POST['Submit'])) {
    $file = $_FILES['csv_file']['tmp_name'];
    $handle = fopen($file, "r");
    if ($file == NULL) {
    error(_('Please select a file to import'));
    redirect(page_link_to('excel_data_upload'));
    }else {
        $conn = connect();
        while(($filesop = fgetcsv($handle, 1000, ",")) !== false)
        {
            $num3 = $filesop[3];
            $num8 = $filesop[8];
            $num9 = $filesop[9];
            $num20 = $filesop[20];
            if($num3!='ExpiryDate' &&$num8!='VCNO' &&$num20!='TotalB2CAmount' && $num9 !='STBNO'){

                $insertAgent =  mysqli_query($conn, "INSERT INTO `upload_billing_data` 
                (`vc_number`,`stb_number`,`operator_id`,`expiry_date`,`monthly_bill_amount`) 
                VALUES ('".mysqli_real_escape_string($num8)."','".mysqli_real_escape_string($num9)."',140,'".mysqli_real_escape_string($num3)."','".mysqli_real_escape_string($num20)."')");

                if($insertAgent)
                {
                    echo 'succss';
                }else{
                    echo 'error';
                }

            }  
        }
        close($conn);

    }
}

BY, используя mysqli_real_escape_string (), вы сможете избежать проблем с sqlinjection и справиться с проблемой кавычек, которая может вызывать проблему.

в вашем блоке else, где вы находитесь echo "error". вы можете использовать mysqli_error($conn);, чтобы точно определить, какая ошибка возникает при выполнении вставки

0 голосов
/ 12 апреля 2019

Измените код, как показано ниже, и вы можете сохранить все данные, используя один запрос к базе данных:

$query_insert = array();

while(($filesop = fgetcsv($handle, 1000, ",")) !== false) {
   $num3 = filterString($filesop[3]);
   $num8 = filterString($filesop[8]);
   $num9 = filterString($filesop[9]);
   $num20 = filterString($filesop[20]);

   if ($num3!='ExpiryDate' &&$num8!='VCNO' &&$num20!='TotalB2CAmount' && $num9 !='STBNO') {
      $query_insert[] = "('{$num8}', '{$num9}', 140, '{$num3}', '{$num20}')";
   }  
}

// If no row matched your if, then there will be no row to add to the database
if (count($query_insert)>0) {
   $conn = connect();

   $query_insert_string = implode(', ', $query_insert);

   $query = "INSERT INTO `upload_billing_data` (`vc_number`, `stb_number`, `operator_id`, `expiry_date`, `monthly_bill_amount`) VALUES {$query_insert_string};";
   $insertAgent = mysqli_query($query);

   // The rest of you code 
   ...

   close($conn);
}



// This function makes sure that you string doesn't contain characters that might damage the query
function filterString($string) {
   $string = str_replace(array("\'", '"'), array('', ''), $string);
   $string = filter_var($string, FILTER_SANITIZE_STRING);
   return $string;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...