【问题标题】:Insert HTML Form array into multiple rows in mySQL with PHP使用PHP将HTML表单数组插入mySQL中的多行
【发布时间】:2016-02-25 17:00:33
【问题描述】:

在编码方面,我是一个相对新手,但我一直在从事一个业余项目。我的目的是使用 HTML 表单创建一个报告工具,通过 PHP 将信息输入 MySQL。对于单字段输入,该过程一直没有问题。我遇到问题的地方是当我尝试获取一个表单输入表(带有 3 个字段)并通过在 html 表单中添加另一行字段来创建一个数组(如果有必要的话),然后将数组插入 MySQL行。我知道这个主题在 StackOverflow 中已经出现过几次,并且我已经阅读了大部分(如果不是全部)这些主题,但由于某种原因,提供的答案对我不起作用。

这是我正在使用的代码示例。这是表单部分:

<form name="weekly" action="process_form.php" method="post">

...

售后 - 票证和错误数据

  <div class="form-group">

  <table id="tac" class="form-group" border="1">

    <tbody>

      <tr>

        <p>

          <td class="ticket">

            <label>Customer</label><input type="text" name="customerTac[]" ng-model="customerTac[]" id="customerTac[]" />

          </td>

          <td class="ticket">

          <label>Ticket ID</label> <input type="text" name="tacTicket[]" ng-model="tacTicket[]" id="tacTicket[]">

        </td>

        <td class="comment">

          <label for="tacComments">Ticket Comments</label>

          <input type="text" name="tacComments[]" ng-model="tacComments[]" id="tacComments[]" cols="100">

        </td>

      </p>

      </tr>

    </tbody>

  </table>

  <p><input type="button" value="Add MOS Ticket" onclick="addRow('tac')" />

  </p>

用于将该信息插入 MySQL 的 process_form.php 的 PHP 文件如下所示:

$sql .= "INSERT INTO tac (date, userid, ticket, customer, comments) ";



foreach (array('tacTicket', 'customerTac', 'tacComments') as $tac) {

    foreach ($_POST[$tac] as $tacTix => $rowTac) {

    $_POST[$tac][$tacTix] = mysqli_real_escape_string($mysqli, $rowTac);



    }

}



    $tacTicket = ($_POST['tacTicket']);

    $customerTac = ($_POST['customerTac']);

    $tacComments = ($_POST['tacComments']);



    $itemsTac = array();

    $sizeTac = count($tacTicket);



   for($iTac = 0 ; $iTac < $sizeTac ; $iTac++) {

  // Check for ticket

    if (empty($tacTicket[$iTac]) || empty($customerTac[$iTac]) || empty($tacComments[$iTac])) {

    continue;

}

    $itemsTac[] = array(

        "tacTicket"     => $tacTicket[$iTac], 

        "customerTac"    => $customerTac[$iTac],

        "tacComments"       => $tacComments[$iTac]

    );

}



    if (!empty($itemsTac)) {

        $valuesTac = array();



        foreach($itemsTac as $itemTac){

            $valuesTac[] = "('{$itemTac['tacTicket']}', '{$itemTac['customerTac']}', '{$itemTac['tacComments']}')";

        }



        $valuesTac = implode(", ", $valuesTac);



        $sql .= "VALUES  (now(), '".$username."', ".$valuesTac.");"; 



    }

我遇到的是当我将字段发布到表单中时:

我从中得到的 MySQL 命令如下:

INSERT INTO tac (date, userid, ticket, customer, comments) 
VALUES (now(), 'Test', ('1206982096', 'test1', 'first test'), ('292526022', 'test2', 'second test'), ('3026909620', 'test3', 'third test')); 

我尝试了多种不同的方法,有时我会得到第一组值,有时我会得到所有值。我最近将 INSERT INTO 部分移到了 foreach 命令上方,这可能不是一个好主意,但归根结底,我希望看到以下情况发生:

INSERT INTO tac(日期、用户 ID、票证、客户、cmets) 值(现在(),'测试','1206982096','test1','第一次测试'); INSERT INTO tac(日期、用户 ID、票证、客户、cmets) 值(现在(),'测试','292526022','test2','第二次测试'); INSERT INTO tac(日期、用户 ID、票证、客户、cmets) 值(现在(),'测试','3026909620','test3','第三次测试');

如果有人对我如何做到这一点有任何想法,我将不胜感激。

【问题讨论】:

  • 最近编辑了我的答案,因为我可能误解了你的问题。您的问题是关于 INSERT INTO 语法还是关于构建语法正确的字符串?

标签: php html arrays forms mysqli


【解决方案1】:

据我所知,INSERT INTO 需要您在语句中指定的所有列的值。当您指定日期、用户 ID、票证、客户和 cmets 时,您需要在每个“VALUES-bracket”中为所有这些指定一个值。

所以一个有效的 INSERT INTO 语句应该是:

INSERT INTO tac (date, userid, ticket, customer, comments) VALUES (now(), 'Test', '1206982096', 'test1', 'first test'), (now(), 'Test', '292526022', 'test2', 'second test'), (now(), 'Test', '3026909620', 'test3', 'third test');

如何用 php 创建这种语法现在是你必须解决的挑战;)

看来我误解了你的问题。

如果您的问题是关于如何创建有效的 sql 语法,那么我的答案如下: 尝试在您创建 $valuesTac 数组的每个循环中添加日期和 userId 值。

【讨论】:

  • 普拉舍,谢谢你的清晰。知道上面的 sql 语法有效,这就是我真正需要的。谢谢!
猜你喜欢
  • 1970-01-01
  • 2017-05-14
  • 1970-01-01
  • 2015-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-21
相关资源
最近更新 更多