1

我有一个只有“值”文本字段的 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 插入操作值
  1 1个
  2 1 乙
  3 1 摄氏度
  4 1天
  5 2 个
  6 2个       

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

我不确定我的 php 代码。我知道插入查询必须在 PHP 循环内。但是我该怎么表现呢?

4

3 回答 3

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)分配值。您必须==像这样检查值是否等于 1while($_POST['value'] == 1)

PS 使用 MySQL 函数作为表名不是一个好主意,使用 mysql_* 函数也不是一个好主意,因为它们在 php 5.5 中已被弃用并将被删除

于 2013-07-08T07:33:15.133 回答
1

假设您的value字段都命名相同,即。<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_operationMAX(insert_operation)

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


一些笔记。insert是一个mysql函数/保留字。最好重命名你的表,但至少它需要用反引号 - `。您应该转义任何用户数据 ( $_POST['value']),在这种情况下,我展示了mysql_real_escape_string()。最后,mysql_*函数从 php5.5 开始贬值。您应该更新到mysqli_PDO

于 2013-07-08T07:36:58.073 回答
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')");
    }
}
?>

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

于 2013-07-08T07:45:33.763 回答