Reputation: 1
I was wondering if someone could help me. The following code will produce all users where the type = bus but wont produce only the approved = 1. I would be greatful if someone could point out my mistake. The search query is tiggered by someone entering a word into a text box through a form, this part works fine, only users with the search word in there profile appear and only them with type=bus but approved = 1 seems to have no effect and returns all approved, I really hope someone can help.
$query = "select * from users where type='bus' and approved=1 and
name like \"%$trimmed%\"
or profile_words like \"%$trimmed%\"
or full_name like \"%$trimmed%\"
or tag_line like \"%$trimmed%\"
or referral like \"%$trimmed%\"
or profession like \"%$trimmed%\"
order by full_name";
Upvotes: 0
Views: 195
Reputation: 263893
Group your condition like this,
$query = "
select *
from users
where type='bus' and
approved = 1 and
(
name like \"%$trimmed%\" or
profile_words like \"%$trimmed%\" or
full_name like \"%$trimmed%\" or
tag_line like \"%$trimmed%\" or
referral like \"%$trimmed%\" or
profession like \"%$trimmed%\
)
order by full_name";
I have a suggestion for you, please use either PDO or MySQLI extension to avoid from SQL Injection.
Example of PDO,
<?php
$query = "
select *
from users
where type='bus' and
approved = 1 and
(
name like ? or
profile_words like ? or
full_name like ? or
tag_line like ? or
referral like ? or
profession like ?
)
order by full_name";
$name = '%' . $trimmed . '%';
$stmt = $dbh->prepare($query);
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $name);
$stmt->bindParam(3, $name);
$stmt->bindParam(4, $name);
$stmt->bindParam(5, $name);
$stmt->bindParam(6, $name);
$stmt->execute();
?>
Upvotes: 1
Reputation: 994
Bracket your where operators. Currently you are getting
where (type='bus' and approved=1)
or .... [all the other operators]
Upvotes: 0
Reputation: 15048
I think your part for approved is fine, but I think the problem may be in the starting of the OR
. Try putting brackets by separating the AND
and OR
statements like this:
$query = "select * from users where type='bus' and approved=1 and
( name like \"%$trimmed%\"
or profile_words like \"%$trimmed%\"
or full_name like \"%$trimmed%\"
or tag_line like \"%$trimmed%\"
or referral like \"%$trimmed%\"
or profession like \"%$trimmed%\" )
order by full_name";
Upvotes: 0
Reputation: 1213
$query = "select * from users where type='bus' and approved=1 and
(name like \"%$trimmed%\"
or profile_words like \"%$trimmed%\"
or full_name like \"%$trimmed%\"
or tag_line like \"%$trimmed%\"
or referral like \"%$trimmed%\"
or profession like \"%$trimmed%\")
order by full_name";
?
Upvotes: 0