检索先前选择的下拉主题值

Posted

技术标签:

【中文标题】检索先前选择的下拉主题值【英文标题】:Retrieve previously selected chosen dropdown subject value(s) 【发布时间】:2016-02-14 17:51:15 【问题描述】:

我遇到了编码问题,因为当我再次单击它以激活它时,我无法从下拉菜单中获得选择的下拉菜单多选版本 1.4.2 来检索以前选择的主题值。

我正在使用两个不同的表,每个表都有一个字段名称,因此我尝试将成员表中的 t_subjects 字段名称与类别表中的名称字段名称匹配,如果有匹配,该主题字段名称将导致<option value='subject_name' selected >subject_name</option>,如果没有匹配,它将是<option value='subject_name'>subject_name</option>

This is what I'm trying to get to happen for those subjects that match when I click it anytime after the first post.

在选定的多选 dd 菜单选项中动态加载了 42 个主题。

我可以使用 implode 方法将主题名称发布到数据库中。

if(isset($_POST['submit']))

$subjects = implode(',', $_POST['subjects']);

但是,如果我再次打开该页面以创建另一个主题字段名称为空白的帖子,则会收到一条错误消息:

Warning: implode() [function.implode]: Invalid arguments passed in...

所以,当我再次激活它时,您可以看到为什么我需要选择以前的主题值。这是所选 dd 菜单的代码。

<tr>
<td >Subjects:</td>
<td >

<input type="radio" name="utype" id="sutype" value="s" />Subject(s)


    <div id="studspan" style="display:none;">
    <strong style="vertical-align:top;">Select Subject(s) :</strong>

    <select name="subjects" id="subjects" data-placeholder="Select Subject(s)" style="width:350px;" multiple class="chosen-select">

    <?php
    $cat_sele = mysql_query("SELECT * FROM category");
    while ($cat_row=mysql_fetch_array($cat_sele)) 
    if($_POST['subjects'] == $cat_row['name']) $s = " selected"; else $s = "";
    echo "<option value='$cat_row['name']'$s>$cat_row['name']</option>";
    
    ?>

    </select>

    </div>

问题似乎出在这部分代码:if($_POST['subjects'] == $cat_row['name']),因为当我将$_POST['subjects']替换为'Accounting'查看时,再次激活时会显示Accounting已被选中,但如果我添加了另一个主题名称,它将显示所有选定的主题。我什至尝试过if($_POST['t_subjects'] == $cat_row['name'])("SELECT name FROM category"),但它们也不起作用。因此,任何能帮助这位老师完成工作的帮助都将非常感激。

我还包括了该过程中涉及的代码的其他部分。

elseif($_SESSION['user_type']=="m")
    
    $getuser_sele = "select * from member where member_id = '".$_SESSION['ses_id']."'";
    $getuser_qry = mysql_query($getuser_sele);
    $getuser_row = mysql_fetch_array($getuser_qry);
    $subjects = stripslashes($getuser_row['t_subjects']);

================================================ ===============

elseif($subjects=="" && $_SESSION['user_type']=="m")
    
    $error="Please Enter Preferred Subjects";
        

================================================ ===============

elseif($_SESSION['user_type']=="m")
    
    $qr=mysql_query("update member set
    t_subjects='".addslashes($subjects)."', 

================================================ ===============

<body onload="$('.chosen-select').show();
    $('.chosen-select').chosen();"> 

================================================ ===============

<script type="text/javascript">

$("#sutype").click(function () 

      $("#studspan").show(1000);
      $('.chosen-select').chosen('destroy');
      $('.chosen-select').show();
      $('.chosen-select').chosen();

    );

</script>

<script src="js/chosen.jquery.js" type="text/javascript"></script>

================================================ ===============

更新:

特里斯坦,它有效,但它显示所有主题名称在选择列表中被选中和取消选中,这不是我想要发生的。每个主题名称的源代码中也出现以下错误。我只是在下面显示第一个。

<b>Warning</b>: array_search() expects parameter 2 to be array, null given in <b>/home/.../.../edit.php</b> on line <b>2784</b><br /> <option value='Accounting' selected>Accounting</option><br />

我认为问题在于如何在 dbase 中设置表/字段。

这是根据 t_subjects 的第一行应该发生的情况。如果我以会员 1 的身份登录并打开所选的 dd 菜单,则应选择 t_subjects 第一行中的会计、田径运动、艺术,而在所选的 dd 菜单中将未选择主题列表的其余部分。这将发生在他们第一次发布时列出的每个成员的行 t_subjects。

all images to show what I'm talking about.

【问题讨论】:

【参考方案1】:

使用&lt;select name="subjects" ... multiple&gt; 只会发送一个选择的帖子数据。您需要使用&lt;select name="subjects[]" ... multiple&gt; 发送帖子数据中的所有选定选项。

那么$_POST['subjects'] 将是一个数组,因此您需要在数组中搜索类别名称。

$cat_sele = mysql_query("SELECT * FROM category");
while ($cat_row=mysql_fetch_array($cat_sele)) 
    if(array_search($cat_row['name'], $_POST['subjects']) !== false) $s = " selected"; else $s = "";
    echo "<option value='$cat_row['name']'$s>$cat_row['name']</option>";

【讨论】:

特里斯坦,我更新了这个问题,因为我认为问题在于两个 dbase 表是如何设置的。

以上是关于检索先前选择的下拉主题值的主要内容,如果未能解决你的问题,请参考以下文章

如何在编辑页面的下拉列表中获取先前选择的值

如何使用Javascript根据先前的下拉值显示第二个下拉列表

根据 python plotly dash 中先前单选项目/下拉列表中的选择禁用下拉列表

laravel - 基于先前选择的动态下拉列表

根据先前的选择填充下拉列表

如何从表格的下拉菜单中删除先前选择的选项?