[英]save all html select box contents to sql server table
编辑:请找到我的解决方案
我在FORM中有两个选择框,它们是从两个不同的表中填充的。 SELECT1显示客户端特定的选项。 SELECT2显示所有可用选项,但SELECT1上已显示的选项除外
一切正常,将它们填充,将项目从一个移到另一个,等等。
我不知道如何提交FORM之后,将SELECT1的那些项目存储回数据库中。 对于该SELECT框上的每个项目,我需要检查它是否已经存在于MY_TABLE_2上,如果不存在,请存储它。
当我检查var_dump(SELECT1)时,我只看到最后选择的项目的值,但在SELECT1中通常包含多个项目。
现在,我正在为将在MY_TABLE_1上进行的所有其他字段调用存储过程,这没关系。 我需要做一些更新两个表或回滚的事务,如果遇到错误。 如果我只存储一项,那行得通。
但是我如何将所有项目发送到存储过程。
有任何帮助或线索吗?
如果可以帮助您理解,请使用以下打印屏幕:
生成表单的代码:
echo '<select name="ed_clilabelcodes" id="ed_clilabelcodes" style="width: 200px" multiple>';
while($row = sqlsrv_fetch_array($dvclilablist)){
echo '<option value="'.$row[0].'">'.$row[0].' - '.$row[1].'</option>';
}
echo '</select>';
-----------我的解决方案-----------
这些选择框中的任何一个上的所有项目都存在于由OptCode字段标识的表(dbo.MyItems)中。 我真正需要的是存储那些由特定客户选择的项目。 我当时在考虑要有第二张表来存储这些项目,但实际上我是在复制信息,但我发现它并不是最好的解决方案。
由于我实际上只需要将这些选定的代码附加到客户端文件中,因此执行以下操作:
我从HERE获得了一个JavaScript函数,该函数使我可以在两个选择框之间移动项目,并且顺便说一下,从HERE创建一个可以对框中的项目进行排序的函数。 每次我从客户列表框中添加或删除项目时,我都会立即调用sort函数,因此,我将立即使用选择框中存在的所有项目值(代码)更新隐藏的输入值,立即调用此javascript函数:
function RecheckCodes() {
var vlist = document.getElementById("ed_clilabelcodes");
var vlabcodes = "";
var i;
for (i = 0; i < vlist.length; i++) {
if (i == 0) {
vlabcodes = vlabcodes + "\'" + vlist.options[i].value + "\'";
}
else {
vlabcodes = vlabcodes + ",\'" + vlist.options[i].value + "\'";
}
}
document.getElementById("v_clilabcodes").value = vlabcodes;
}
在FORM Post上,我只是将该字符串保存在客户字段中。
最后,我可以使用以下2个存储过程来重新填充框以进行编辑以获取项目(第一个SQL将获取带有代码的字符串,并从第二个调用该SQL,该第二个从项目表中获取项目说明)。
ALTER PROCEDURE [dbo].[DavGetOptCodeByClient]
@vclicode nvarchar(12),
@vopttype nvarchar(12),
@voptcodes nvarchar(300) OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SELECT @voptcodes = optcodes
FROM dbo.dav_client_options
WHERE clinumber = @vclicode AND opttype = @vopttype
END
ALTER PROCEDURE [dbo].[DavGetOptDetailByClient]
@vclicode nvarchar(12),
@vopttype nvarchar(12)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @v2optcodes nvarchar(1000)
DECLARE @vsql nvarchar(1000)
exec dbo.DavGetOptCodeByClient @vclicode,@vopttype, @v2optcodes OUTPUT
SET @vsql = 'SELECT optcode, optdetail ' +
'FROM dbo.dav_global_options ' +
'WHERE ("optcode" IN ('+@v2optcodes+')) AND (opttype = '''+@vopttype+''')'
EXEC sp_executesql @vsql
END
因此,即使我确定可以对代码进行一些改进,一切也都可以满足我的需求。
为了能够发送所有元素,最简单的选择就是选择它们,仅在列表中是不够的,但是必须选择它们,因为一旦完成,必须激活选择的“ multiple”选项通过按“ Control”或“ Shift”键,您可以在列表中进行多项选择。
<form action="#" method="post">
<select name="Color[]" multiple> <!--the option multiple must be active and be array -->
<option value="Red">Red</option>
<option value="Green">Green</option>
<option value="Blue">Blue</option>
<option value="Pink">Pink</option>
<option value="Yellow">Yellow</option>
</select>
<input type="submit" value="Get Selected Values" />
</form>
另一个选项是在html中添加这个小的javascript(jQuery),因此您在选择多个选项时不必按下或控制或切换,只需单击即可选择
$('option').mousedown(function(e) {
e.preventDefault();
$(this).prop('selected', !$(this).prop('selected'));
return false;
});
来源: 如何避免使用Javascript在多选框内单击ctrl的需要?
最后,您可以使用简单的php获取数据
<?php
$data=$_POST;
if($data) {
foreach ($data['Color'] as $option) {
echo $option;
}
var_dump($data);
}
?>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.