Загрузить CSV-файл со значением запятой, используя Php и mysql? - PullRequest
0 голосов
/ 05 мая 2020

Я работал над сайтом электронной коммерции и загружал файл CSV в базу данных PHP размера с запятой. В результате в базе данных появляется обратный sla sh и двойные кавычки. Пожалуйста, помогите мне решить эту проблему, так как я потратил два дня на ее работу.

Формат CSV в блокноте

Product Name,Footware Size
Shirt,"""35,36,34"""

Изображение моего файла CSV

CSV-файл

Но сохранен в таблице Скриншот таблицы

Код загрузки CSV-файла в базу

if($_FILES['csv_file']['name'])
{
 $filename = explode(".", $_FILES['csv_file']['name']);
 if(end($filename) == "csv")
 {
  $handle = fopen($_FILES['csv_file']['tmp_name'], "r");
  $find_header = 0;
  while($data = fgetcsv($handle,6000,",",'"'))
  {
      $find_header++;
      if($find_header > 1){
       $name = $database->escape_string($data[0]);
       $foot_size = trim(addslashes($data[2]), '"');;
       $products = new Product();
       $products->product_name = $name;
       $products->created_at = $time;
       $products->updated_at = $time;
       $result = $products->save();
      if($result){
            $product_id = $products->id;

            if(!empty($foot_size)){
                $sizes = explode(',', $foot_size);
                $size_str = '';
                foreach($sizes as $size){
                    $size_str .= $size.',';

                }
                $p_size = rtrim($size_str,",");

                $product_size = new FootSize();
                $product_size->product_id = $product_id;
                $product_size->foot_size = $p_size;
                $product_size->date = $time;
                $product_size->save();
            }

      }
      }

  }
 if($result === true){
   $session->message('Product File Uploaded Successfully.');
   fclose($handle);

  redirect_to('add_product_csv');

 }
 }
 else
 {
  $message = '<label class="text-danger">Please Select CSV File only</label>';
 }
}

1 Ответ

0 голосов
/ 05 мая 2020

Проблема

У вас есть ошибка в этой строке:

$foot_size = trim(addslashes($data[2]), '"');

Он сначала избегает двойных кавычек:

"35,36,34" --> \"35,36,34\"

И затем обрежьте их:

\"35,36,34\" --> \"35,36,34\

Решение

В зависимости от того, действительно ли вы хотите, чтобы котировки хранились в вашей БД, позвоните по номеру trim или addslahes (но не оба), или ни один из двух:

Полоса кавычек:

$foot_size = trim($data[2], '"');

Сохранять кавычки:

$foot_size = $data[2];

# your framework *might* require explicitly escaping of quote chars:
$foot_size = addslashes($data[2]);

# even better:
$foot_size = $database->escape_string($data[2]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...