2013-05-30 49 views
0

我有一个下拉控件,我希望它默认为基于登录用户的访问权限的特定选项。例如,下拉菜单有10个选项,但只有管理员才能查看全部10个选项。但大多数用户只能访问其中的一个选项。根据下拉列表的值是否为空来隐藏/显示页面内容。如何设置基于登录用户的下拉菜单默认选择

问题:使用上面的例子,如果一个管理员登录,我需要下拉默认为“选择一个选项”。这样页面内容就隐藏起来了。另一方面,如果只有1的访问权限的用户登录,我需要它默认为1.这样他们不必选择任何内容,默认情况下显示页面内容。我如何去做这件事?

下面是我当前的代码,它处理下拉菜单根据选择时间显示的内容。

PHP/HTML

// Hide/Show main content div 
<?php 
if (isset($_GET['src'])) { 
    $src = $_GET['src']; 
} else { 
?> 
<style> 
#divmain { display: none; } 
</style> 
} 
<?php } ?> 

// Start of form, header, etc. 
<select name="select1" id="select1"> 
<?php 
$sql = getOptions(); 
$data = makeConnection($sql); 
if ($src == null) { // If value is null, default to 'Select an option' 
    echo "<option selected value=\"\" disabled=\"disabled\">--Select an option--</option>"; 
    while ($row = odbc_fetch_array($db)) { 
     echo "<option value=\"".$row['content']."\">".$row['content']."</option>"; 
    } 
} else { // If value not null keep the selected value selected 
    while ($row = odbc_fetch_array($db)) { 
     if ($row['content'] == $src) { $selected = " selected "; } 
     else { $selected = " "; } 
     echo "<option value=\"".$row['content']."\" ".$selected.">".$row['content']."</option>"; 
    } 
} 
?> 
</select> 


JS

// Pass selected value on change 
$('#select1').change(function() { 
    var sel = $(this).val(); 
    location.href = "page1.php?src=" + sel; 
} 


SQL

// Hardcoding user for testing purposes, THIS WILL BE CHANGED 
function getOptions() { 
    $results = "SELECT content, userid FROM table WHERE userid = 'username'"; 

    return $results; 
} 


任何帮助非常感谢,请让我知道如果我不清楚任何事情。

+0

你的代码面临什么问题? –

+0

现在,无论用户拥有什么访问权限,我的下拉菜单默认为“选择一个选项”。如果用户只能访问一个选项,则应默认为该选项。如果用户有权访问多个选项,则应该默认为“选择一个选项”。 – Brian

+1

您在“选择选项”部分中有一个空白的“选定”属性,这会导致它始终被选中,因为它是第一个具有选定属性的选择。 – casraf

回答

1

得到了一些帮助,现在想通了。下面是修改后的代码:

PHP/HTML

// Hide/Show main content div 
<?php 
$src = null; 
if (isset($_GET['src'])) { 
    $src = $_GET['src']; 
} else { 
?> 
<style> 
    #divmain { display: none; } 
</style> 
} 
<?php } ?> 

// Start of form, header, etc. 
<select name="select1" id="select1"> 
<?php 
$sql = getOptions(); 
$data = makeConnection($sql); 
if ($src == null) { 
    $i = 0; 
    $content = ""; 
    while ($row = odbc_fetch_array($db)) { 
     $content .= "<option value=\"".$row['content']."\">".$row['content']."</option>"; 
     $i++; 
    } 

    if ($i > 1) { 
     echo "<option selected value=\"\" disabled=\"disabled\">--Select an option--</option>"; 
    } 
    echo $content; 

    if ($i > 1) { $oneopt = 1; } 
    else { $oneopt = 0; } 
} else { 
    while ($row = odbc_fetch_array($db)) { 
     if ($row['content'] == $src) { $selected = " selected "; } 
     else { $selected = " "; } 
     echo "<option value=\"".$row['content']."\" ".$selected.">".$row['content']."</option>"; 
    } 
} 
?> 
</select> 


JS

$('#select1').change(function() { 
    var sel = $(this).val(); 
    location.href = "page1.php?src=" + sel; 
} 

<?php 
    global $optone; 
    if ($optone == 1) { 
     echo "$('#select1').trigger('change');"; 
    } 
?> 


SQL - 保持不变

@chenasraf真的很感谢帮助!希望这对未来的某个人有所帮助!

0

预先选择的选项总是第一个具有“选定”属性。你的第一个残疾人在所有情况下首先拥有它,所以它总是被选中。删除并从那里开始工作。

在旁注中,我认为您可以设法使此选项部分更好地工作。我冒昧地为你改写它:

<select name="select1" id="select1"> 
<?php 
    $selected = ''; 
    while ($row = obdc_fetch_array($db)) { 
     $options[] = '<option value="'.$row['content'].'">'.$row['content'].'</option>'; 
     if ($row['content'] == $src) 
      $selected = count($options) - 1; 
    } 
    array_unshift($options, '<option disabled="disabled"', $selected == '' ? ' selected="selected"' : '','>--Select an option--</option>'); 

    foreach ($options as $option) { 
     echo $option; 
    } 
?> 
</select> 
+0

非常感谢,但是当我这样做时,它会迭代每一个,并在每次循环时添加“选择一个选项”。对于预先选择的选项始终是第一个具有选定属性的问题(或者至少这是我看到我的问题的地方),您肯定是正确的。如果用户只能访问1个选项,并且可以在页面加载时传入该值,那么$ src不会为空,而会转到我的'else'语句。如果他们有权访问> 1选项,则不会传入任何内容,并且它现在可以工作。只是想过,但不知道我该怎么做。 – Brian

相关问题