【问题标题】:MYSQL Select based on HTML select optionMYSQL Select 基于 HTML 选择选项
【发布时间】:2017-05-28 11:28:10
【问题描述】:

我有一个从数据库中回显列 (jobTitle) 的选择,在更改时我试图在另一个 html 选择中显示,选择另一列 (company_name),但只有与第一个 html 选择相关的值。

我没有收到错误消息。正在传递第一个 html 选择值,但由于某种原因,它没有根据第二个选择中的值从数据库中进行选择。

我认为问题出在我的第二个 sql 查询上。

P.S 如果有人知道更有效的方法,我将不胜感激。

PHP 和 HTML:

<select name="jobtitle_select" class="jobtitle_select">
    <option class="" name="" value="" >-- Job title --</option> 
    <?php  
    $sql = $dbh->prepare("SELECT * FROM jobs_list");
    if($sql->execute()) {
        $sql->setFetchMode(PDO::FETCH_ASSOC);
    }
    while($row = $sql->fetch()) { 
        $jobTitle = $row['jobTitle'];
        echo "<option class='' name='' value='$jobTitle' > $jobTitle </option>"; 
    } // end of while //  ?>
</select>
<?php 
$jobtitle_select = $_POST['jobtitle_select'];
if ($jobtitle_select){
    $sql = $dbh->prepare("SELECT * FROM jobs_list WHERE company_name = :jobtitle_select");
    $sql->bindParam(':jobtitle_select', $jobtitle_select, PDO::PARAM_STR);  
    if($sql->execute()) {
        $sql->setFetchMode(PDO::FETCH_ASSOC);
    }
?>     
<select class="company_name_select" >   
    <option class="" name="" value="" >-- Company name --</option>      
    <?php while($row = $sql->fetch()) { 
        $company_name = $row['company_name'];
        echo "<option class='' name='' value='$company_name'> $company_name   </option>"; 
    } // end of while //        
}?>  <!-- end of if -->
</select> 

JQUERY:

$('.jobtitle_select').change(function(){
        $.ajax({
            //create an ajax request to load_page.php
            type: "POST", 
            data:$('.jobtitle_select'),     
            dataType: "html",   //expect html to be returned                
            success: function(date){
                $('.company_name_select').html(date);
            }
        })
    });

【问题讨论】:

    标签: php jquery mysql select


    【解决方案1】:

    您的 ajax 调用不正确,或者说不完整。您需要提供 url,以及带有名称和值的发布变量。

    $('.jobtitle_select').change(function(){
        $.ajax({
            //create an ajax request to load_page.php
            url: "load_page.php",
            type: "POST", 
            data: {jobtitle_select: $('.jobtitle_select').val()},     
            dataType: "html",   //expect html to be returned                
            success: function(date){
                $('.company_name_select').html(date);
            }
        })
    });
    

    并且您的 load_page.php 文件应该包含从数据库读取数据的 php 代码和仅显示 选择的内部部分的 html 代码:

    <?php 
    $jobtitle_select = $_POST['jobtitle_select'];
    if ($jobtitle_select){
        $sql = $dbh->prepare("SELECT * FROM jobs_list WHERE company_name = :jobtitle_select");
        $sql->bindParam(':jobtitle_select', $jobtitle_select, PDO::PARAM_STR);  
        if($sql->execute()) {
            $sql->setFetchMode(PDO::FETCH_ASSOC);
        }
    ?>     
    
        <option class="" name="" value="" >-- Company name --</option>      
        <?php while($row = $sql->fetch()) { 
            $company_name = $row['company_name'];
            echo "<option class='' name='' value='$company_name'> $company_name   </option>"; 
        } // end of while //        
    }?>  <!-- end of if -->
    

    【讨论】:

    • 如果我将它发送到同一页面,我不需要 URL。通过默认 ajax 将其发送到同一页面。
    • 上面我已经把你的一段代码放在一起让它工作。如果您想将调用发送到同一页面,则 success 函数不正确,因为它将整个页面加载到您的 &lt;select &gt;
    • 好点,我试过这个结构但是第二个 html 选择在第一个更改时没有被填充,没有错误
    • 您可以发布您尝试过的确切代码吗?也许是一个愚蠢的问题,但是您是否有数据库中的数据来填充第二个选择? :)
    • 我完全按照你的建议做了,把它分成两个文件,我添加了一个带有class="company_name_select"的html选择和上面的ajax调用到索引文件和上面的php到load_page.php是的,我在数据库中有数据:P
    猜你喜欢
    • 2016-06-11
    • 2016-08-28
    • 2013-04-20
    • 2015-09-02
    • 1970-01-01
    • 2018-10-04
    • 2011-06-03
    • 2016-12-29
    • 1970-01-01
    相关资源
    最近更新 更多