2013-12-07 97 views
2

我的表單具有從mysql表填充值的輸入字段。在我的select語句中,我將這些值傳遞給字段。該表格被稱爲person並具有唯一的ID person_id和外鍵​​。每個人的狀態activeinactive存儲在字段名稱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(),如果名稱中包含「 - 字符的HTML得到搞砸了

+0

偉大的我得到的結果。第一個記錄在html中顯示id =「person_fname_」'而不是'id =「person_fname_1」'第二個記錄的值爲' id =「person_fname_1」'而不是'id =「person_fname_2」' – techAddict82

+0

那是因爲'$ s'確實不存在於foreach循環的第一次運行中(最後您調用'$ s ++')。在'foreach($ results2 as ...' –

+0

')之前添加一個'$ s = 1;',謝謝! – techAddict82

相關問題