Sua consulta sql precisa agrupar suas condições corretamente
$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 ");
O que você estava fazendo é equivalente a algo assim no código:
if (status == 'found' && firstname like 'a')
{
return row;
}
else if (lastname like 'a')
{
return row;
}
Se você vir isso, pode ser um pouco mais claro, se a primeira condição falhar (a única que verifica se
status == 'found'
então ele pulará para a próxima condição (após a instrução OR) e apenas verificará se lastname
fósforos. Você precisará agrupar sua condição de instrução select para que ela a verifique corretamente:
...where status like 'found' and (firstname like '%$searchtext%' or lastname like '%$searchtext%') order by...
Nesse caso, agrupamos
firstname
e lastname
condições juntas (entre parênteses) para que toda a condição OR resulte em uma única resposta verdadeira/falsa, essa resposta é então aplicada ao status
verifique depois.