2011-09-17 52 views
0

我用下面的代码抢我的表单数据发送到MySQL:如何使用PHP爆炸功能和插入值到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个问题。首先,为每个“围兜”标签创建全新的数据库条目是最佳做法吗?或者,将逗号分隔列表存储在单个列中会更好吗?其次,我被建议使用爆炸功能。但是,我一直无法弄清楚如何将其转换为我当前的INSERT查询。如果任何人都能引导我走向正确的方向,我会非常感激。对PHP很新,只​​是试图教给自己一些基础知识。

谢谢。

回答

1

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

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

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

假设你不用逗号分隔列表的方式(如我推荐的那样),那么你可能需要在这段代码中使用的唯一地方是爆炸,如果你传递了被标记为在其中一个POST变量中使用逗号分隔列表。在这种情况下,你可能会做这样的事情:

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

然后,您可以采取以下两种方法:

  • 遍历所有的标签在代码中的适当位置,并发出一个INSERT查询在每次通过循环
  • 构建一个INSERT查询一次将所有的标签。

附加注释

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

+0

非常感谢你。这会给我一些下午的工作。对不起......关于您的建议的另一个问题: – Chance

+0

下面是我的代码,它允许用户搜索已标记的照片。选择一个比赛名称并输入标签号码。如果我把东西分成两张桌子(一张桌子上有照片ID /标签,另一张桌子上有我的比赛名字和城市),那么搜索将如何从这两个来源中获取? $ tag = $ _POST ['tag']; $ race = $ _POST ['race']; $数据=请求mysql_query( “从运动员选择*,其中标签LIKE '%$标签%' 和种族LIKE '%$种族%'”); – Chance

+0

我不明白原始表格是用来建模的 - 原始表格中的行对应于比赛吗?给运动员?图像?如果不理解表格的外观,我很难回答你的问题。您应该考虑提出另一个问题,在这个问题中,您解释表格的当前设计,征求对此的反馈,并要求人们解释如何解决您不知道如何解决的问题。要么是这样,要么花一些时间查找关于数据库规范化的更多信息。 – Hammerite

0

如果仅用于表格中的一列,那么可以使用逗号分隔标签。

爆炸功能这次不会使用。它将用于从db中提取这些值以供进一步处理。

如果逗号分隔字符串保存在数据库那么当你需要它回来,你可以做这样的事情

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

其中$ _row [“标签”]是在获取标签的数据值。

+0

难道不存储在一列是针对数据库标准化数据的列表?另外如果你想从标签列表中只删除一个标签?你将不得不让标签,做了str_replace函数,然后将它放回桌上,如果标签是一个单独的表,你只需要一个delete语句 – thegaffney

0
在$标记

= $ _ POST [ '标签'];

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

为此,你必须按照给定的代码

$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')") ;