Моя форма имеет поля ввода со значениями, заполненными из таблицы mysql. В моей инструкции select я передаю эти значения в поля. Таблица называется person
и имеет уникальный идентификатор person_id
и иностранный ключ academy_id
. Каждый человек имеет статус active
или inactive
хранящийся в поле имя person_status
. У меня возникают трудности с вытягиванием значений из person_status
для каждого человека. Как я могу показать статус для каждого человека в выбранном запросе? ПРИМЕР
Выберите запрос для заполнения
<?php $id = 15; $db_select2 = $db_con->prepare(" SELECT a.name, a.academy_id, p.person_id, p.person_status, p.first_name FROM academy a LEFT JOIN person p ON a.academy_id = p.academy_id WHERE a.academy_id = :id "); if (!$db_select2) return false; if (!$db_select2->execute(array(':id' => $id))) return false; $results2 = $db_select2->fetchAll(\PDO::FETCH_ASSOC); if (empty($results2)) return false; $result2 = ''; $s = 1; echo "<table>"; echo "<tbody>"; foreach ($results2 as $value2){ echo "<tr>"; echo "<td>Name #".$s."<input type=\"hidden\" name=\"person_id_".$s."\" value='". $person_id = $value2['person_id']."' readonly=\"readonly\"/><input id=\"person_fname_".$s."\" name=\"person_fname_".$s."\" placeholder=\"Person #".$s." First Name\" type=\"text\" value='" . $value2['first_name'] ."'/></td>"; echo "</tr>"; $s++; } echo "</tbody>"; echo "</table>"; ?>
хотел бы интегрировать это в select statement:
<?php $table_name2 = "person"; $column_name2 = "person_status"; echo "<select name=\"$column_name2\"><option>Select one</option>"; $sql1 = 'SHOW COLUMNS FROM '.$table_name2.' WHERE field="'.$column_name2.'"'; $row1 = $db_con->query($sql1)->fetch(PDO::FETCH_ASSOC); $selected1 = ''; foreach(explode("','",substr($row1['Type'],6,-2)) as $option) { if ($status == $option){ $selected1 = "selected=selected"; }else{ $selected1=''; } echo "<option value='$option'" . $selected1. ">$option</option>"; } echo "</select></br>"; ?>
Получать варианты только один раз (нет необходимости повторять это для каждого человека):
$sqlStatuses = 'SHOW COLUMNS FROM '.$table_name2.' WHERE field="'.$column_name2.'"'; $rowStatuses = $db_con->query($sql1)->fetch(PDO::FETCH_ASSOC); $personStatuses = explode("','",substr($rowStatuses['Type'],6,-2));
Затем пройдите по лицам
foreach ($results2 as $value2) { // Your code echo "<tr>"; echo "<td>Name #".$s."<input type=\"hidden\" name=\"person_id_".$s."\" value='". $person_id = $value2['person_id']."' readonly=\"readonly\"/><input id=\"person_fname_".$s."\" name=\"person_fname_".$s."\" placeholder=\"Person #".$s." First Name\" type=\"text\" value='" . $value2['first_name'] ."'/></td>"; // Added echo '<td><select name="person_status_'.$s.'">'; foreach($personStatuses as $option) { echo '<option value="'.htmlspecialchars($option).'" '; if ($value2['person_status'] == $option) { echo 'selected="selected"'; } echo '>' . htmlspecialchars($option) . '</option>'; } echo '</select></td>'; // Your code again echo "</tr>"; $s++; }
Построение этого в один запрос SELECT не является сложным (хотя возможно, но дает нечитаемый код).
О, и взгляните на htmlspecialchars (), если имя содержит «-character your HTML get screw up up