Php удалить пробелы, запятые и вставить в базу данных - PullRequest
0 голосов
/ 18 июня 2020

Я помещаю данные из exel в базу данных (Mysql десятичная цена (9,2).

Как удалить пробелы, запятые (заменить точкой ".") Перед вставкой в ​​базу данных?

После вставки данных (цены) в базу данных у меня 1.00 и должно быть 1235.00

Exel file -> price

1 456,34
1 350,21
1 200,00
1 235,23
300,14
350,00
345,00
436,00
436,00

php file

foreach($data as $row)
        {

        $price = str_replace(' ', '', ':price');
        $price = str_replace(',', '.', $price);
        $price = preg_replace('/\s+/', '', $price);

            $insert_data = array(
                ':sym_id'       =>  $row[0],
                ':code'         =>  $row[1],
                ':name'         =>  $row[2],
                ':quantity'     =>  $row[3],
                ':price'        =>  $row[4],
                ':position'     =>  $row[5],
                ':visible'      =>  $row[6]
            );

            $query = "
            INSERT INTO symphony 
            (sym_id, code, name, quantity, price, position, visible) 
            VALUES (:sym_id, :code, :name, :quantity, $price, :position, :visible)
            ";

            $statement = $connect->prepare($query);
            $statement->execute($insert_data);
        }

1 Ответ

1 голос
/ 18 июня 2020

Прежде всего, я не знаю, что вы ожидаете:

$price = str_replace(' ', '', ':price');
$price = preg_replace('/\s+/', '', $price);

делать. Но в конечном итоге у вас есть переменная с именем $price, заполненная значением ':price'. Я подозреваю, что это оценивается как true, в результате чего MySQL помещает 1,00 в десятичное поле.

Я думаю, вы пытаетесь закончить тем, что запятая будет заменена десятичной точкой в ​​цене. Это было бы ближе:

foreach($data as $row)
        {
            //Remove the price conversion. It did nothing

            $insert_data = array(
                ':sym_id'       =>  $row[0],
                ':code'         =>  $row[1],
                ':name'         =>  $row[2],
                ':quantity'     =>  $row[3],
                ':price'        =>  preg_replace('/,/', '.', $row[4]), //Replace you're comma with a point
                ':position'     =>  $row[5],
                ':visible'      =>  $row[6]
            );

            //Use only named values here. Don't put the variable '$price' in here at all
            $query = "
            INSERT INTO symphony 
            (sym_id, code, name, quantity, price, position, visible) 
            VALUES (:sym_id, :code, :name, :quantity, :price, :position, :visible)
            ";

            $statement = $connect->prepare($query);
            //Use insert data to fill the named parameters
            $statement->execute($insert_data);
        }

Но подождите ... Что произойдет, если пользователь также использует . как разделитель тысяч и , как десятичный разделитель. Затем вам нужно сделать go шаг дальше и использовать программу форматирования номеров PHP. Подробности здесь: https://www.php.net/manual/en/numberformatter.parse.php

РЕДАКТИРОВАТЬ:

Я вижу, вы немного изменили строки в l oop с тех пор, как я начал писать ответ:

$price = str_replace(' ', '', ':price');
$price = str_replace(',', '.', $price);
$price = preg_replace('/\s+/', '', $price);

Эффект все тот же: в конце этих строк $price === ':price'. Третий параметр str_replace - это строка, которую изменяют эти строки, и она не содержит ни запятой, ни пробела.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...