No tiene mucha complicación, lo que tienes ahí son reglas para la consulta por URL. La URL camuflajeada es procesada mediante un código regedix (en este caso es ([a-zA-Z0-9]*) para luego la información ser enviada a el archivo que va a procesarlo todo ¿Qué significa ésto? Que todos los caracteres que estén entre el alfabeto sean minúsculas o mayúsculas o tengan un número, sin importar la longitud será una consulta válida y se enviarán al archivo... Entendiendo esto sabemos que cualquier consulta que sea recibida así será camuflada como tal y en realidad la información se enviará a otro archivo, en este caso perfil.php?id=$1 (el $1 es una variable donde se almacena el dato consultado en la URL mediante la regla regedix).
Una vez entendido todo esto podemos intuir que el funcionamiento que deseas hasta el momento es correcto, entonces ¿Qué pasa? Lo que sucede es que al momento de que el archivo lee la información enviada puede procesarla erróneamente o no como se desea, si lo vemos de tal manera entonces suponemos que el algoritmo falla en algo, pero ¿Dónde trabajamos la información? En primera instancia en la consulta que se hace a la base de datos, vamos a revisarla y... ¡Eureka (vaga traducción de 'Lo he descubierto' del griego)! Nuestra consulta no trabaja la información como nosotros deseamos, así que la editamos para que lo haga...
$perfilados =mysql_query("SELECT * FROM usuarios WHERE id=".$id_perfil);
Si analizamos la consulta nos dice que seleccione toda la información de la tabla usuarios donde la columna id sea igual a la variable recibida por el método GET, pero nosotros queremos que también busque por nombre de usuario (he intuido que el nombre de usuario se almacena en la columna usuario, no sé si esté en lo correcto), así que le decimos a la consulta que también busque por el nombre de usuario con el operador lógico OR/||...
$perfilados =mysql_query("SELECT * FROM usuarios WHERE id= ".$id_perfil." OR usuario = '".$id_perfil."');
Observaciones:
- El motor MySQL está oficialmente considerado obsoleto, por lo tanto te recomendaría empezar a utilizar el nuevo motor MySQLi.
- Tu sistema en las consultas es vulnerable, te recomiendo consultas sobre inyecciones SQL y cómo evitarlas en PHP.
- Intenta tener un mejor manejo en la estructura de acuerdo al MVC.
Consulta 'protegida' contra inyecciones sql
$perfilados =mysql_query("SELECT * FROM usuarios WHERE id= ".mysql_real_escape_string($id_perfil)." OR usuario = '".mysql_real_escape_string($id_perfil)."');
Espero haberte ayudado o solucionado tu duda.
Saludos y suerte.