Javascript 通过PHP从HTML表单向数据库插入多个选项
我有一个下拉列表,在选择任何值后,它会添加带有一些字段的新行,示例如下图所示: 我使用insert.php将值插入MySQL数据库。但有一个问题,那个就是只有第一行的值被插入到数据库中 PHP看起来像:Javascript 通过PHP从HTML表单向数据库插入多个选项,javascript,php,jquery,html,mysql,Javascript,Php,Jquery,Html,Mysql,我有一个下拉列表,在选择任何值后,它会添加带有一些字段的新行,示例如下图所示: 我使用insert.php将值插入MySQL数据库。但有一个问题,那个就是只有第一行的值被插入到数据库中 PHP看起来像: foreach($_POST['CertificateType'] as $key => $val){ $CertificateType = $val; $CertificateType = $_POST['CertificateType'][$key];
foreach($_POST['CertificateType'] as $key => $val){
$CertificateType = $val;
$CertificateType = $_POST['CertificateType'][$key];
$STCWCode = $_POST['STCWCode'][$key];
$CertNo = $_POST['CertNo'][$key];
$FromCert = $_POST['FromCert'][$key];
$ToCert = $_POST['ToCert'][$key];
$CertificateType = mysqli_real_escape_string($link, $CertificateType);
$STCWCode = mysqli_real_escape_string($link, $STCWCode);
$CertNo = mysqli_real_escape_string($link, $CertNo);
$FromCert = mysqli_real_escape_string($link, $FromCert);
$ToCert = mysqli_real_escape_string($link, $ToCert);
$sql3 = "INSERT INTO Tbl (
CertificateType
,UserId
,STCWCode
,CertNo
,FromCert
,ToCert
,DateCreated
) VALUES (
'$CertificateType',
'$UserID',
'$STCWCode',
'$CertNo',
'$FromCert',
'$ToCert',
now())";
if(mysqli_query($link, $sql3)){
echo "Resume created successfully.";
} else{
echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
}
}
<fieldset class="fieldset-borders">
<legend>4. Licenses & Certificates</legend>
<ul class="header">
<li>
<select id='options' name="CertificateType[]" class="field-style div-format align-left">
<option selected disabled value="0">Select certificates</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
</li>
</ul>
<ul class="cert" id="cert">
<li>
<ul class="column">
<li><p class="test-label11">Name</p></li>
</ul>
</li>
<li>
<ul class="column">
<li><p class="test-label11">STCW Code</p></li>
</ul>
</li>
<li>
<ul class="column">
<li><p class="test-label11">Cert. No</p></li>
</ul>
</li>
<li>
<ul class="column">
<li><p class="test-label11">Place of Issue</p></li>
</ul>
</li>
<li>
<ul class="column">
<li><p class="test-label11">Date of Issue</p></li>
</ul>
</li>
<li>
<ul class="column">
<li><p class="test-label11">Date of Expire</p></li>
</ul>
</li>
</ul>
<div class="action2" ></div>
</fieldset>
HTML看起来像:
foreach($_POST['CertificateType'] as $key => $val){
$CertificateType = $val;
$CertificateType = $_POST['CertificateType'][$key];
$STCWCode = $_POST['STCWCode'][$key];
$CertNo = $_POST['CertNo'][$key];
$FromCert = $_POST['FromCert'][$key];
$ToCert = $_POST['ToCert'][$key];
$CertificateType = mysqli_real_escape_string($link, $CertificateType);
$STCWCode = mysqli_real_escape_string($link, $STCWCode);
$CertNo = mysqli_real_escape_string($link, $CertNo);
$FromCert = mysqli_real_escape_string($link, $FromCert);
$ToCert = mysqli_real_escape_string($link, $ToCert);
$sql3 = "INSERT INTO Tbl (
CertificateType
,UserId
,STCWCode
,CertNo
,FromCert
,ToCert
,DateCreated
) VALUES (
'$CertificateType',
'$UserID',
'$STCWCode',
'$CertNo',
'$FromCert',
'$ToCert',
now())";
if(mysqli_query($link, $sql3)){
echo "Resume created successfully.";
} else{
echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
}
}
<fieldset class="fieldset-borders">
<legend>4. Licenses & Certificates</legend>
<ul class="header">
<li>
<select id='options' name="CertificateType[]" class="field-style div-format align-left">
<option selected disabled value="0">Select certificates</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
</li>
</ul>
<ul class="cert" id="cert">
<li>
<ul class="column">
<li><p class="test-label11">Name</p></li>
</ul>
</li>
<li>
<ul class="column">
<li><p class="test-label11">STCW Code</p></li>
</ul>
</li>
<li>
<ul class="column">
<li><p class="test-label11">Cert. No</p></li>
</ul>
</li>
<li>
<ul class="column">
<li><p class="test-label11">Place of Issue</p></li>
</ul>
</li>
<li>
<ul class="column">
<li><p class="test-label11">Date of Issue</p></li>
</ul>
</li>
<li>
<ul class="column">
<li><p class="test-label11">Date of Expire</p></li>
</ul>
</li>
</ul>
<div class="action2" ></div>
</fieldset>
4.许可证和证书
-
选择证书
一个
两个
三
-
名称
-
- STCW代码
-
- 证书编号
-
发布地点
-
发布日期
-
- 过期日期
Javascript您可以查看的代码
我已经创建了检查表单的这一部分。你知道如何修复它吗?我还没有查看所有内容,但你的输入字段似乎都有相同的名称
所有行的第一个输入似乎是“name=”STCWCode[]”。您是否查看了$\u POST并验证了您可以看到所有输入,或者是否只有第一行的输入?我认为名称可能是个问题。您循环了$\u POST['CertificateType',它(根据您的配置)将只包含一个值(选择字段上没有multiselect)您使用的循环完全错误。相反,您需要运行循环,例如
STCWCode
POST变量
但我建议您更改javascript代码,并将输入名称设置为以下内容:行[0][STCWCode],行[0][CertNo]
等等,行[0]
表示第一行,行[1]
表示第二行等等。然后您可以使用$\u POST['row']
运行循环,我发现的是:
中的CertificateType[]
替换为CertificateType
因为,此下拉列表不是多个。仅基于onchange
功能,您可以获得多个值(不是CertificateType
下拉列表)。
您可以做的是:您可以附加一个隐藏文本
,即CertificateTypeHidden[]
将插入CertificateType
下拉列表的值CertificateType
不是多个。因此,它只考虑一个值。您可以做的是:正如我上面所写的,您可以使用CertificateTypeHidden[]
类似于foreach($\u POST['CertificateTypeHidden']作为$key=>val){
)。其中所选下拉列表的值位于该隐藏字段的value
属性中。在提交页面或insert.php页面中,使用CertificateTypeHidden
执行foreach
仔细检查。最好。您需要为证书创建一个具有选定值的隐藏输入,下拉列表仅用于创建新行,但您需要使用数组形式创建一个新输入,可能会更改下拉列表名称,例如CertificateType[]=>CertificateType列表和具有CertificateType[]的新隐藏输入名称 UL并非仅随表格输入类型发送
<select id='options' name="CertificateList">
<option selected disabled value="0">Select certificates</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
选择证书
一个
两个
三
只创建一次表单标记,并为每次重复创建输入
<form action="insert.php" method="post">
<ul>
<li>
<input name="CertificateType[]" type="hidden">
<input name="STCWCode[]" type="text">
<input name="CertNo[]" type="text">
<input name="PlaceofIssueCert[]" type="text">
<input name="FromCert[]" type="date">
<input name="ToCert[]" type="date">
</li>
<li>
<input name="CertificateType[]" type="hidden">
<input name="STCWCode[]" type="text">
<input name="CertNo[]" type="text">
<input name="PlaceofIssueCert[]" type="text">
<input name="FromCert[]" type="date">
<input name="ToCert[]" type="date">
</li>
...
</ul>
</form>
-
-
...
您需要使用此格式创建表单
-
-
...
使用您的fiddle JavaScript,在每行的隐藏字段中添加证书类型;并将其命名为RowCertificateType,与行的其他字段相同
<input type="hidden" name="RowCertificateType[]" value="" />
<!-- set value of this field same as you are showing in li as label for this row; -->
:)您正试图在一个代码中插入整个数组。首先进行计数,然后从数组中提取内容并使用for循环将其插入数据库 例如,如果文本框的名称为
cellname[]
那么对于insert,应该这样做
$itemCount = count($_POST['cellname']);
$info=$_POST['cellname'];
for($i=0;$i<$itemCount;$i++) {
$query = "INSERT INTO item (item_name) VALUES('$info[$i]') ";
//rest of the queries
}
$itemCount=count($\u POST['cellname']);
$info=$_POST['cellname'];
对于($i=0;$iDo)您是否收到一些错误消息?您是否有一个具有自动递增ID的表?@Jan否,没有任何错误,只插入第一行值。是的,有ID-auto increment.add到Php脚本(error_log(“Running”);并检查apache错误日志文件以查看您可能看到的次数(Running)在log@Tasos我尝试过使用错误日志(“Running”);
,但什么都没有发生(没有打印)您运行的是什么操作系统,例如linux、windows等?我认为这不是名称的问题,这里是使用过的数组,正如我所知
$itemCount = count($_POST['cellname']);
$info=$_POST['cellname'];
for($i=0;$i<$itemCount;$i++) {
$query = "INSERT INTO item (item_name) VALUES('$info[$i]') ";
//rest of the queries
}