I am a beginner with php. I have a data table something like this
| serial | | name | | email | | phone | | location | | profession | | source |
-----------------------------------------------------------------------------------------------------------------------------
| 1 | | Mr first | | a@example.com | | 123456780 | | India | | Designer | | From X |
| 2 | | Mr second | | b@example.com | | 123456781 | | US | | Designer | | From Y |
| 3 | | Mr third | | c@example.com | | 123456782 | | US | | Engineer | | From X |
| 4 | | Mr fourth | | d@example.com | | 123456783 | | US | | Disigner | | From Z |
| 5 | | Mr fifth | | e@example.com | | 123456784 | | India | | Engineer | | From Y |
| 6 | | Mr sixth | | f@example.com | | 123456785 | | UK | | Designer | | From X |
| 7 | | Mr seventh | | g@example.com | | 123456786 | | India | | Designer | | From X |
I have a html form like this
<form method="post" action="search.php">
<select name="location">
<option value="" selected="selected">-any-</option>
<option value="UK">UK</option>
<option value="India">India</option>
<option value="US">US</option>
</select>
<select name="source">
<option value="" selected="selected">-any-</option>
<option value="From X">From X</option>
<option value="From Y">From Y</option>
<option value="From Z">From Z</option>
</select>
<select name="profession">
<option value="" selected="selected">-any-</option>
<option value="Designer">Designer</option>
<option value="Engineer">Engineer</option>
</select>
<input type="submit" value="submit">
</form>
Now i want the query based on multiple selection
If "any-" is selected in all three drop downs it should fetch all table rows
If any two items selected i.e, location=india and profession=designer, then it should fetch only 1st and 7th row where both the select values are matching
Please help me with the php to fetch the results based on form select values
Here is my php to retrieve post values
<?php
mysql_connect("localhost","root","");
mysql_select_db("alldata");
if(isset($_POST['submit'])) {
$source=$_POST['source'];
$profession=$_POST['profession'];
$location=$_POST['location'];
}
?>
my php file now looks like
<?php
$conn = mysql_connect ("localhost", "root", "") or die ('I cannot connect to the database because: ' . mysql_error());
$selected = mysql_select_db ("alldata")
or die ("Could not select database because: " . mysql_error());
if(isset($_POST['submit'])) {
$source=$_POST['source'];
$profession=$_POST['profession'];
$location=$_POST['location'];
}
$where = '';
if(isset($location) && !empty($location)){
$where .= "location ='$location' AND ";
}
if(isset($profession) && !empty($profession)){
$where .= "profession ='$profession' AND ";
}
if(isset($source) && !empty($source)){
$where .= "source ='$source' AND ";
}
$where = substr($where, 0, (strlen($where) - 4));
$where = ($where != '') ? "WHERE $where":'';
$sql= "select * from data $where";
$result = mysql_query($sql,$conn)or die (mysql_error());
if (mysql_num_rows($result)==0){
echo "No Match Found";
}else{
while ($row = mysql_fetch_array($result)){
echo "" .$row['name']." " .$row['email']." ".$row["phone"]." ".$row["source"]." ".$row["profession"]." ".$row["location"]."<br>";
echo "<br>";
echo "---------------------------------------------------------------------"."<br>";
}
}
mysql_close();
?>
its fetching all the rows instead of filtering based on post values. Please help
I tried the below one. I am able to get the result by filtering values. But if there is any empty selection i need to skip that value from filtering. Here is my code
$sql = "select * from data
where location = '".$_POST['location']."'
AND profession = '". $_POST['profession'] ."'
AND source = '". $_POST['source'] ."'";
try below code
$where = '';
if(isset($location) && !empty($location)){
$where .= "location ='$location' AND ";
}
if(isset($profession) && !empty($profession)){
$where .= "profession ='$profession' AND ";
}
if(isset($source) && !empty($source)){
$where .= "source ='$source' AND ";
}
$where = substr($where, 0, (strlen($where) - 4));
$where = ($where != '') ? "WHERE $where":'';
$sql= "select * from tablename $where";
// get your real values from $_POST array here
$location = null; // i.e. "any"
$source = 'from x';
$profession = 'designer';
$filters = array(
'location' => $location,
'source' => $source,
'profession' => $profession,
// etc
);
$where = 'WHERE';
$sql = "SELECT * FROM tablename";
foreach ($filters as $field => $value) {
if($value) {
$sql .= " $where $field = '$value'";
$where = 'AND';
}
}
$sql .= ";";
echo $sql; // SELECT * FROM tablename WHERE source = 'from x' AND profession = 'designer';
exit;
<?php
if(isset($_POST['submit']))
{
mysql_connect("localhost","root","");
mysql_select_db("alldata");
$select='SELECT serial,name,email,phone,location,profession,source From <table_name> ';
$where =' Where 1 ';
if(isset($_POST['location']) && trim($_POST['location'])!='')
{
$where.=' and location= '.mysql_real_escape_string($_POST['location']);
}
if(isset($_POST['source']) && trim($_POST['source'])!='')
{
$where.=' and source= '.mysql_real_escape_string($_POST['source']);
}
if(isset($_POST['profession']) && trim($_POST['profession'])!='')
{
$where.=' and profession= '.mysql_real_escape_string($_POST['profession']);
}
$query=$select.$where;
$request=mysql_query($query) or die('query_error');
echo "<table border='1'>";
echo "<tr><td>serial</td><td>name</td><td>email</td><td>phone</td><td>location</td><td>profession</td><td>source</td></tr>";
while($result=mysql_fecth_array($request))
{
echo "<tr>";
echo "<td>".$result['serial']."</td>";
echo "<td>".$result['name']."</td>";
echo "<td>".$result['email']."</td>";
echo "<td>".$result['phone']."</td>";
echo "<td>".$result['location']."</td>";
echo "<td>".$result['profession']."</td>";
echo "<td>".$result['source']."</td>";
echo "</tr>";
}
echo "</table>";
}
?>
<form method="post" action="search.php">
<select name="location">
<option value="" selected="selected">-any-</option>
<option value="UK">UK</option>
<option value="India">India</option>
<option value="US">US</option>
</select>
<select name="source">
<option value="" selected="selected">-any-</option>
<option value="From X">From X</option>
<option value="From Y">From Y</option>
<option value="From Z">From Z</option>
</select>
<select name="profession">
<option value="" selected="selected">-any-</option>
<option value="Designer">Designer</option>
<option value="Engineer">Engineer</option>
</select>
<input type="submit" value="submit">
</form>