我已经创建了复杂的表单,我将尝试提供简化的示例。可以通过单击+
按钮生成更多字段。
例如,表单中的字段是:
Certificate Date Of Issue Date of Expire
[ ] [ ] [ ] +
通过单击+
按钮 它添加重复行(通过javascript),因此单击+
按钮后,表单的一部分如下所示:
NameOfVessel TypeOfVessel YearBuilt
[ ] [ ] [ ]
NameOfVessel TypeOfVessel YearBuilt
[ ] [ ] [ ] +
可以根据用户需要多次单击+
按钮。
我有这样的 HTML 表单:
<li>
<ul class="column">
<li>
<label for="NameOfVessel">Name of Vessel</label>
<input id="NameOfVessel" type="text" name="NameOfVessel[]" class="field-style field-split25 align-left" placeholder="Name of Vessel" />
</li>
</ul>
</li>
<li>
<ul class="column">
<li>
<label for="TypeOfVessel">Type of Vessel</label>
<input id="TypeOfVessel" type="text" name="TypeOfVessel[]" class="field-style field-split25 align-left" placeholder="Type of Vessel" />
</li>
</ul>
</li>
<li>
<ul class="column">
<li>
<label for="YearBuilt">Year Built</label>
<input id="YearBuilt" type="text" name="YearBuilt[]" class="field-style field-split25 align-left" placeholder="Year Built" />
</li>
</ul>
</li>
要插入到数据库的 PHP。它应该将所有添加的行中的值插入到多个数据库表的行中,但现在它没有插入任何内容。
$UserID = get_current_user_id();
$NameOfVessel = mysqli_real_escape_string($link, $_POST['NameOfVessel']);
$TypeOfVessel = mysqli_real_escape_string($link, $_POST['TypeOfVessel']);
$YearBuilt = mysqli_real_escape_string($link, $_POST['YearBuilt']);
foreach($NameOfVessel as $key=>$res) {
$sql2 = "INSERT INTO CV_SeaServices (NameOfVessel, UserId, TypeOfVessel, YearBuilt) VALUES ('$res', '$UserId[$key]', '$TypeOfVessel[$key]', '$YearBuilt[$key]')";
if(mysqli_query($link, $sql2)){
echo "Resume created successfully.";
} else {
echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
}
}
var_dump($NameOfVessel);
我用过var_dump
,但它返回NULL
.这段代码有什么问题?你有什么想法吗?
更新
我尝试执行以下操作:
.JS:
var noOfClicks = 0;
$(document).ready(function() {
$(".add-row").click(function() {
$("ul.sea-service").first().clone().appendTo(".personal-details1").append('<button class="remove">X</button>').find('input').val('');
noOfClicks += 1;
});
$("body").on('click', '.remove', function() {
$(this).closest('.sea-service').remove();
});
});
.HTML:
<input id="NameOfVessel' + noOfClicks + '" type="text" name="NameOfVessel[]" class="field-style field-split25 align-left" placeholder="Name of Vessel" />
但在这种情况下,我得到了 Id = ' + 'NameOfVessel' + noOfClicks + '
.据我所知,我需要通过javascript进行连接,只是我无法正确实现它。
字符串mysqli_real_escape_string ( mysqli $link , string $escapestr )
(文档)
mysqli_real_escape_string
需要一个字符串,而不是一个数组。
应首先循环$_POST['NameOfVessel']
数组,并对值应用mysqli_real_escape_string
。其他帖子键也是如此。
假设 $_POST['NameOfVessel']
、 $_POST['TypeOfVessel']
和 $_POST['YearBuilt']
具有相同数量的元素,您可以执行以下操作:
$userId = $UserId[$key]; // because you're overriding `$key` below.
foreach($_POST['NameOfVessel'] as $key => $val){
$NameOfVessel = $val;
$TypeOfVessel = $_POST['TypeOfVessel'][$key];
$YearBuilt = $_POST['YearBuilt'][$key];
$NameOfVessel = mysqli_real_escape_string($link, $NameOfVessel);
$TypeOfVessel = mysqli_real_escape_string($link, $TypeOfVessel);
$YearBuilt = mysqli_real_escape_string($link, $YearBuilt);
$sql2 = "INSERT INTO CV_SeaServices
(NameOfVessel, UserId, TypeOfVessel, YearBuilt)
VALUES
('$res', '$userId', '$TypeOfVessel', '$YearBuilt')";
if(mysqli_query($link, $sql2)){
echo "Resume created successfully.";
} else {
echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
}
}
要在克隆后实现 ID 的唯一性,请参阅此答案:jQuery 克隆并更改 Id。
它需要一些适应。也许完全删除 id 更容易。