我在 DDL 中有一个组织列表,其中文本显示每个组织的全名,值是该组织的键。 选择组织时,我需要将全名和密钥输入到我的数据库中。 我无法使用 PHP 访问值和文本,因此我最终将“值”字段中的全名和键串在一起,并使用 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')";
?>
我会使用 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>
无法通过
$_POST
数组之类的方式访问所选值和名称。
但是,在这种情况下,我通常会做的是在数据库中创建一个表,其中包含所有可能的组织及其名称和代码。在 PHP 中,在为原始页面生成 HTML 时,我会在该数据库上使用
SELECT *
生成选择选项列表。然后,当提交数据时,您只需将组织代码插入到您正在处理的第二个表中。当您需要知道与该表中的记录关联的完整组织代码和名称时,您可以使用 JOIN
语句。
例如,假设您现在处理的原始数据库代表用户,每个用户都有一个组织。当有人提交表单时,您可以将新的用户记录插入到该表中,并将组织代码插入到同一用户表中的organization_id 字段中。然后,当您想知道给定用户的组织代码和名称时,您只需
SELECT * FROM users LEFT JOIN organizations ON user.organization_id = organization.id WHERE user.id = blah
。这将返回用户记录及其组织代码和名称。
这是仅使用 PHP 时的最佳方法。
一个可能的改进可能是改进如何在变量中拆分 POST:
list($org_name_full, $org_name_key) = explode('.', $org_name);
否则你应该使用 javascript 将你需要的变量添加到帖子中
<select required name="role_user" class="form-select">
<?php
$options = array( 'DG', 'DD1', 'DD2', 'DD3', 'SPAG', 'AG' );
$options_title = array( 'Admin', 'Superviseur Direction 1', 'Superviseur Direction 2', 'Superviseur Direction 3', 'Super-Agent', 'Agent' );
$output = '';
for( $i=0; $i<count($options); $i++ )
{
if ($get_users_data["permission"] == $options[$i]) {
echo "<option value=$options[$i] selected> $options_title[$i]</option>";
}else{
echo "<option value=$options[$i] > $options_title[$i]</option>";
}
}
?>
</select>