我有一个下拉列表,在选择任何值后,它会添加带有一些字段的新行,示例如下图所示:
我有向MySQL数据库插入值的insert.php。但是有一个问题,只有第一行的值被插入到数据库中。
PHP看起来像:
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);
}
}
HTML看起来像:
<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>
可以在上查看的Javascript代码
我已经创建了来检查表单的这一部分。你有办法解决这个问题吗?
发布于 2016-03-14 19:24:27
使用您的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; -->
然后在你的php脚本中使用如下代码:
foreach($_POST['RowCertificateType'] as $key=> $val){
$CertificateType = $val;
$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);
}
}
:)
发布于 2016-03-13 14:14:51
您需要使用此格式创建表单
<form action="insert.php" method="post">
<ul>
<li>
<input name="CertificateType[0]" type="hidden">
<input name="CertificateType[0]['STCWCode']" type="text">
<input name="CertificateType[0]['CertNo']" type="text">
<input name="CertificateType[0]['PlaceofIssueCert']" type="text">
<input name="CertificateType[0]['FromCert']" type="date">
<input name="CertificateType[0]['ToCert']" type="date">
</li>
<li>
<input name="CertificateType[1]" type="hidden">
<input name="CertificateType[1]['STCWCode']" type="text">
<input name="CertificateType[1]['CertNo']" type="text">
<input name="CertificateType[1]['PlaceofIssueCert']" type="text">
<input name="CertificateType[1]['FromCert']" type="date">
<input name="CertificateType[1]['ToCert']" type="date">
</li>
...
</ul>
</form>
当您以此格式提交表单时,您将在insert.php中收到$_POST['CertificateType']
格式的数字键数组
array(
"0" => array(
"STCWCode" => "somevalue",
"CertNo" => "somevalue",
"PlaceofIssueCert" => "somevalue",
"FromCert" => "somevalue",
"ToCert" => "somevalue",
),
"1" => array(
"STCWCode" => "somevalue",
"CertNo" => "somevalue",
"PlaceofIssueCert" => "somevalue",
"FromCert" => "somevalue",
"ToCert" => "somevalue",
),
. . .
)
这里,每个索引代表一个可以使用foreach循环检索的row.This,如下所示:
将您的php代码更新为
foreach($_POST['CertificateType'] as $val){
$CertificateType = $val;
$CertificateType = $val;
$STCWCode = $val['STCWCode'];
$CertNo = $val['CertNo'];
$FromCert = $val['FromCert'];
$ToCert = $val['ToCert'];
$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);
}
}
发布于 2016-03-10 23:49:30
你看,我发现的是:
<select id='options' name="CertificateType[]" class="field-style div-format align-left">
中的CertificateType[]
替换为CertificateType
,因为,此下拉列表不是multiple。在仅基于onchange
功能的情况下,您可以计算STCWCode
、CertNo
、FromCert
和ToCert
的值,它们是多个值(而不是CertificateType
下拉列表)。你能做的是:,你可以追加一个hidden text
,也就是CertificateTypeHidden[]
,CertificateType
下拉列表的值将被插入其中。CertificateType
不是多个。所以,它只考虑一个值。您可以做的是:正如我在上面所写的,您可以像foreach($_POST['CertificateTypeHidden'] as $key => $val){
.一样使用CertificateTypeHidden[]
,而不是CertificateType
更改后,代码应该是这样的。(如果你遵循以上几点)
<?php
foreach($_POST['CertificateTypeHidden'] as $key => $val){
$CertificateType = $_POST['CertificateTypeHidden'][$key];
$STCWCode = $_POST['STCWCode'][$key];
$CertNo = $_POST['CertNo'][$key];
$FromCert = $_POST['FromCert'][$key];
$ToCert = $_POST['ToCert'][$key];
.
.
.
}
?>
对于我的测试目的,。我用foreach($_POST['STCWCode'] as $key => $val){
删除了foreach($_POST['CertificateType'] as $key => $val){
。都附加了多个正确出现的文本框值。
<?php
foreach($_POST['STCWCode'] as $key => $val){
$CertificateType = $_POST['CertificateTypeHidden'][$key];
$STCWCode = $_POST['STCWCode'][$key];
$CertNo = $_POST['CertNo'][$key];
$FromCert = $_POST['FromCert'][$key];
$ToCert = $_POST['ToCert'][$key];
.
.
.
}
?>
这是唯一的问题。一切都好。只需追加一个隐藏字段即可。(<input type='hidden' name='CertificateTypeHidden[]'>
)。其中选定下拉列表的值出现并位于此隐藏字段的value
属性中。在submit页面或insert.php页面中,使用CertificateTypeHidden
执行foreach
。
通过它。万事如意。
https://stackoverflow.com/questions/35829682
复制相似问题