四舍五入值

问题描述 投票:1回答:2

我苦苦挣扎,寻求帮助。我有一个名为products的表,两个重要的列是productPrice和productRewards。

我可以通过表单手动插入数据,在我的管理控制台中显示所有产品,就好了。

基本上,我想获取productPrice字段的值,并使用floor()将其舍入并应用于productRewards字段。

示例:如果admin输入199.99到productPrice的输入字段199将自动输入到productRewards字段中。

if(isset($_POST['add_product'])) { 

$productRewards = $_POST['productRewards'];
$productPrice = $_POST['productPrice'];

$query = "INSERT INTO products( productPrice, productRewards ) VALUES ";
$query .= "( {$productPrice}, {$productRewards} ) ";

$add_product_query = mysqli_query($connection,$query);
}

以上是与将管理表单中的数据插入我的数据库相关的2列。

我正在努力解决这个问题,我知道如何使用floor()函数,但是在发送数据之前,我无法获得一个插入值的值并将其转换。我尝试将我的价值改为:

"INSERT INTO products ( productRewards ) VALUES "; ( {floor $productPrice} ) ";

但是如果我输入23.99,插入我的数据库的数据是24.所以我发送数据,但phpMyAdmin正在四舍五入,因为它是一个整数列,所以我的数据至少到了正确的位置,但我的逻辑是错的,因为我的floor()函数没有做我想做的事情(我知道我没有正确地问它:/)。任何指针都会受到极大的欢迎,谢谢。

php
2个回答
0
投票

你可以直接在sql中做

  "INSERT INTO products ( productRewards ) VALUES ( FLOOR($productPrice) ) ;"

但是不应该在sql中使用php var你有sql注入的风险

所以你应该看一下binding_param的SQL驱动程序


0
投票

您应该使用PDO而不是像这样的SQL函数。这可能无法直接解决您的问题,但这是一个更好的做法,因此您不会像SQL注入那样容易受到攻击。

您可以使用以下代码执行此操作:

if(isset($_POST['add_product'])) { 

$productRewards = floor($_POST['productRewards']);
$productPrice = floor($_POST['productPrice']);

$host = '127.0.0.1';
$db = 'dbname';
$user = 'dbusername';
$pass = 'dbpass';
$charset = 'dbcharset';

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$opt = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];
$pdo = new PDO($dsn, $user, $pass, $opt);

$query = $pdo->prepare('INSERT INTO products(productPrice, productRewards) VALUES (:productPrice, :productRewards)');
$query->bindValue(':productPrice', $productPrice, PDO::PARAM_STR);
$query->bindValue(':productRewards', $productRewards, PDO::PARAM_STR);

$add_product_query = $query->fetch(PDO::FETCH_ASSOC);
}

你也可以在数据库中使用浮点数:)

© www.soinside.com 2019 - 2024. All rights reserved.