【发布时间】:2014-05-05 03:20:03
【问题描述】:
此代码用于插入特定规格的单元。 例如,如果规格是长度,那么单位是厘米、米和毫米。
当我尝试用逗号读取单个文本字段中的所有单位时,在 PHP 中尝试用逗号分解这些单位。 但是当我提交表单时,只有第一个单元被保存到 DB。
这是我的数据库结构:
CREATE TABLE IF NOT EXISTS `tbl_unit` (
`unit_id` varchar(5) NOT NULL,
`unit_name` varchar(50) NOT NULL,
`specification_id` int(11) NOT NULL,
PRIMARY KEY (`unit_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
这是我的代码:
<?php
include("../config.php");
$uid=$_POST['unitid'];
$unit=$_POST['unitname'];
$spec=$_POST['specification'];
$arr1 = explode(',',$unit);
$size=count($arr1);
for($i=0;$i<$size;$i++)
{
mysql_query("insert into tbl_unit values('".$uid."','$arr1[$i]','".$specification."')");
}
header('Location:addunit.php');
?>
让我感到困惑的是,当我尝试分别插入 $arr1[0]、$arr1[1] 或 $arr1[2] 时,值被保存了。我认为 for 循环只执行一次。 for循环有什么问题?
【问题讨论】:
-
您的代码容易受到 SQL 注入的攻击。你应该阅读how to prevent them in PHP。
-
欢迎来到 Stack Overflow!还有the mysql extension is deprecated。您应该切换到MySQLi 或PDO 并使用准备好的语句。
-
var_dump($arr1);看到爆炸有效,我不会盲目爆炸。我会考虑进行 strpos 检查,例如if (strpos($unit, ',' ) !== FALSE) { echo "INPUT IS READY TO EXPLODE"; }。您不应该在循环中查询,为什么不检查查询的返回值(请参阅php.net/mysqli_query)...
标签: php loops for-loop explode