输入字段:在 mysql 数据库中用逗号而不是点存储十进制值

input field: store decimal values with comma instead of a point in mysql database

我有一个价格输入字段。输入的值将存储到数据库中,例如 13,99.

在 MySQL 数据库中,该字段的类型为 decimal(10,2)。 如果用户使用点而不是逗号键入 13.99,则价格只会正确存储到数据库中。如果用户键入 13,99,它将被存储为 13.00

我应该在我的代码中更改什么,以便用户也可以键入 13,99 并将其正确存储到数据库中?

<?php
...
    if ($valid) {
        $pdo = Database::connect();
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $sql = "UPDATE products  set price =? WHERE id = ?";
        $q = $pdo->prepare($sql);
        $q->execute(array($price,$id));
        Database::disconnect();
        header("Location: index.php");
    }
} else {
    $pdo = Database::connect();
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = "SELECT * FROM products where id = ?";
    $q = $pdo->prepare($sql);
    $q->execute(array($id));
    $data = $q->fetch(PDO::FETCH_ASSOC);
    $price = $data['price'];

    Database::disconnect();
}
?>
...

  <div class="control-group <?php echo !empty($priceError)?'error':'';?>">
                    <label class="control-label">Preis</label>
                    <div class="controls">
                        <input class="form-control" name="price" type="text"  placeholder="price Number" value="<?php echo !empty($price)?$price:'';?>">
                        <?php if (!empty($priceError)): ?>
                            <span class="help-inline"><?php echo $priceError;?></span>
                        <?php endif;?>
                    </div>
                  </div>

尝试

...

if ($valid) {
        $price = str_replace(",",".",$price);
        $pdo = Database::connect();
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $sql = "UPDATE products  set price =? WHERE id = ?";
        $q = $pdo->prepare($sql);
        $q->execute(array($price,$id));
        Database::disconnect();
        header("Location: index.php");
    }
} else {
    $pdo = Database::connect();
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = "SELECT * FROM products where id = ?";
    $q = $pdo->prepare($sql);
    $q->execute(array($id));
    $data = $q->fetch(PDO::FETCH_ASSOC);
    $price = $data['price'];

    Database::disconnect();
}
...

如果您更改 "locale",小数点、千位分隔符等也应更改。

DECIMAL(10,2) 不包括“.”要么 ','。那是格式问题。

如果您愿意,您也可以在 MySQL 的 FORMAT() function 上使用第三个选项。