簡體   English   中英

基於多個下拉選擇從 mysql 數據庫中獲取數據

[英]Fetch data from mysql database based on multiple dropdown selections

我正在開展一個項目,其中有關治療師的數據存儲在數據庫中,我的頁面上有 5 個下拉菜單,我希望根據用戶選擇的下拉菜單值獲取數據。

<div id="dropdowns"> 
        <form method="post">    
            <?php
                session_start();
                
                $username = "root";
                $password = "";
                $database = "align";
                $mysqli = new mysqli("localhost", $username, $password, $database);

                $sql = "SELECT DISTINCT `Designation` FROM `therapists`"; 
                if($res = $mysqli->query($sql))
                {

                    echo '<div class="select">
                                <select id="profession" name="profession" onchange="getSelectDesignation(this.value);">
                                <option selected disabled>Filter by Profession</option> ';              
                    while ($row = $res->fetch_assoc()) {
                        echo "<option value='" . $row['Designation'] ."'>" . $row['Designation'] ."</option>";
                    }
                    echo '      </select>
                        </div>';
                    $res->free();
                
                } 

                $ids = "SELECT DISTINCT `Identifies As` FROM `therapists`";
                if($res = $mysqli->query($ids))
                {
                    echo '<div class="select">
                                <select id="idas" name="idas" onchange="getSelectIdentifiesas(this.value);">
                                <option selected disabled>Identifies as</option> ';              
                    while ($row = $res->fetch_assoc()) {
                        echo "<option value='" . $row['Identifies As'] ."'>" . $row['Identifies As'] ."</option>";
                    }
                    echo '      </select>
                        </div>';
                    $res->free();
                
                }
                
                $clgr = "SELECT DISTINCT `Client Group` FROM `therapists`";
                if($res = $mysqli->query($clgr))
                {

                    echo '<div class="select">
                            <select id="clgr" name="clgr" onchange="getSelectClientGroup(this.value);">
                                <option selected disabled>Client Group</option> ';

                    while ($row = $res->fetch_assoc()) {
                        echo "  <option value='" . $row['Client Group'] ."'>" . $row['Client Group'] ."</option>";
                    } 
                    echo '   </select>
                        </div>';
                    $res->free();
                }

                $istr = "SELECT DISTINCT `Issues Treated` FROM `therapists`";
                if($res = $mysqli->query($istr))
                {

                    echo '<div class="select">
                            <select id="istr" name="istr" onchange="getSelectIssuesTreated(this.value);">
                                <option selected disabled>Issues treated</option> ';

                    while ($row = $res->fetch_assoc()) {
                        echo "  <option value='" . $row['Issues Treated'] ."'>" . $row['Issues Treated'] ."</option>";
                    } 
                    echo '   </select>
                        </div>';
                    $res->free();
                } 
                
                $lan = "SELECT DISTINCT `Languages` FROM `therapists`";
                if($res = $mysqli->query($lan))
                {

                    echo '<div class="select">
                            <select id="idas" name="lan" onchange="getSelectLanguages(this.value);">
                                <option selected disabled>Languages</option> ';

                    while ($row = $res->fetch_assoc()) {
                        echo "  <option value='" . $row['Languages'] ."'>" . $row['Languages'] ."</option>";
                    } 
                    echo '   </select>
                        </div>';
                    $res->free();
                }
              
            ?>
        </form>      
    </div> 

每當用戶選擇下拉選項時,每個下拉菜單的特定 function 都會被調用,它會獲取所選選項的值並將其發送到另一個名為 fetch_data 的頁面,該頁面顯示有關治療師的信息。

function getSelectDesignation(val1)
{
    $.ajax({
        type: 'post',
        url: 'fetch_data.php',
        data: {
            get_option1:val1,
        },
        success: function (response) {
            document.getElementById("boxes").innerHTML=response; 
        }
    });
}

function getSelectIdentifiesas(val2)
{
    $.ajax({
        type: 'post',
        url: 'fetch_data.php',
        data: {
            get_option2:val2,
        },
        success: function (response) {
            document.getElementById("boxes").innerHTML=response; 
        }
    });
}

function getSelectClientGroup(val3)
{
    $.ajax({
        type: 'post',
        url: 'fetch_data.php',
        data: {
            get_option3:val3,
        },
        success: function (response) {
            document.getElementById("boxes").innerHTML=response; 
        }
    });
}

function getSelectIssuesTreated(val4)
{
    $.ajax({
        type: 'post',
        url: 'fetch_data.php',
        data: {
            get_option4:val4,
        },
        success: function (response) {
            document.getElementById("boxes").innerHTML=response; 
        }
    });
}

function getSelectLanguages(val5)
{
    $.ajax({
        type: 'post',
        url: 'fetch_data.php',
        data: {
            get_option5:val5,
        },
        success: function (response) {
            document.getElementById("boxes").innerHTML=response; 
        }
    });
}

下面是我的 fetch_data 頁面中的代碼:

