输入字段:在 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 上使用第三个选项。
我有一个价格输入字段。输入的值将存储到数据库中,例如 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 上使用第三个选项。