繁体   English   中英

将所有html选择框内容保存到sql server表

[英]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上进行的所有其他字段调用存储过程,这没关系。 我需要做一些更新两个表或回滚的事务,如果遇到错误。 如果我只存储一项,那行得通。

但是我如何将所有项目发送到存储过程。

有任何帮助或线索吗?

如果可以帮助您理解,请使用以下打印屏幕:

https://i.stack.imgur.com/CTkSZ.png

生成表单的代码:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM