【问题标题】:get dropdown data on another dropdown change获取另一个下拉更改的下拉数据
【发布时间】:2018-10-13 08:08:31
【问题描述】:

我有一个下拉菜单,其列名与数据库表中的列名相同。我已经在下拉菜单的选项标签中插入了每个列名。这些列在数据库中有行数。 之后,我有另一个下拉菜单。我想在上一个下拉菜单中显示所选列的所有数据行。 例如。我在第一个下拉列表中将列名作为 a、b、c、d,并且每列都有数据库表中的数据。所以,如果我在第一个下拉菜单中选择 A;它在下一个下拉列表中显示 A 的所有数据行。代码如下:

<select name="first">

  <option selected="true" disabled="disabled">Select an Option</option> 
  <option value="select_all">Select All</option>
  <option value="a">a</option>   
  <option value="b">b</option>
  <option value="c">c</option>
  <option value="d">c</option>
</select>
<?php
if(isset($_POST['first'])){
$first=$_POST['first'];
}
?>
<select name="firstres" id="firstres"><option style="display:none;" selected; value="">---Select an option---</option><?php  

@mysql_connect('localhost', 'root', '');
@mysql_select_db('db');
$first=$_POST['first'];
$sql = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'db' AND TABLE_NAME = 'tbl' AND COLUMN_NAME LIKE '" . $_POST["first"] . "'";
$result = @mysql_query($sql);
while ($row = mysql_fetch_array($result)) {
	
	echo "<option  value=' " . $row['first'] ."'>" . $row['first'] ."</option>";
    }
?>
</select>

问题是;我没有在第二个下拉菜单中获得列行。

【问题讨论】:

  • 因为你设置了这个条件 if(isset($_POST['first'])) 并且你不发布表单数据它只适用于表单提交。否则,你需要先使用此的下拉更改事件
  • 所以我必须为此使用 ajax 吗?
  • 是的,你需要使用ajax否则使用表单提交
  • 另外,你需要提高你的代码标准,不要在选择输入上写数据库查询
  • 那我应该把那个查询放在哪里?

标签: php html mysql


【解决方案1】:

你需要使用 Ajax 来解决这个问题,这里我的代码也许你可以在你的项目中使用。

查看代码

<select id="category">
     <option value="1">Category</option>
     <option value="2">Category 2</option>
     <option value="3">Category 3</option>
</select>
<select id="sub_category">
     <option>Chose Category</option>
</select>

Ajax 代码

$(document).ready(function(){
     $('#category').on('change',function(){
     var category_id = $(this).val();
         if(category_id){
             $.ajax({
                 type:'POST',
                 url:'sub_category.php',
                 data: {
                     category_id : category_id
                 },
                 success:function(html){
                     $('#sub_category').html(html);
                 }
             });

        }else{
            $('#sub_category').html('<option>Pilih Sub category Kelas</option>');
        }
    });
});

sub_category.php

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$category_id = $_POST['category_id'];
$sql = "SELECT id,sub_category FROM category where category_id = $category_id";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        echo "<option value='".$row["id"]."'>".$row["sub_category"]."</option>";
    }
} else {
    echo "<option>Empty Sub Category</option>";
}

$conn->close();
?>

【讨论】:

  • 问题是;如何将下拉菜单中给定的列名与数据库表的列名匹配?你能帮我解决这个问题吗
  • 另外,你已经使用了 id,但是我有列名并且列名没有 id
【解决方案2】:

首先,我确实建议将整个代码留在 php 中。 -> 让未来的事情变得更容易......

例子:

$output = <<< EOD
<option>Select an Option</option>
etc.
EOD;       
echo $output;

第二,你有没有一步步的跑一遍代码? $first 和 $_POST['first'] 的输出是什么; ? 他们是正确的吗? SQL 语句是否正确? 表名和列名....

第三,据我所知,您希望从第一个下拉列表中进行选择,然后应该出现数据库的输出。 这种方式是行不通的。 HTML 是无状态的。这意味着已经发送到客户端的所有内容都不再可用于服务器。

因此您需要使用一些代码来重新发送此信息:例如 JSON (AJAX) 或通过 HTML(这不太好)。看这里: https://www.w3schools.com/js/js_ajax_intro.asp

【讨论】:

    猜你喜欢
    • 2021-03-25
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多