Según el código que expones .. pese que validas el método (GET) y el tipo (con tus expresiones regulares) de dato (numerico en tu caso) ... si yo ingreso un valor de un "vcard" (variable en $_GET) que no exista en tu BBDD .. según el código que propones .. "reventará" dicha ejecución con un bonito mensaje de error que (lo más probable, depende de configuración de reporte de errores que uses) me desvele información sobre rutas y nombres de tus scripts.
En resumen, .. debes "ver" cuantos registros te arroja tu consulta SQL antes de pretender acceder a su resultado.
Si tu "anidas" tanto las funciones que usas (sobre todo de acceso a BBDD) tipo:
Código PHP:
$myvcard = mysql_fetch_assoc(mysql_query("SELECT * FROM wp_directorio WHERE dir_id = '$ID_dir'"));
Así no puedes controlar estos "eventos" que te comento. Debes hacer validaciones tipo:
Código PHP:
$resultado=mysql_query("SELECT * FROM wp_directorio WHERE dir_id = '$ID_dir'") or die ("Error en la consulta");
if (mysql_num_rows($resultado) == 1){
$myvcard = mysql_fetch_assoc($resultado);
// etc tu código ...
} else {
die ("No existe el ID seleccionado .. no metas manoo al URL");
}
No está de más que "ocultes" (sólo cuando tengas en "producción" este código) los posibles mensajes de error que PHP dará si fallan las funciones de conexión o ejecución de consultas. Esto lo puedes manejar a nivel general en el script con: error_reporting() .. o bien en forma particular para alguna función de PHP con un @ delante (eso ocultará sus posibles mensajes de error que dé PHP y lo gestionas con el tuyo personalizado).
Un saludo,