<?PHP
   session_start();
   
   $username = "root";
   $password = "";
   $database = "align";
   
   
   $mysqli = new mysqli("localhost", $username, $password, $database);

   $state1 = $_POST['get_option1'];
   $state2 = $_POST['get_option2'];
   $state3 = $_POST['get_option3'];
   $state4 = $_POST['get_option4'];
   $state5 = $_POST['get_option5'];
   $loc = $_SESSION['location'];

   $find="SELECT * FROM `therapists` AS `T` inner join `personal details` as `P` ON `T`.`Therapist ID` = `P`.`Therapist ID` WHERE(`Location` LIKE '%".$loc."%' AND  `Designation` LIKE '%".$state1."%' AND  `Identifies As` LIKE '%".$state2."%' AND  `Client Group` LIKE '%".$state3."%' AND  `Languages` LIKE '%".$state5."%'  AND  `Issues Treated` LIKE '%".$state4."%')";
   if ($result = $mysqli->query($find)) {
                   
       while ($row = $result->fetch_assoc()) {
           $field1name = $row["Therapist ID"];
           $field2name = $row["Name"];
           $field3name = $row["Designation"];
           $field4name = $row["Identifies As"];
           $field5name = $row["Client Group"];
           $field6name = $row["Languages"];
           $field7name = $row["Issues Treated"];
           $field8name = $row["Location"];
           $field9name = $row["Phone Number"];
           $field10name = $row["Intro"];
           $field11name = $row["Instagram Link"];
           $field12name = $row["Linkedin Link"];
           $field13name = $row["Aasha URL"];
           
           echo '<div id="profile-card">
           <div id="info">
               <div class="name-desig-img">
                   <div class="name-desig">          
                       <a class="therapist-name" href="http://localhost/aasha/profile.php/'. $field2name .'">';echo $field2name;echo'</a>
                       <p>';echo $field3name;echo'</p>
                   </div>
                   <div class="p-img">
                       <img class="prof-img" src="';echo $field14name;echo'">
                   </div>  
               </div>
               <div class="intro">
                   <p>';echo $field10name;echo'</p>
               </div>
               <div class="location">  
                   <p>';echo $field8name;echo'</p><p>
               </div>
           </div>    
           <div id="links">
               <div id="t-socials">
                   <div class="tp"><a class="t-links" href="';echo $field13name;echo'">';echo' Profile </a></div>
                   <div class="tli">|</div>
                   <div class="tli"><a class="t-links" href="';echo $field12name;echo '"><i class="fab fa-linkedin">';echo'</i></a> </div>  
                   <div class="tli">|</div>
                   <div class="tli"><a class="t-links" href="';echo $field11name;echo '"><i class="fab fa-instagram-square">';echo'</i></a></div>
               </div>  
               <p class="showphone">
                   <span class="clickshow" style="display: inline;"><b>Show Phone Number</b></span>
                   <span class="hiddenphone" style="display: none;">
                       <span>';echo $field9name;echo'</span>
                   </span>
               </p>
           </div>
           </div>';       
       }
       
   /*freeresultset*/
   $result->free();
   }

?>

現在的問題是每當我 select 一個下拉選項時,其他下拉菜單的值為空,並且我在 PHP 中得到未定義的數組鍵錯誤。例如,如果我 select 選項 1 這是第一個下拉菜單,我得到選項 2 的未定義數組鍵錯誤、選項 3、選項 4 和選項 5。 如果我 select 選項 2,我會得到選項 1、選項 3、選項 4 和選項等的未定義數組鍵錯誤,等等。 即使在 1 個或多個下拉列表中未選擇任何選項,我也需要找到一種使查詢工作的方法。

您可以使用isset()檢查選項是否已設置,如果未設置值,只需將長度為零''字符串分配給這些變量。

if(isset($_POST['get_option1'])){
    $state1 = $_POST['get_option1'];
}else{
    $state1 = '';
}

對於所有其他變量也是如此。

首先,一次只能在 ajax 中發出 1 個請求,根據您的代碼,請求是在onchange()時發送的,因此只會發出 1 個請求。

一切看起來都很好,但是您正在從_POST中獲取所有變量,因為一次只發送 1 個變量,因此,您需要一次發送所有變量以進行查詢$find="SELECT * FROM `therapists` AS `T` inner join `personal details` as `P` ON `T`.`Therapist ID` = `P`.`Therapist ID` WHERE(`Location` LIKE '%".$loc."%' AND `Designation` LIKE '%".$state1."%' AND `Identifies As` LIKE '%".$state2."%' AND `Client Group` LIKE '%".$state3."%' AND `Languages` LIKE '%".$state5."%' AND `Issues Treated` LIKE '%".$state4."%')"; 上班。

做這樣的事情......

<div id="dropdowns"> 
        <form>   
         <!-- Your selectors here -->
            <select id="idas" name="lan">
                <option> ...... </option>
            </select>
            <select id="clgr" name="lan">
                <option> ...... </option>
            </select>
            <select id="istr" name="lan">
                <option> ...... </option>
            </select>
            <input type="button" onclick = "gettheValues()" value="GetIt"> 
        </form>      
    </div> 

Java 腳本

function gettheValues()
{
    var val1 = document.getElementById("idas").value;
    var val2 = document.getElementById("clgr").value;
    var val3 = document.getElementById("istr").value;
    $.ajax({
        type: 'post',
        url: 'fetch_data.php',
        data: {
            get_option1:val1,
            get_option2:val2,
            get_option3:val3
        },
        success: function (response) {
            document.getElementById("boxes").innerHTML=response; 
        }
    });//Send values all together...
}

我想在 php 代碼中無需更改任何內容。

而且I need to find a way to make the query work even if no option is selected in 1 or more dropdowns. 你這是什么意思?

如果這些狀態state1 - state5對您的查詢很重要,則無法運行該查詢。 您知道該查詢中狀態的重要性,因此不適合回答。

如果您認為可以根據不同的選擇器進行查詢,請這樣做。

<?php 
if(isset($_POST['get_option1']))
{ 
 //appropriate query here

$query = "Your query with option1";
}
if(isset($_POST['get_option2']))
{ 
 //appropriate query here
$query = "Your query with option2";
}
...
..etc to option5

//Here your result of query with html
?>

對於下面的任何查詢評論,如果您需要一個工作示例,我會做一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM