Skip to content

商品CSV登録での更新時、在庫数にカンマが含まれていると1,000 → 1 のようにカンマ以降が無視される #6580

@dk-umebius

Description

@dk-umebius

概要(Overview)

商品のデータをCSVで更新(※新規登録ではない)する際に、在庫数を1,000のようにカンマを含めるとカンマ以降が無視して保存される。
在庫数「1,000」で入力 → 「1」で保存される。

ただしsql_modeによっては、保存されずエラーで固まる。

その際はajax中に下記エラーが発生している。
An exception occurred while executing a query: SQLSTATE[HY000]: General error: 1366 Incorrect decimal value: ‘1,000’ for column ‘stock’ at row 1

原因は、カンマを除いてバリデーションした後で、元のカンマ付きの文字列をsetStockに渡していること。

$stock = str_replace(',', '', $row[$headerByKey['stock']]);
if (preg_match('/^\d+$/', $stock) && $stock >= 0) {
$ProductClass->setStock($row[$headerByKey['stock']]);
} else {
$message = trans('admin.common.csv_invalid_greater_than_zero', ['%line%' => $line, '%name%' => $headerByKey['stock']]);
$this->addErrors($message);
}

再現手順(Procedure)

  1. 商品CSV登録で既存商品の更新CSVを作る
  2. 在庫数を1,000などカンマ入りにする
  3. CSV登録を実行する

環境(Environment)

EC-CUBE4.3
MySQLで確認しましたがポスグレでもエラーになると思います。

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions