通过从下拉列表中选择字段名称来显示 mysql 表的字段数据

Posted

技术标签:

【中文标题】通过从下拉列表中选择字段名称来显示 mysql 表的字段数据【英文标题】:Displaying field data of mysql table with selecting field name from the drop down list 【发布时间】:2018-10-15 19:01:43 【问题描述】:

我有以下代码将字段名称一起填充到下拉列表中。我希望能够在页面上的表格中显示所选字段的内容。只会选择一个字段名称。所以它将是页面上的单列表。我在网上找不到类似的东西。如果有人可以帮助我,我会很高兴。谢谢!

<?php 

$host = 'localhost'; 
$port = '3306'; 
$server = $host . ':' . $port; 
$user = 'root'; 
$password = ''; 
$link = count($t_tmp = explode(':', $server)) > 1 ? mysqli_connect($t_tmp[0], $user, $password, '', $t_tmp[1]) : mysqli_connect($server, $user, $password); 
if (!$link)  
    die('Error: Could not connect: ' . mysqli_error($link)); 
 
$database = 'mydb'; 
mysqli_select_db($link, $database); 
$query = 'select * from mytable'; 
$result = mysqli_query($link, $query); 
if (!$result)  
    $message = 'ERROR:' . mysqli_error($link); 
    return $message; 
 else  
    $i = 0; 
     echo '<select name="mySelect" id="mySelect">'; 
    while ($i < mysqli_field_count($link))  
        $meta =  
        mysqli_fetch_field_direct($result, $i); 
        echo '<option>' . $meta->name . '</option>'; 
        $i = $i + 1; 
     
echo '</select>';
 
mysqli_close($link); 
?>

它看起来像这样:

选择框中的选项都是字段名,不是字段值。我需要的是在单击/选择字段名称时显示字段值。

【问题讨论】:

您在用户提交表单后执行此操作。 如果你想在不提交的情况下做,你必须在客户端用javascript做。 PHP 在服务器上运行。 是的,我正在寻找没有提交或提交按钮的解决方案。 我现在在我的问题中添加了必要的标签。谢谢。 如果您只想显示 1 列,为什么要使用 SELECT *?这真是个坏习惯。 【参考方案1】:

试试这个:

$country = mysqli_query($con, "SELECT country FROM countrys");echo mysqli_num_rows($country);//counts the amount of rows in the db

echo '&lt;select name="mySelect" id="mySelect"&gt;';

while(mysqli_fetch_array($country))

while ($i = mysqli_fetch_array($country))

echo '&lt;option value="'.$i['country'].'"&gt;' . $i['country']. '&lt;/option&gt;'echo '&lt;/select&gt;';

总是可以正常工作;)

【讨论】:

我需要从字段名称列表中选择一个字段名称。它可以是其中任何一个。我对php不太了解,但是您的代码用于从表中选择一个字段。字段很多,可以是任意一个。 试试这个答案在 *** 上的价值很低,因为它们对教育/授权成千上万的未来研究人员几乎没有什么作用。始终解释您的建议是如何起作用的,以及为什么您认为这是一个好主意。【参考方案2】:

听起来你想在你的选择上添加一个事件处理程序。

$('#mySelect').on('change', function() 
  $.post('your-file.php',  
    action: 'getOptionInfo',
    option: $('#mySelect option:selected').text()
  , function(optionInfohtml) 
    $('.table').html(optionInfoHTML);
  
);

https://jsfiddle.net/mwe55nm9/1/

另外,我建议构建您选择的 html 并将其作为一个整体进行回显,而不是为每个选项一遍又一遍。只是我的偏好,我会使用 for 循环。虽然循环似乎总是陷入无限循环。

... code to connect to database ...
switch ($_POST['action']) 
  case 'buildSelect':
    $options = '';
    for ($i = 0; $i < mysqli_field_count($link); $i++)  
      $meta =  mysqli_fetch_field_direct($result, $i); 
      $options += . '<option>' . $meta->name . '</option>';
     
    echo '<select name="mySelect" id="mySelect">' . $options . '</select>';
    break;
  case 'getOptionInfo':
    echo "code to get info for $_POST['option']"
    break;
  default: echo 'Invalid action.'

https://api.jquery.com/jquery.post/

【讨论】:

谢谢,PoorlyWrittenCode。但我想有一个误解。我有一个来自 mytable 的字段名称下拉列表,它正在工作。我需要的是当一个字段名被点击时,它在数据库中的值会显示在页面上。 比如你的例子中选择了dolor,它在mysql表中的内容应该显示在页面上。 jsfiddle.net/3a4694j0/7 你有多少选择?如果只是几个,您可以像构建选择一样构建表,然后在处理程序中使用.hide().show()。如果它很多或未知,您可以在您的处理程序中使用$.post(),以便在每次选择更改时从您的服务器检索数据。 我更新了我的答案以展示我将如何解决这个问题。请注意,这需要您使用$.post()action: 'buildSelect' 来创建您的选择。一个额外的步骤,但它使代码更清晰,更容易遵循。另外,我在评论框中将其编码,因此肯定存在语法错误。希望它为您指明正确的方向。 这就是我说“类似”的原因。我对sql语句没有太多经验,所以你必须研究如何从你的表中获取你想要的数据列。 (也许w3schools.com/sql/sql_select.asp 会有所帮助)另外,您的沙箱注释All functions that do not require disk, system or network access are whitelisted, others blacklisted. 由于sql 需要网络访问,我认为这不会起作用。此外,您可能还想从 $_POST 变量中转义任何内容以减轻恶意注入。 php.net/manual/en/function.htmlspecialchars.php【参考方案3】:

感谢您的帮助!我在这里找到了答案:https://forums.phpfreaks.com/topic/307230-php-dropdown-menu-to-fetch-columnar-data/page-2#entry1558339

代码如下:

<table class="tbresult">

<?php 

include ("confige.php");

$query = 'select * from employees'; 
$result = mysqli_query($link, $query); 
if (!$result)  
    $message = 'ERROR:' . mysqli_error($link); 
    return $message; 
 else  
    $i = 0; 
    echo '<form name="selectSomething" action="" method="GET">';
     echo '<select name="mySelect" id="mySelect"  onchange="this.form.submit()">'; 
    while ($i < mysqli_field_count($link))  
        $meta =  
        mysqli_fetch_field_direct($result, $i); 
        echo '<option>' . $meta->name . '</option>'; 
        $i = $i + 1; 
     
echo '</select>';
echo '</form>';
 

if(isset($_GET['mySelect'])) 
$myselect = $_GET['mySelect'];  // needs to be after the above check

$sql = "SELECT `$myselect` as mySelect FROM employees";  // add column alias
$result = mysqli_query($link, $sql);   

  if ($result->num_rows > 0) 

   // output data of each row
   while($row = $result->fetch_assoc()) 
   
        echo "<tr><td>" . $row["mySelect"] . "</td></tr>";

   

      echo "</table>";




 else  echo "0 results"; 


mysqli_close($link);

?>

【讨论】:

以上是关于通过从下拉列表中选择字段名称来显示 mysql 表的字段数据的主要内容,如果未能解决你的问题,请参考以下文章

如何通过从数据库中获取值来制作可靠的下拉列表

无法通过从下拉选择转换的选定字段代码使用 SQL 访问全局视图表

通过从 javascript 文件中查询数据库,根据下拉菜单中的选择更新 div 内容

如何从 mysql DB 中搜索与 mojolicious perl 中选定的下拉列表相关的内容

添加列通过从sql Server中的另一个表中选择所有项目来选择表

通过从数据库中获取信息来显示已经选中的复选框