0

I'm using the W3 Schools example: http://www.w3schools.com/PHP/php_ajax_database.asp to display a table of database data given the choice from a single select box. How can I modify this to include another select box, say for example I wanted records matching a name and an age?

2 Answers 2

1

You can try this (the following piece of code is not tested, but it should work)

The HTML Page

<html>
<head>
<script type="text/javascript" src="selectuser.js"></script>
</head>
<body>

<form>
Select a User:
<select name="users" id="users">
<option value="1">Peter Griffin</option>
<option value="2">Lois Griffin</option>
<option value="3">Glenn Quagmire</option>
<option value="4">Joseph Swanson</option>
</select>

Select an age:
<select name="age" id="age">
<option value="39">39</option>
<option value="40">40</option>
<option value="41">41</option>
<option value="42">42</option>
</select>

<input type='button' value='Refresh Data' onclick="showUser(document.getElementById('users').value,document.getElementById('age').value)">
</form>
<br />
<div id="txtHint"><b>Person info will be listed here.</b></div>

</body>
</html>

The Java script code as:

var xmlhttp;

function showUser(str,age)
{
xmlhttp=GetXmlHttpObject();
if (xmlhttp==null)
  {
  alert ("Browser does not support HTTP Request");
  return;
  }
var url="getuser.php";
url=url+"?q="+str+"&a="+age;
url=url+"&sid="+Math.random();
xmlhttp.onreadystatechange=stateChanged;
xmlhttp.open("GET",url,true);
xmlhttp.send(null);
}

function stateChanged()
{
if (xmlhttp.readyState==4)
{
document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
}
}

function GetXmlHttpObject()
{
if (window.XMLHttpRequest)
  {
  // code for IE7+, Firefox, Chrome, Opera, Safari
  return new XMLHttpRequest();
  }
if (window.ActiveXObject)
  {
  // code for IE6, IE5
  return new ActiveXObject("Microsoft.XMLHTTP");
  }
return null;
}

The PHP Page as

<?php
$q=$_GET["q"];
$a=$_GET["a"];

$con = mysql_connect('localhost', 'peter', 'abc123');
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("ajax_demo", $con);

$sql="SELECT * FROM user WHERE id = '".$q."' and age='".$a."'";

$result = mysql_query($sql);

echo "<table border='1'>
<tr>
<th>Firstname</th>
<th>Lastname</th>
<th>Age</th>
<th>Hometown</th>
<th>Job</th>
</tr>";

while($row = mysql_fetch_array($result))
  {
  echo "<tr>";
  echo "<td>" . $row['FirstName'] . "</td>";
  echo "<td>" . $row['LastName'] . "</td>";
  echo "<td>" . $row['Age'] . "</td>";
  echo "<td>" . $row['Hometown'] . "</td>";
  echo "<td>" . $row['Job'] . "</td>";
  echo "</tr>";
  }
echo "</table>";

mysql_close($con);
?>



Sign up to request clarification or add additional context in comments.

2 Comments

Is it necessary to have a button to refresh the data?
no...it is not at all necessary to add the refresh button. You can add the this: showUser(document.getElementById('users').value,document.getElementById('age').value) to the onchange event of the Select HTML field (name or age list)
0

Change

<select name="users" onchange="showUser()" id="name_select">

ADD age drop down from 1 to 100

<select name="age" onchange="showUser()" id="age_select">
  <option value="1">1</option>
  <option value="2">2</option>
                   |
  <option value="100">100</option>
</select>

Change

function showUser(str)
{
xmlhttp=GetXmlHttpObject();
if (xmlhttp==null)
  {
  alert ("Browser does not support HTTP Request");
  return;
  }
name= document.getElementByID('name_select').value
age= document.getElementByID('age_select').value
var url="getuser.php";
url=url+"?q="+str+"&age="+age;
url=url+"&sid="+Math.random();
xmlhttp.onreadystatechange=stateChanged;
xmlhttp.open("GET",url,true);
xmlhttp.send(null);
}

change in php

$age=$_GET["age"];
$sql="SELECT * FROM user WHERE id = '".$q."' and age=".$age;

3 Comments

Won't this be a problem if they don't select an age?
I'm having problems, now nothing happens if I change the selections
@Robert sorry dear your showUser(str) now should be showUser()

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.