harsh
harsh

Reputation: 19

dynamic select list in php with mysql

using select list with mysql created a list. I have a mysql data with c_code,Table center,and having data 1. id,2. name,3. code. i want to select name from mysql data after selecting name in data list want to show the code crosponding that name without using any submit button from select dropdown list, and the code shows in either label or in inputtext box.

Here is my full code.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Untitled 1</title
    </head>
    <body>
        <form id="form1" name="form1" action="" , method="post" >
            <div>
                <label for="list">Center</label>
                <select name="list">
                    <option value=''>-----SELECT-----</option>
                    <?php
                    $conn = mysqli_connect('localhost', 'root', '');
                    $result = mysqli_query($conn, 'SELECT id,name,code FROM center');
                    while ($row = mysqli_fetch_assoc($result)) {
                        echo "<option value='$row[id]'>$row[name]</option>";
                    }
                    ?>
                </select>
            </div>
        </form>
    </body>
</html>

Upvotes: 0

Views: 35920

Answers (5)

Seth Czerepak
Seth Czerepak

Reputation: 1

If I understand you right, you're trying to do the same thing I was before I discovered this solution...

I was creating a dropdown for selecting how many results to show per page. Total of 6 options, which I stored in an array...

$page_sizes = array(10, 25, 50, 100, 200, 500);

Next, I used a "foreach" to build the options list...and an if statement to show the option as selected ONLY if it matched the current page size (page size was determined earlier in the script using the $page_size variable)...

foreach($page_sizes as $pagesize_opt){

  ($pagesize_opt == $page_size) ? $pagesize_options .= '<option selected="selected" value="'.$pagesize_opt.'">'.$pagesize_opt.'</option>':
  $pagesize_options .= '<option value="'.$pagesize_opt.'">'.$pagesize_opt.'</option>';

}

Then, I inserted my options into my drop down...

$page_size_select = '<strong>Results Per Page </strong><select id="analytics_page_size_select">'.$pagesize_options.'</select>';

You could do the same using a "while" iterator. Just check to see if the array element matches your selected element.

OR, if you want to get fancy and use an associative array which selects the option by the key instead of by the value, you can use the "key()" function to get the key and test whether it matches your selected key...

http://php.net/manual/en/function.key.php

So the entire code looks like this...

$page_sizes = array(10, 25, 50, 100, 200, 500);

foreach($page_sizes as $pagesize_opt){($pagesize_opt == $page_size) ? $pagesize_options .= '<option selected="selected" value="'.$pagesize_opt.'">'.$pagesize_opt.'</option>':
  $pagesize_options .= '<option value="'.$pagesize_opt.'">'.$pagesize_opt.'</option>';
}

$page_size_select = 'Results Per Page '.$pagesize_options.'';

Upvotes: 0

Ruo Chun Zeung
Ruo Chun Zeung

Reputation: 39

Try to echo $row variables separately by concatenation. So change this line

echo "<option value='$row[id]'>$row[name]</option>"

to

echo "<option value=". $row[id] .">".$row[name]."</option>"

or you can use escape character like this

echo "<option value={$row[id]}>{$row[name]}</option>"

I think now your select option would work.

Upvotes: 0

MAQU
MAQU

Reputation: 562

Hope its this what you need. you do a select on the id and name for the dropdown menu. after you selected an element the form ll be submitted and a new sql query ll return you the code. there are several other ways to return the code, this is just one easy way

notice, i didnt use prepared statements! because i do not have the correct synatx in head right now... you should think about a general implementation of prepared statements.

<form id="form1" name="form1" action="" method="post" >
            <div>
                <label for="list">Center</label>
                <select name="list" onchange="this.form.submit()">
                    <option value=''>-----SELECT-----</option>
                    <?php
                    $conn = mysqli_connect('localhost', 'root', '');
                    $result = mysqli_query($conn, 'SELECT id,name FROM center');
                    while ($row = mysqli_fetch_assoc($result))
                    {
                      $selected = (isset($_POST['list']) && $_POST['list'] ==  $row['id']) ? 'selected' : '';
                      echo "<option value='$row[id]' $selected >$row[name]</option>";
                    }
                    ?>
                </select>
            </div>

            <div>
                <?php
                if (isset($_POST['list']))
                {
                    $result = mysqli_query($conn, 'SELECT code FROM center WHERE id=' . $_POST['list']);
                    while ($row = mysqli_fetch_assoc($result))
                    {
                        echo $row['code'];
                    }
                }
                ?>
            </div>

        </form>

Upvotes: 0

Fyntasia
Fyntasia

Reputation: 1143

First, let's organize the code a bit...

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Untitled 1</title>
    </head>
    <body>
        <form id="form1" name="form1" action="" method="post">
            <div>
                <label for="list">Center</label>
                <select name="list">
                    <option value=''>-----SELECT-----</option>
            <?php 
                $conn=mysqli_connect('localhost','root',''); 
                $result=mysqli_query($conn,'SELECT id,name,code FROM center'); 
                while($row=mysqli_fetch_assoc($result)) { 
                    echo "<option value='$row[id]'>$row[name]</option>"; 
                } 
            ?> 
                </select> 
            </div> 
        </form> 
    </body> 
    </html>

Second, dynamically doing anything in HTML is impossible with PHP, PHP is a server-side script and can not post back data after user manipulations without refreshing the page.

You are looking for an $.ajax(); solution. I'd suggest looking into it on http://api.jquery.com/jQuery.ajax/

Good luck!

Upvotes: 1

Sawalhah
Sawalhah

Reputation: 156

you should write select tag out of form because this list will not populated until form submitting

Upvotes: 0

Related Questions