2013-10-09 53 views
0

我有一個DDL中的組織列表,其中Text顯示每個組織的全名,Value是該組織的鍵。在選擇組織時,我需要全名和輸入到數據庫中的密鑰。我一直無法使用PHP訪問Value和Text,所以我最終在Value字段中串聯了全名和關鍵字,並使用Explode將它們分成不同的變量(見下文)。這是做這件事的最好方法嗎?我想確保我不會忽略更清潔和更簡單的東西。使用PHP獲取Select Option的價值和文本

HTML:

<form method="post" action="submit.php" name="requestDetailsForm"> 

<label>Organization Name:</label> 
<select id="org_name" name="org_name"> 
    <option value="Organization 1.abc">Organization 1</option> 
    <option value="Organization 2.def">Organization 2</option> 
</select> 
<input type="Submit" value="Submit"> 
</form> 

PHP:

<?php 
$org_name = mysql_escape_string($_POST['org_name']); 

$org_name_split = explode('.', $org_name); 
$org_name_full = $org_name_split[0]; 
$org_name_key = $org_name_split[1]; 

$strSQL = "INSERT INTO Database(org_name_full, org_name_key) VALUES ('$org_name_full', '$org_name_key')"; 
?> 

回答

0

沒有辦法通過像$_POST這樣的數組來訪問選定的值和名稱。

但是,我通常會在這種情況下做的是在所有可能的組織的數據庫中用他們的名字和代碼創建一張表。在PHP中,當生成原始頁面的HTML時,我將在該數據庫上使用SELECT *生成選擇選項列表。然後,在提交數據時,您只需將組織代碼插入到正在處理的第二個表中。當您需要知道與該表中記錄相關的完整組織代碼和名稱時,請使用JOIN聲明。

例如,假設您正在處理的原始數據庫現在代表用戶,並且每個用戶都有一個組織。當某人提交表單時,您將新的用戶記錄插入該表中,並將組織代碼插入到同一個用戶表中的organization_id字段中。然後,當您想要知道給定用戶的組織代碼和名稱時,請執行SELECT * FROM users LEFT JOIN organizations ON user.organization_id = organization.id WHERE user.id = blah。這將返回用戶記錄及其組織代碼和名稱。

+0

感謝您的建議。這是我正在構建的一個新工具,當我想通過不同的用例時,我認爲你是對的。創建附加表格可能是存儲數據的最佳方式。 – jackel414

0

我會使用jQuery做這一塊,我想補充一個隱藏的元素,並指定值作爲表單提交選項的文本值。

<form method="post" action="submit.php" name="requestDetailsForm"> 

    <label>Organization Name:</label> 
    <select id="org_name" name="org_name"> 
     <option value="Organization 1.abc">Organization 1</option> 
     <option value="Organization 2.def">Organization 2</option> 
    </select> 
    <input type='hidden' name='option_text'value='' > 
    <input type="Submit" value="Submit"> 
</form> 

<script type="text/javascript"> 
    $('form').on('submit', function(e){ 
     e.preventDefault(); 
     var text = $('#org_name').find(":selected").text(); 
     $('input[name="option_text"]').val(text); 
     $('form').submit(); 
    }); 
</script> 
+0

沒有PHP @ joe42是正確的說JavaScript將會是你最好的解決方案。或者,你可以駱駝案例的選項值或東西,然後使用PHP重新格式化正確。 如果您很高興使用這些標籤,那麼您可以從語法中排除值字段,並且該值將等於選項標籤。 – Chris

0

這是僅使用PHP的最佳方式。

一個可能的改進可以改善你如何分割中的變量POST:

list($org_name_full, $org_name_key) = explode('.', $org_name); 

否則應該使用JavaScript來添加任何變量,你需要在後

+0

良好的通話,這有助於清理它。謝謝。 – jackel414