我想修改函数checkSelectedOption以便不必在每次调用数组时都对其进行硬编码。
第一个函数预先选择与数据库中的信息匹配的选项,但它使用硬编码数组来填充select
元素。第二个函数从 db 值创建数组并动态填充select
元素。如何将这两个功能结合起来,以便select
动态填充元素,然后预先选择与数据库中的信息匹配的选项?
函数 checkSelectedOption使用数组“$options”中指定的值填充元素,然后预先选择与 db 的“customer_info”表中的信息匹配的选项。此函数当前需要对数组进行硬编码,我想用函数 printSelectOptions中的方法替换函数的这一部分,该方法使用从 db 值创建的数组。
函数 printSelectOptionsselect
根据从数据库中获取的值填充元素。它通过使用从“form_fields”表中提取的列中的值创建一个数组来做到这一点。
函数 checkSelectedOption
function checkSelectedOption($dataArray, $currentSelection) {
foreach ($dataArray as $key => $value) {
echo '<option ' . (($key == $currentSelection) ? 'selected="selected"' : '') . ' value="' . $key . '">' . $value . '</option>';
}
}
try {
$stmt = $conn->prepare("SELECT * FROM customer_info WHERE user_id = :user_id");
$stmt->bindValue(':user_id', $user_id);
$stmt->execute();
} catch(PDOException $e) {
echo $e->getMessage();
}
$row = $stmt->fetch();
调用函数
<select name="first_name">
<?php
// Populates the element with values from array $options
$options = array("John"=>"John", "Robert"=>"Robert");
$selected = $row['first_name'];
echo checkSelectedOption($options, $selected);
?>
</select>
函数 printSelectOptions
function printSelectOptions($dataArray, $currentSelection, $fieldname) {
$output = '';
foreach ($dataArray as $key => $value) {
// Only add to array if row has value
if ($value[$fieldname] !="" && $value[$fieldname] !="Null") {
$output .= '<option ' . (($key == $currentSelection)) . ' value="' . $key . '">' . str_replace('_', ' ', $value[$fieldname]) . '</option>';
}
}
return $output;
}
try {
$stmt = $conn->prepare("SELECT * FROM form_fields");
$stmt->execute();
} catch(PDOException $e) {
echo $e->getMessage();
}
$rows = $stmt->fetchAll();
调用函数
<select name="first_name">
<?php
// Dynamically populates element with array created from column first_name
echo printSelectOptions($rows, $currentSelection, 'first_name');
?>
</select>