Twoje zapytanie sql musi odpowiednio pogrupować warunki
$query=mysql_query("select * from persons where status like 'found' and (firstname like '%$searchtext%' or lastname like '%$searchtext%') order by date desc LIMIT $start,$per_page ");
To, co robiłeś, jest równoważne z czymś takim w kodzie:
if (status == 'found' && firstname like 'a')
{
return row;
}
else if (lastname like 'a')
{
return row;
}
Jeśli to widzisz, może to być nieco jaśniejsze, jeśli pierwszy warunek nie powiedzie się (jedyny, który sprawdza, czy status == 'found'
wtedy przejdzie do następnego warunku (po instrukcji OR) i sprawdzi tylko, czy lastname
mecze.
Musisz pogrupować warunek instrukcji select, aby sprawdzał go poprawnie:
...where status like 'found' and (firstname like '%$searchtext%' or lastname like '%$searchtext%') order by...
W tym przypadku grupujemy oba firstname
i lastname
warunki razem (w nawiasach), tak że cały warunek OR daje w wyniku pojedynczą odpowiedź prawda/fałsz, ta odpowiedź jest następnie stosowana do status
sprawdź po.