Váš dotaz SQL musí správně seskupit vaše podmínky
$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 jste dělali, je ekvivalentní něčemu takovému v kódu:
if (status == 'found' && firstname like 'a')
{
return row;
}
else if (lastname like 'a')
{
return row;
}
Pokud toto vidíte, může to být o něco jasnější, pokud selže první podmínka (jediná kontroluje, zda status == 'found'
poté přeskočí na další podmínku (za příkazem OR) a pouze zkontroluje, zda lastname
odpovídá.
Budete muset seskupit podmínku příkazu select, aby ji správně zkontroloval:
...where status like 'found' and (firstname like '%$searchtext%' or lastname like '%$searchtext%') order by...
V tomto případě seskupujeme obě firstname
a lastname
podmínky dohromady (v závorkách), takže celá podmínka OR vede k jediné odpovědi typu pravda/nepravda, tato odpověď se pak použije na status
zkontrolovat po.