2013-12-07 5 views
2

В моей форме есть поля ввода со значениями, заполненными таблицей mysql. В моей инструкции select я передаю эти значения в поля. Таблица называется person и имеет уникальный идентификатор person_id и внешний ключ academy_id. Каждый человек имеет статус active или inactive, хранящийся в поле person_status. У меня возникают трудности с вытягиванием значений от person_status для каждого человека. Как я могу показать статус для каждого человека в выбранном запросе? EXAMPLEЗаполнение поля ввода ввода со значением из mysql

Выберите запрос для заполнения

<?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>";  


?> 

хотел бы интегрировать это выбрать заявление:

<?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>"; 
?> 
+1

Я хотел бы также рекомендовать мечения это с MySQL и/или SQL Кроме того, один нит выбор.: Если вы не используете подстановку переменных и вместо этого просто записываете текст или объединяете строки, не используйте двойные кавычки. Это говорит синтаксическому анализатору, что он читает эту строку для переменных – Zarathuztra

ответ

1

Получить параметры только один раз (не нужно повторять это для каждого человека):

$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 ваш HTML ввернут до

+0

Отлично, я получаю результат. чтобы отобразить правильные результаты, но или первый человек, кажется, отсутствуют значения. Первая запись показывает 'id =" person_fname_ "вместо' id = "person_fname_1" 'в html. Вторая запись имеет значение' id = "person_fname_1" 'вместо' id = "person_fname_2" ' – techAddict82

+0

Thats, потому что' $ s' делает не существует в первом запуске цикла foreach (вы вызываете '$ s ++' в конце). Добавьте '$ s = 1;' непосредственно перед 'foreach ($ results2 as ...' –

+0

Ошибка моего новичка. Спасибо! – techAddict82

Смежные вопросы