En principio tienes un error en la forma de uso de la propagación de datos por el URL. Si tu dato contiene "espacios" o caracteres acentuados, ñ .. etc DEBES codificar ese URL:
Código PHP:
<?
header("Location: error.php?mensaje=".urlencode("Usuario o password incorrecto"));
Otro problema es usar:
echo(mysql_num_rows($busca));
y despues una llamada a un header() (sea del tipo que sea) .. NO puedes emitir ningún tipo de "salida" al navegador (Cliente) antes de enviar una cabecera. Por eso mismo usas ya tu redireccionamiento y le envias una "frase" para que la página a la que redireccionas muestre ese mensaje de error.
Otro detalle (al margen pero para tener en cuenta) .. ¿ Por qué no usas referencias al mensaje de error? ..sería mucho mejor administrable tu sistema y menos problemas para pasar datos por el URL. Me refiero a:
header ("Location: error.php?msg=1");
y en error.php proceso esa variable y la uso como indice de un array para mostrar mis frases de error.
Código PHP:
<?
if (!emtpy($_GET['msg']){
$msg=$_GET['msg'];
$mensajes[1]="Blablabal";
$mensajes[2]="Blablabal bla blablalabal";
echo $mensajes[$msg];
}
Pero si muestras el mensaje de error textual que obtienes sería lo ideal para ver que sucede. El error dice el problema.
Un saludo,