jimiss
jimiss

Reputation: 119

Getting the drop-down menu selected item and using it in php

I have the following drop-down list that fetches a list coalitions from the database (this list is populated as expected)

<form style = "display: inline-block;" >
        <select class="form-control" name ="coalition_select" onchange = "showCandidates(this.value)" method="GET">
            <option id = "coalition_id" value="coalition">Coalitions</option>
                <?php 
                    include_once 'connection.php';
                    $sql_coalition = mysqli_query($conn, "SELECT coalition FROM candidates");
                    while ($row = $sql_coalition->fetch_assoc()) {
                        echo "<option value=\"coalition\">" . $row['coalition'] . "</option>";
                    }
                ?>
        </select> 
</form>

The problem begins here. Here I'm trying to first get the selected value (which is on of the coalitions) from the drop-down list and second use the value to display users with similar coalition attribute.

here is the script to get the value from the drop-down:

<script>
    function showCandidates (str) {
        if (str.length == "") {
            document.getElementById("txtHint").innerHTML = "";
            return;
        } else {

            if (window.XMLHttpRequest) {
            // code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp = new XMLHttpRequest();
            } else {
                // code for IE6, IE5
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlhttp.onreadystatechange = function() {
                if (this.readyState == 4 && this.status == 200) {
                    document.getElementById("txtHint").innerHTML = this.responseText;
                }
            };
            xmlhttp.open("GET","includes/admin.users.list.inc.php?q="+str,true);
            xmlhttp.send();
        }
    }
</script>

and here is the admin.users.list.inc.php file

<body>
    <?php
        $q = $_GET['q'];
        $conn = mysqli_connect('localhost','root','','voting');
        if (!$conn) {
            die('Could not connect: ' . mysqli_error($conn));
        }

        mysqli_select_db($conn,"osako_Voting");
        $sql="SELECT * FROM candidates WHERE coalition = '".$q."'";
        $result = mysqli_query($conn,$sql);

        echo "<table>
        <tr>
        <th>Firstname</th>
        <th>Lastname</th>
        <th>Coalition</th>
        <th>Email</th>
        </tr>";
        while($row = mysqli_fetch_array($result)) {
            echo "<tr>";
            echo "<td>" . $row['firstname'] . "</td>";
            echo "<td>" . $row['lastname'] . "</td>";
            echo "<td>" . $row['coalition'] . "</td>";
            echo "<td>" . $row['email'] . "</td>";
            echo "</tr>";
        }
        echo "</table>";
        mysqli_close($conn);
        ?>
</body>

The problem seem to be that I'm unable to set the variable $q so that it captures the selected value. right now as it is set it seems to capture the index instead of the value itself. How can this be correctly done? If it is of any help, I'm using this tutorial as a guideline https://www.w3schools.com/php/php_ajax_database.asp

IN SUMMERY: If we have a drop-down list that has been populated dynamically using php script. How can be get the selected value using ajax and use the said value in another php script.

Thanks

Upvotes: 0

Views: 62

Answers (3)

Agbogidi Michael
Agbogidi Michael

Reputation: 137

I know you have accepted an answer but i am puzzled as to this; in your function you have this

document.getElementById("txtHint").innerHTML = "";

But you don't have any form element with the id "txtHint"

So what element is being sort with that ID?

Upvotes: 0

Danyv
Danyv

Reputation: 86

It seems the problem is in this row:

echo "<option value=\"coalition\">" . $row['coalition'] . "</option>";

You're passing the select value to showCandidates(), to be passed via AJAX but you're setting the option value to be always static "coalition" and not the dynamic values you're fetching from DB. Maybe you should change the row to

echo "<option value=\"" . $row['coalition'] . "\">" . $row['coalition'] . "</option>";

Upvotes: 2

JYoThI
JYoThI

Reputation: 12085

your not setting value to value attribute . your just setting constant string for all option values coalition

while ($row = $sql_coalition->fetch_assoc()) {
   echo "<option value=\"$row['coalition']\">" . $row['coalition'] . "</option>";
}

Upvotes: 2

Related Questions