我遇到编码问题,因为当我再次单击它以激活它时,我无法从选择下拉菜单多选版本1.4.2中从下拉菜单中检索先前选定的主题值。
我正在使用两个不同的表,每个表都有一个字段名称,所以我试图将成员表中的t_subjects字段名称与类别表中的名称字段名称进行匹配,如果有的话匹配,主题字段名称将生成<option value='subject_name' selected >subject_name</option>
,如果没有匹配,则为<option value='subject_name'>subject_name</option>
在所选的多选dd菜单选项中动态加载了四十二个主题。
使用implode方法将主题名称发布到数据库没有问题。
if(isset($_POST['submit']))
{
$subjects = implode(',', $_POST['subjects']);
但是,如果我再次打开页面以使主题字段名称为空白的另一篇文章,我会收到一条错误消息:
Warning: implode() [function.implode]: Invalid arguments passed in...
因此,当我再次激活它时,您可以看到为什么我需要选择先前的主题值。这是所选dd菜单的代码。
<tr>
<td width="32%">Subjects:</td>
<td width="68%">
<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'
来检查它时,它会显示我已选择会计再次激活它,但如果我添加另一个主题名称,它将显示所有选定的主题。我甚至尝试了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>
=============================================== ==============
更新
Tristan,它有效,但它会在选择列表中显示所有选定和取消选择的主题名称,这不是我想要发生的。我在每个主题名称的源代码中也出现以下错误。我只是展示下面的第一个。
<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第一行中的Accounting,Athletics,Art,而在所选dd菜单中未选择主题列表的其余部分。对于每个成员在第一次发布它们时列出的行t_subject,会发生这种情况。
答案 0 :(得分:0)
使用<select name="subjects" ... multiple>
只会发送一个选择的帖子数据。您需要使用<select name="subjects[]" ... multiple>
发送帖子数据中的所有选定选项。
然后$_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>";
}