【问题标题】:insert data issue. inside php loop插入数据问题。在php循环里面
【发布时间】:2013-07-08 06:55:28
【问题描述】:

我有一个只有“值”文本字段的 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 个 value 数据,例如 (a,b,c,d),它应该执行 4 个插入查询,但 insert_operation跟踪每次提交按钮的点击。

如下图所示

Id 插入操作值 1 1个 2 1 乙 3 1 摄氏度 4 1天 5 2 个 6 2个

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

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

【问题讨论】:

  • 你的html或php在哪里?
  • 我需要您的表单代码并插入您当前使用的查询代码。
  • INSERT INTO 'insert' VAULES('',$i,$value);没有循环
  • 能否请您使用正确的 html 和 php 代码更新您的问题,以便我可以更正。
  • @FakhruddinUjjainwala 问题是我无法在问题框中编写 html 标签。我有 1 个文本输入名称是“值”。但它可以多1。用户生成任意数量的“值”文本字段

标签: php mysql loops


【解决方案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_operation设置为MAX(insert_operation)

查看这个 SqlFiddle 示例 - http://sqlfiddle.com/#!2/afdc0/1


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

【讨论】:

  • 真棒@Sean。为此我真的很麻烦。你很容易解决这个问题。我使用CODEIGNITER。所以我不使用 mysql_* 函数。非常感谢
【解决方案2】:

这是错误的:

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 中已被弃用并将被删除

【讨论】:

    【解决方案3】:
    <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')");
        }
    }
    ?>
    

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

    【讨论】:

      猜你喜欢
      • 2019-04-30
      • 2013-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-13
      • 2011-07-21
      • 1970-01-01
      相关资源
      最近更新 更多