【问题标题】:PHP: Echo value of selected item from a dependable dropdown menuPHP:从可靠的下拉菜单中回显所选项目的值
【发布时间】:2012-07-22 17:09:46
【问题描述】:

我目前正在使用一个在 jQuery 和 PHP 的帮助下运行的 Dependable 下拉菜单。这些值正在从 MySQL 数据库中提取。 php 是否可以回显可靠下拉菜单的选定值?

EXAMPLE

HTML/PHP

<form action="" method="post">

        <select name="gender" id="gender" class="update">
            <option value="">Select one</option>
            <?php if (!empty($list)) { ?>
                <?php foreach($list as $row) { ?>
                    <option value="<?php echo $row['id']; ?>">
                        <?php echo $row['name']; ?>
                    </option>
                <?php } ?>
            <?php } ?>
        </select>

        <select name="category" id="category" class="update"
            disabled="disabled">
            <option value="">----</option>
        </select>

        <select name="colour" id="colour" class="update"
            disabled="disabled">
            <option value="">----</option>
        </select>

</form>

【问题讨论】:

  • 请多解释How can echo the selected Item from a dependable drop down menu?
  • @Adnan 很抱歉不清楚,我已经编辑了答案。
  • 很抱歉,但还是不够清楚。您是否希望 PHP 预先确定所选项目,以便在页面加载时已经选择了一个项目?还是您希望在用户选择了某些内容后,它会转到 PHP,然后回显到浏览器?
  • 看看演示,我想他想用基于第一个下拉列表中所选项目的值更新第二个下拉列表。
  • @krike,真的吗?!如果这是他想要的,那么提出这个问题没有意义,演示已经有代码,视频已经提供了解释。

标签: php


【解决方案1】:

请添加 jquery.js。 你的html代码

    <select name="gender" id="gender" class="update">
        <option value="">Select one</option>
        <?php if (!empty($list)) { ?>
            <?php foreach($list as $row) { ?>
                <option value="<?php echo $row['id']; ?>">
                    <?php echo $row['name']; ?>
                </option>
            <?php } ?>
        <?php } ?>
    </select>

    <select name="category" id="category" class="update" disabled="disabled">
        <option value="">----</option>
    </select>

    <select name="colour" id="colour" class="update" disabled="disabled">
        <option value="">----</option>
    </select>
        //jquery code for source list
    <script type="text/javascript">
        $(document).ready(function(){
            $('#gender').change(function() {
              if ($(this).val()!='') {
                $("#category").load("postfile.php",{gender_id: $(this).val()});
                $("#category").removeAttr('disabled');
              }
            });
            //code on change of sel_source
            $('#category').change(function() {
              if ($(this).val()!='') {
                $("#colour").load("postfile.php",{category_id: $(this).val()});
                $("#colour").removeAttr('disabled');
              }

            });
        });
    </script> 



//postfile.php
//your mysql connection other things goes here
//code for category
$objDb = new PDO('mysql:host=localhost;dbname=dbname', 'ur_username', 'ur_password');
if(isset($_REQUEST['gender_id']) && !empty($_REQUEST['gender_id'])) {

           $sql = "SELECT * FROM `categories` WHERE `master` = ?";
    $statement = $objDb->prepare($sql);
    $statement->execute(array($_REQUEST['gender_id']));
    $list = $statement->fetchAll(PDO::FETCH_ASSOC);

    if(!empty($list)) {
        $output = '<option value="">Select</option>';
        foreach($list as $row) {              
                $output .= '<option value="'.$row['id'].'">'.$row['name'].'</option>';
        }
    } else {
        $output = '<option value="">Select</option>';
    }
    echo $output;
} 
//code for color

if(isset($_REQUEST['category_id']) && !empty($_REQUEST['category_id'])) {
    $sql = "SELECT * FROM `categories` WHERE `master` = ?";
    $statement = $objDb->prepare($sql);
    $statement->execute(array($_REQUEST['category_id']));
    $list = $statement->fetchAll(PDO::FETCH_ASSOC);
     if(!empty($list)) {
        $output = '<option value="">Select</option>';
        foreach($list as $row) {          
                $output .= '<option value="'.$row['id'].'">'.$row['name'].'</option>';
        }
    } else {
        $output = '<option value="">Select</option>';
    }
    echo $output;
} 

希望这会对你有所帮助。

【讨论】:

  • 谢谢!我在找这个。虽然我看到你正在使用 ['gender_id']['category_id'] 的一件事,但是 MySQL 表的设置不同,只有 idmaster_idname 这个字段。您可以在视频中看到:Database SETUP
  • 我正在将我们的 html 中的 gender_id 和 category_id 传递给 php,它们不是表字段。您必须在选择查询中指定表字段。
  • 谢谢,我尽了一切可能。你能给我一个工作源到我的电子邮件吗?我真的很感激我的朋友。
【解决方案2】:

您将不得不编写一个 JavaScript 函数,从第一个 HTML 选择字段中检索选定的值或选项。该函数通常会写出当前页面的新 URL 路径,并添加一些连接的 Get 变量:

<script type="text/javascript">
getSelectedOptionValue() {
// create some variables to store your know values such as URL path and document
var myPath = " put the URL path to the current document here ";
var currentPage = "currentPage.php";
// get the values of any necessary select fields
var carMake = document.getElementById("carMake").value;

// write out the final URL with the Get Method variables you want using concatnitation
var getMethodURL = myPath + currentPage + "?carMake='" + carMake + "'";

// function refreshes page using the function made URL
window.location.replace( getMethodURL );
}
</script>

由于第二个选择字段依赖于第一个,因此您必须假设用户将从第一个选项中进行选择。这意味着检索主选择字段值的函数必须运行以响应字段选择的更改。例如

<select name="carMake" id="carMake" onchange="getSelectedOptionValue();">

根据您设置数据库的方式,您可能需要选项标记的值或选项标记之间呈现给用户的字符串...这取决于您要记住如何重新如果您的原始记录集尚未提取必要的信息来编写第二组选择选项标签,请查询该信息。

要使用 php 写出第二个选择字段,只需重复您在第一个中使用的 while 循环。这次用一个新的 SQL 语句替换你的 SQL 语句,使用一个变量,你存储了使用 get 方法从新 URL 检索到的值

<?php

// here I am using the more generic request method although you could use the get as well
$carMake = $_REQUEST['carMake'];

sql_secondSelectField = "SELECT * FROM tbl_carModels WHERE carMake = $carMake";

// Run new query and repeat similar while loop used to write your first select field ?>

【讨论】:

  • 如果您不想离开页面通过重新加载页面来刷新获取变量,您也可以使用 AJAX 调用此函数,但这又增加了几个步骤的复杂性。
  • 您还可以在 php while 循环中添加一个 if 语句,通过将当前迭代记录与发布在由JavaScript 函数。这将保留用户在使用 window.location 方法重新加载页面之前选择的选项。
猜你喜欢
  • 1970-01-01
  • 2018-11-29
  • 1970-01-01
  • 2017-07-16
  • 2020-01-11
  • 1970-01-01
  • 2011-08-31
  • 2023-03-05
  • 2021-03-07
相关资源
最近更新 更多