我有下拉列表,选择任何值后它添加了一些字段的新行,示例如下图所示:
我有insert.php将值插入 MySQL 数据库。但是有问题,只有第一行的值才会插入到数据库中。
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>
您可以在JS FIDDLE 查看Javascript 代码
我创建了JS FIDDLE来检查表单的那一部分。你有想法如何解决它吗?
答案 0 :(得分:6)
您需要使用此格式创建表单
<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>
&#13;
当您使用此格式提交表单时,您将在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循环重试,如下所示:
将您的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);
}
}
答案 1 :(得分:5)
使用您的小提琴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);
}
}
:)
答案 2 :(得分:3)
看,我发现的是:
首先,将CertificateType[]
替换为CertificateType
中的<select id='options' name="CertificateType[]" class="field-style div-format align-left">
因为,这个下拉列表不是多个。根据{{1}}功能,您只需onchange
,STCWCode
,CertNo
&amp; FromCert
个值,它们是多个(非ToCert
下拉列表)。
您可以做的是:您可以附加一个CertificateType
即hidden text
,其中将插入CertificateTypeHidden[]
下拉列表的值。
正如我在Ist Point指出的那样。 CertificateType
不是多重的。所以,它只考虑一个值。您可以做的是:如上所述,您可以使用CertificateType
而不是CertificateType
而不是CertificateTypeHidden[]
。
更改后,代码应该是这样的。 (如果你遵循以上几点)
foreach($_POST['CertificateTypeHidden'] as $key => $val){
我的测试目的。我使用<?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['CertificateType'] as $key => $val){
。所有附加的多个文本框值都会正确显示。
foreach($_POST['STCWCode'] 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[]'>
属性中。在提交页面或 insert.php 页面中,使用value
执行foreach
。
通过它。一切顺利。
答案 3 :(得分:2)
你循环遍历$ _POST ['CertificateType'],(你的配置)只包含一个值(在选择字段上没有多选)
答案 4 :(得分:2)
你正在使用整个错误的循环。相反,您需要运行循环,例如STCWCode
POST变量。
但我建议您更改javascript代码,并将输入名称设为row[0][STCWCode], row[0][CertNo]
,依此类推,row[0]
为第一行,row[1]
为第二行等等。然后,您可以使用$_POST['row']
答案 5 :(得分:2)
您需要为证书选择值创建一个隐藏输入,下拉列表仅用于创建新行但您需要使用Array表单创建新输入,可能更改下拉列表名称,例如CertificateType [] =&gt; CertificateTypeList和带有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>
答案 6 :(得分:1)
我还没看过所有的东西,但你的输入字段似乎在小提琴中都有相同的名字。
所有行的第一个输入似乎是“name =”STCWCode []“。你看过你的$ _POST并验证你可以看到你的所有输入或者是否只有第一行的输入?我认为名字可能是一个问题。
答案 7 :(得分:1)
您正尝试在单个代码中插入整个数组。首先考虑一下。然后从数组中获取内容并使用for循环将其插入数据库
例如,如果文本框的名称是cellname[]
然后插入这应该完成
$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
}
`