Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 验证价格值以便插入到销售表中_Php_Mysql - Fatal编程技术网

Php 验证价格值以便插入到销售表中

Php 验证价格值以便插入到销售表中,php,mysql,Php,Mysql,我有一个表格,其中一个输入如下: <input name="price" type="text" /> // Validate price: if (empty($_POST['price'])){ $price = 0; } elseif(!empty($_POST['price'])) { $price = is_decimal($_POST['price']); } else { $price = TRUE; } 2)将价格插入销售表的查询: $q

我有一个表格,其中一个输入如下:

<input name="price" type="text" />
// Validate price:
if (empty($_POST['price'])){
    $price = 0;
} elseif(!empty($_POST['price'])) {
    $price = is_decimal($_POST['price']);
} else {
    $price = TRUE;
}
2)将价格插入销售表的查询:

$q ="INSERT INTO sales (price) VALUES ('$price')";
在使用$price变量的空值运行查询之后,我检查了sales表,发现插入到price列中的值是1.00,但不是我期望的0.00

我做错了什么?你能帮忙吗?谢谢

注意事项:

这是名为is_decimal的函数:

销售额
表:

$query = 'CREATE TABLE sales (
        sale_id int(10) unsigned NOT NULL auto_increment,
        price decimal(6,2) unsigned NOT NULL,
        PRIMARY KEY  (sale_id),
        ) ENGINE = MYISAM';       

问题出在您的函数中,特别是
preg\u match
。您将收到
1
,因为这是它找到的匹配数。要修复此问题,只需将结果变量添加到输出:

function is_decimal ($price){
        $price = trim($price);
        preg_match('/^(\d)(.\d)?$/', $price, $result);
        $price = round($result, 2);
return $price;
}

您只需执行一个cast:
$price=(float)0。我不知道你在用
$price=true(这两个都是
其他
结果)<代码>真
在强制时计算为
1
。注意你的逻辑流程。贾里德是正确的。你可能应该试着去决定你的结果。当它当前进入数据库时,
$price
的值为
TRUE
TRUE
等于
1
为什么要在
中插入
中的
$price
呢?这使它成为一个字符串,不太确定mysql是否真的喜欢它。无论如何,您应该避免在SQL代码中插入变量。将mysqli或PDO与prepared语句和绑定参数一起使用。@jcaron-当然有。@Jared。谢谢,我不使用(float),而是使用(int),因为表列定义为十进制(6,2)。对于我的具体案例,我将TRUE替换为isset($_POST['price'])。它现在对我很管用。再次感谢大家,这当然是OP混乱逻辑的一部分,但是使用
is
函数返回除布尔值以外的任何值都是相反的。完全有可能实际的逻辑缺陷是
if
块是如何构造的,而不是这个函数本身。同意prey\u match问题,但是
is\u decimal
不应该在“空”情况下被调用……看看,它应该让您清楚发生了什么。另外,根据您的php,您可能需要对匹配变量使用
$result[0]
,因为它是一个数组。@jcaron,我刚刚注意到您提到的空调用不使用
是_decimal
;正如您和Jared都指出的,代码中似乎有不止一个错误。@JaredFarrish,完全同意那里的想法-手头有多个问题。我通常不接触SQL内容,但我可以很快发现正则表达式的错误。:)
function is_decimal ($price){
        $price = trim($price);
        preg_match('/^(\d)(.\d)?$/', $price, $result);
        $price = round($result, 2);
return $price;
}