我在DDL中有一个组织列表,其中Text显示每个组织的全名,Value是该组织的关键。选择组织时,我需要输入我的数据库中的全名和密钥。我无法使用PHP访问Value和Text,因此我最终在Value字段中将全名和键串起来并使用Explode将它们分成不同的变量(见下文)。这是最好的方法吗?我想确保我不会忽视更清洁,更简单的东西。
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 :(得分: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>
答案 1 :(得分:0)
无法通过类似$_POST
数组的方式访问所选值和名称。
但是,在这种情况下我通常会做的是在所有可能组织的数据库中创建一个包含其名称和代码的表。在PHP中,我会在为原始页面生成HTML时在该数据库上使用SELECT *
生成选择选项列表。然后,在提交数据时,您只需将组织代码插入到您正在处理的第二个表中。当您需要知道与该表中记录关联的完整组织代码和名称时,请使用JOIN
语句。
例如,假设您正在处理的原始数据库现在代表用户,并且每个用户都有一个组织。当有人提交表单时,您将新用户记录插入该表,并将组织代码插入同一用户表中的organization_id字段。然后,当您想知道给定用户的组织代码和名称时,执行SELECT * FROM users LEFT JOIN organizations ON user.organization_id = organization.id WHERE user.id = blah
。这将返回用户记录及其组织代码和名称。
答案 2 :(得分:0)
这是仅使用PHP时的最佳方式。
可能的改进可能是改进你在变量中拆分POST的方式:
list($org_name_full, $org_name_key) = explode('.', $org_name);
否则你应该使用javascript将你需要的变量添加到帖子