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;
}