[英]How to insert HTML Form array into database rows in mySQL with PHP
[英]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.