插入数据问题。在php循环中

时间:2013-07-08 06:55:29

标签: php mysql loops

我有一个只有“value”文本字段的HTML表单。但是用户可以为1个提交按钮生成任意数量的“值”测试字段。这是我的表

  CREATE TABLE IF NOT EXISTS `insert` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `insert_operation` int(11) NOT NULL,
    `value` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
   PRIMARY KEY (`id`)
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

现在,如果用户生成4个“值”文本字段并输入4个数据(如a,b,c,d),则应执行4个插入查询,但 insert_operation 跟踪每个提交按钮单击。

它看起来像下面

 Id Insert_operation value
  1   1                 a
  2   1                 b
  3   1                 c
  4   1                 d
  5   2                 x
  6   2                 a       

我的html表单有值文本字段,其名称为值,提交名称保存的按钮。

我不确定我的PHP代码。 我知道Insert查询必须在PHP循环中。但我该怎么办?

3 个答案:

答案 0 :(得分:1)

这是错误的:

mysql_query(INSERT INTO 'insert' VALUES('','$i','$_POST['value']'));

mysql_query期望第一个参数是SQL字符串,因此正确的参数是:

mysql_connect("
    INSERT INTO 
        `insert` (`insert_operation`, `value`) 
    VALUES 
        ($i, '{$_POST['value']}')
");

添加列也很好,因为您的表可能会在这段时间后发生变化,如果发生这种情况,您的SQL将无法正常工作。

其他错误是您使用的是分配而不是比较 while($_POST['value']=1)分配值。 您必须使用==来检查值是否等于1 while($_POST['value'] == 1)

PS使用MySQL函数作为表名并不是一个好主意,并且使用mysql_ *函数不是一个好主意,因为它们从php 5.5开始被弃用并将被删除

答案 1 :(得分:1)

假设您的value字段都被命名为相同的ie。 <input name="value[]" ... />

尝试这样的事情 -

for($i=0;$i<count($_POST['value']);$i++){
   $value = mysql_real_escape_string($_POST['value'][$i]);
   if($i == 0){  // if the first increase MAX(insert_operation) by 1
       mysql_query("INSERT INTO `insert` SELECT null, IFNULL((SELECT MAX(insert_operation)+1 from `insert`), 1), '{$value}'");
   }
   else {   // if not the first use MAX(insert_operation)
      mysql_query("INSERT INTO `insert` SELECT null, IFNULL((SELECT MAX(insert_operation) from `insert`), 1), '{$value}'");
   }
}

第一个将获得表中已有的MAX(insert_operation),如果为null,则将其设置为1,否则它将增加1.其余的只会将insert_operation设置为{ {1}}。

请参阅此SqlFiddle示例 - http://sqlfiddle.com/#!2/afdc0/1


一些笔记。 MAX(insert_operation)是一个mysql function/reserved word。重命名你的表会更好,但至少它需要在反引号中 - “。您应该转义任何用户数据(insert),在这种情况下我展示了mysql_real_escape_string()。最后,$_POST['value']函数从php5.5开始折旧。您应该更新为mysql_*mysqli_

答案 2 :(得分:1)

<form>
<?php
for ($i=1;$i<=$no_of_text_field;$i++) // no of text fields user can add
{
?>
<input type="text" name="value<?php echo $i ?>">
<?php
}
?>
<input type="text" name="no_of_text_field<?php echo $i ?>" value="<?php echo $no_of_text_field ?>">
<input type="submit" name="submit" value="">
</form>

<?php
if(isset($_REQUEST['submit']))
{
    for ($k=1;$k<=$_REQUEST['no_of_text_field'];$k++)  //getting values of all text fields
    {
       mysql_query("INSERT INTO `insert` VALUES('','$i','$_REQUEST[value].$k')");
    }
}
?>

检查上面的代码,这应该会给你一些想法