Su consulta sql necesita agrupar sus condiciones correctamente
$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 ");
Lo que estabas haciendo es equivalente a algo como esto en código:
if (status == 'found' && firstname like 'a')
{
return row;
}
else if (lastname like 'a')
{
return row;
}
Si ve esto, puede ser un poco más claro, si falla la primera condición (la única que verifica si status == 'found'
luego saltará a la siguiente condición (después de la declaración OR) y solo verificará si lastname
coincidencias.
Deberá agrupar su condición de declaración de selección para que la verifique correctamente:
...where status like 'found' and (firstname like '%$searchtext%' or lastname like '%$searchtext%') order by...
En este caso, agrupamos tanto firstname
y lastname
condiciones juntas (entre paréntesis) para que toda la condición OR resulte en una sola respuesta de verdadero/falso, esa respuesta se aplica al status
comprobar después.