2013-05-30 91 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

相關問題