primero me parece que esta query esta mal
Código PHP:
$sql="
SELECT
*
FROM
ESTADOS,
MUNICIPIOS,
COLONIAS
WHERE
ESTADOS.id='$estado'
AND
MUNICIPIOS.relacion='$municipio'
AND
COLONIAS.relacion='$colonia'";
deberias especificar bien como joinear las tablas, dependiendo de los nombres de campos que utilizes esto puede traerte datos erroneos.
ademas te da un idea de como es que se relacionan las tablas que aqui, no se ve.
lo que yo creo que te esta pasando es que el mysql debe estar tomando el campo "relacion" para jacer el join entonces esta buscando que en para las 3 tablas exista un registro donde ese campo valga lo mismo y como no lo encuetra te tira al "ERROR" por esta parte del codigo
Código PHP:
if(mysql_num_rows($result)>0){
...
}else $cuerpo="ERROR";
echo $cuerpo;
ahora... yo diria que esas tablas se realcionan asi:
la tabla estado es la master: despues para cada estado hay muchos municipios y para cada municipio hay muchas colonias con lo cual el join seria algo asi
Código:
SELECT * FROM ESTADOS
LEFT JOIN MUNICIPIOS ON ESTADOS.ID = MUNICIPIOS.RELACION
LEFT JOIN COLONIA ON MUNICIPIOS.ID = COLONIAS.RELACION
WHERE COLONIAS.ID = {$COLONIA}
mas o menos, si queres podes poner en el where el estado y el municipio pero seria redundante... dado que una colonia deberia pertenecer solo a un municipio y estado
buscalo por ahi el problema...
ahora un consejo... no le pongas "relacion" al nombre del campo por que despues no sabes que era... cuando vengas a mirar el codigo en 6 meses me contas... mas vale ponele id_[nombre_tabla_relacionada]
espero te sea de ayuda... saludos