如何使用PHP爆炸功能&将值插入MYSQL

时间:2011-09-17 19:14:46

标签: php mysql

我正在使用以下代码来获取表单的数据并发送到MYSQL:

$id=$_POST['id'];
$tag=$_POST['tag']; 
$race=$_POST['race']; 
$city=$_POST['city']; 
$pic=($_FILES['photo']['name']);

并使用以下方法将其插入我的表格中

mysql_query("INSERT INTO `people` VALUES ('$id', '$tag', '$race', '$city', '$pic')") ;

我的问题是我需要允许用户在表单的“标记”字段中输入多个值(以逗号或空格分隔),以允许在同一图像中标记多个人。

所以我有2个问题。首先,为每个'bib'标签创建全新的数据库条目是最佳做法吗?或者将逗号分隔列表存储在单个列中会更好吗? 其次,我被建议使用爆炸功能。但是,我无法弄清楚如何将其转换为我当前的INSERT查询。如果有人能引导我朝着正确的方向前进,我真的很感激。非常新的PHP,只是想自学一些基础知识。

感谢。

3 个答案:

答案 0 :(得分:1)

所以我有2个问题。首先,为每个'bib'标签创建全新的数据库条目是最佳做法吗?或者将逗号分隔列表存储在一个列中会更好吗?

在数据库列中存储以逗号分隔的列表通常是一个错误。这将使编写查询(例如)查找给定人员已被标记的图像变得非常困难。您应该阅读数据库规范化。通常情况下,在这种情况下你会做什么,给定的照片可以包含任意多的人,有一个表image_person有两列:一列指定图像ID,另一列指定一个人。表中的一行对应于“此人已在此图像中被标记”的陈述。这样可以更轻松地查询您存储的信息。

其次,我被建议使用爆炸功能。

假设您没有使用逗号分隔列表方法(正如我所建议的那样),您可能需要在此代码中使用爆炸的唯一地方是,如果您将要标记为逗号的人员列表传递给其中一个POST变量中的分隔列表。在这种情况下,您可能会执行以下操作:

$tags = explode(',', $_POST['tags']);

然后您可以选择以下两种方法之一:

  • 在代码中的适当位置循环遍历所有标记,并在每次遍历循环时发出INSERT查询
  • 构建一个INSERT查询,一次添加所有标记。

其他评论

请阅读 SQL注入并确保编写安全代码。您在问题中发布的代码非常不安全。

答案 1 :(得分:0)

如果只对表中的一列使用逗号分隔的标签,那很好。

这次不会使用

爆炸功能。当您从db中提取这些值以进行进一步处理时,将使用它。

如果逗号分隔的字符串保存在db中,那么当你需要它时,你可以做类似的事情

$arr = explode(",",$_row['tag']);

其中$ _row ['tag']是fetch上标记的数据值。

答案 2 :(得分:0)

  

在$ tag = $ _POST ['标记'];

你包含标签列表,所以现在你只需使用explode函数来获取这些值。

为此你必须遵循给定的代码

$tag=$_POST['tag'];

$arrs=explode(", ",$tag);

foreach($arrs as $arr){

$insertTag .= $arr;

}
echo $insertTag;

mysql_query("INSERT INTO `people` VALUES ('$id', '$insertTag', '$race', '$city', '$pic')") ;