【问题标题】:Populating select input field with value from mysql使用来自 mysql 的值填充选择输入字段
【发布时间】:2013-12-07 18:58:22
【问题描述】:

我的表单具有从 mysql 表填充的值的输入字段。在我的选择语句中,我将这些值传递给字段。该表名为person,具有唯一ID person_id 和外键academy_id。每个人都有一个状态activeinactive 存储在字段名称person_status 中。我很难从person_status 为每个人提取值。如何在选择查询中显示每个人的状态? EXAMPLE

选择要填充的查询

<?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 语句中:

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

【问题讨论】:

  • 我还建议用 mysql 和/或 sql 标记它。另外,一个挑剔的选择:如果您不使用变量替换,而只是写出文本或连接字符串,请不要使用双引号。这将告诉解析器读取该字符串的变量

标签: php mysql


【解决方案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 就会搞砸

【讨论】:

  • 太好了,我得到了结果。但是好像有问题。它显示正确的结果,但或第一人称它似乎缺少值。第一条记录在 html 中显示 id="person_fname_" 而不是 id="person_fname_1"。第二条记录的值为 id="person_fname_1" 而不是 id="person_fname_2"
  • 那是因为 $s 在 foreach 循环的第一次运行中不存在(你在最后调用 $s++)。在 foreach ($results2 as ... 之前添加一个 $s = 1;
  • 我的菜鸟错误。谢谢!
猜你喜欢
  • 1970-01-01
  • 2017-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多