以一种形式向数据库添加多个项目

时间:2014-03-05 19:14:17

标签: php html forms

我有一个内部网站,我正在开发工作。我不是一个Web开发人员,但知道足以完成一些基本功能。我有一个表单可以正常插入数据。不过,我试图找出最后一篇文章。

该页面旨在向我们的网站添加作业。每个职位都分配了职责。使这项工作(在我的大脑中)最简单的方法是创建一个责任表,其中包含责任ID,职责ID,然后是责任。在完成新职位的表单时,我想要一种批量添加这些职责的方法。类似于在使用MySQL工作台时添加新字段的方法 - 您可以在其中单击下一行并添加该字段。那会很棒。

我不确定除了添加多个项目之外甚至还要搜索什么来实现这一目标 - 这还没有找到我正在寻找的东西。

提前致谢!

3 个答案:

答案 0 :(得分:2)

大多数时候,这里的人都喜欢看你尝试过的东西。

这个问题被问到here

示例MySQL语句:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

如果需要,您可以使用PHP变量替换值。只要确保它们是字符串,它们就是'引号'。

答案 1 :(得分:1)

如果您的表单允许您同时提交多个职责,那么我会使用PDO。记住PDO是你的朋友,在插入之前总是清理你的输入。这是最基本的版本,您可能希望用下拉菜单或文本区域替换输入。

表格

responsibilityID|PositionID|responsibility

responsID应为PK并自动增加

<强> HTML

<form>
  <div>
    <h1>job</h1>
    <label>PositionID</label><input name='jobs[][positionID]' />
    <label>responsability</label><input name='jobs[][responsibility]' />
  </div>
  <div>
    <h1>job</h1>
    <label>PositionID</label><input name='jobs[][positionID]' />
    <label>responsability</label><input name='jobs[][responsibility]' />
  </div>
  <div>
    <h1>job</h1>
    <label>PositionID</label><input name='jobs[][positionID]' />
    <label>responsability</label><input name='jobs[][responsibility]' />
  </div>
  <div>
    <h1>job</h1>
    <label>PositionID</label><input name='jobs[][positionID]' />
    <label>responsability</label><input name='jobs[][responsibility]' />
  </div>
  <input type='submit' />
</form>

<强>基本

创建一个insert语句,然后遍历你的作业,将每个值绑定到语句并执行它们。

$insert_sql = "INSERT INTO responsibilities (`PositionID`, `responsibility`) VALUES (:PositionID, :responsibility);";
$stmt = PDO::Prepare($insert_sql)
foreach ($jobs as $job){
  //add some input testing before you execute to make sure you are not inserting bad values
  $stmt->bindValue(":positionID", $job['positionID'], PDO::PARAM_INT);
  $stmt->bindValue(":responsibility", $job['responsibility'], PDO::PARAM_STR);
  $stmt->execute();
}

查询中的:fieldname告诉PDO需要用绑定函数替换什么,然后bindValue / bindParam函数告诉在查询中插入什么内容并正确转义值以便插入它。较旧的sql函数允许未转义或不正确转义的值,并且您获得了little bobby tables problem。 PDO可以保护您免受一些最严重的注入攻击,但您应该确保positionID指向一个真实的位置,或者该责任中没有奇怪的java脚本漏洞利用代码。

<强>花式

创建一个insert语句,绑定params,然后foreach循环完成你的职责,检查/清理输入(永远不要信任表单数据)然后执行语句。每次循环绑定参数都将指向新作业。

$insert_sql = "INSERT INTO responsibilities (`PositionID`, `responsibility`) VALUES (:PositionID, :responsibility);";
$job = array('positionID'=>NULL, 'responsibility'->NULL);
$stmt = PDO::Prepare($insert_sql)
$stmt->bindParam(":positionID", $job['positionID'], PDO::PARAM_INT);
$stmt->bindParam(":responsibility", $job['responsibility'], PDO::PARAM_STR);
foreach ($jobs as $job){
  //add some input testing before you execute to make sure you are not inserting bad values
  $stmt->execute();
}

答案 2 :(得分:0)

使用您想要具有多个值的输入,使用诸如职责[]之类的名称属性,然后将序列化数据插入数据库