簡體   English   中英

使用PHP將HTML Form數組插入mySQL中的多行

[英]Insert HTML Form array into multiple rows in mySQL with PHP

在編碼方面,我是一個相對較新的人,但是現在已經在副項目上工作了一段時間。 我的意圖是使用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 (date, userid, ticket, customer, comments) 
VALUES (now(), 'Test', '1206982096', 'test1', 'first test');
INSERT INTO tac (date, userid, ticket, customer, comments) 
VALUES (now(), 'Test', '292526022', 'test2', 'second test');
INSERT INTO tac (date, userid, ticket, customer, comments) 
VALUES (now(), 'Test', '3026909620', 'test3', 'third test');

如果有人對我如何實現這一目標有任何想法,我將不勝感激。

據我所知,INSERT INTO要求您在語句中指定的所有列都有一個值。 當您指定日期,用戶ID,票證,客戶和注釋時,您將需要在每個“ VALUES-括號”中為其所有輸入一個值。

因此,有效的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數組的每個循環的date和userId值中添加。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM