通过从下拉列表中选择字段名称来显示 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 '<select name="mySelect" id="mySelect">';
while(mysqli_fetch_array($country))
while ($i = mysqli_fetch_array($country))
echo '<option value="'.$i['country'].'">' . $i['country']. '</option>'
echo '</select>';
总是可以正常工作;)
【讨论】:
我需要从字段名称列表中选择一个字段名称。它可以是其中任何一个。我对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 中选定的下拉列表相关的内容