In your Recordset SQL statement you have:
WHERE p.enddate >= CURDATE() OR p.eventdate IS NULL ORDER BY
The OR in there is overriding any other filters you put on it. You have to use:
WHERE (p.enddate >= CURDATE() OR p.eventdate IS NULL) ORDER BY
That way it is kept separate from other filters added by your database search server behavior.