Regenerar una contraseña

Hola.

Estoy peleandome con un script que tengo para regenerar una contraseña por si el usuario la olvida, y no soy capaz de arreglarlo.

Me da error 500

Script:
include ("configuracion.php");
include ("funciones.php");

$error="";
$usuario=limpiar($_POST['usuario']);

if(empty($usuario) || !validar_nombre($usuario)){
$error.="<b>El Nombre Esta Vacio, Es Menor Ha 4 Caracteres O Contiene Espacios.</b><br>";
}

//conexion base de datos
if(!$conexion=mysql_connect($server, $db_user, $db_pass)){
echo "No se pudo conectar con mysql porque ".mysql_error();
exit;
}
//seleccionar base datos
if(!mysql_select_db($database)){
echo "No se pudo seleccionar la base de datos porque ".mysql_error();
exit;
}

//comprobar usuario en la BBDD
$check = "select * from $table where username = '".mysql_real_escape_string($usuario)."';";
$result=mysql_query($check);
while ($row=mysql_fetch_array($result)){
$username = $row['username'];
}


//Comparo username de bbdd con usuario 
if(comparar_cadena($username,$usuario)){
$error.="<b>Tu Antigua Contraseña No Coincide.</b><br>";		
}

if($error==""){				

//Creo e Inserto nuevo password en BBDD 
if(generar_contrasena());{
$error.="<b>El Nombre De Usuario No Existe.</b<br>";
}
$contrasenagenerada = md5($contrasena);

mysql_query("UPDATE $table SET password = '$contrasenagenerada'
WHERE username = '$username'");	

}else{
echo "No Ha Sido Posible Cambiar la contraseña, Pulse <a href='javascript:history.go(-1)'><b>Aqui</b></a> Para Corregir Los Siguientes Errores<br><br>";
echo "Ocurrieron Los Siguientes Errores:<br><br>".$error;
exit;
}

//selecionar tabla
$consulta=mysql_real_escape_string("select * from $table WHERE username='$username'");
$resultado=mysql_query($consulta) or die ("No se pudo seleccionar tabla porque ".mysql_error());
if($datos=mysql_fetch_array($resultado)){
$para=$datos['email'];
$titulo='Tu Contraseña';
$mensaje="Hola $username \n\n";
$mensaje.="Pedido De Recuperacion De Contraseña\n";
$mensaje.="La solicitud se hizo para volver a enviar su contraseña a esta dirección, si no has solicitado este pedido contraseña,
por favor informe al administrador del sitio web \n\n";
$mensaje.="Su contraseña es: ".$contrasena"\n";

if(!isset($SERVER_NAME)){$SERVER_NAME=$_SERVER['SERVER_NAME'];}
$uniq_id = md5(uniqid(time());
$cabeceras .= "MIME-Version: 1.0\r\n";
$cabeceras .= "Content-type: text/html; charset=iso-8859-1\r\n";
$cabeceras .= "Message-ID: <$uniq_id@$SERVER_NAME>\r\n";
$cabeceras .= "From: No Responder<[correo eliminado]>\r\n";
$cabeceras .= "To: $username<$para>\r\n";

if(mail($para,$titulo,$mensaje,$cabeceras)){
echo "Un Correo electrónico se ha enviado con éxito a su dirección del correo electrónico con su contraseña olvidada, por favor permita un tiempo al correo electrónico para llegar..<br><br><a href=\"identificarse.html\">Identificarse</a>";
echo "<b>IMPORTANTE: No Olvides Cambiar Tu Contraseña En Tu Perfil Cuando La Hayas Recibido</b>";
}else{
echo "Error al tratar de enviar tu contraseña, intenta otra vez.";
}
}

Función grnerar contraseña:
/*Generar contraseña aleatoria*/
function generar_contrasena($tam=7,$may=FALSE)
{
    
    //El tamaño por defecto es 7 para una longitud de 8,    
    //Tamaño Mínimo
    $min=7;
    //Tamaño Máximo
    $max=14;
    
    if($may === FALSE)
    {
        $cadena='0123456789abcdefghijklmnopqrstuvwxyz';
    }
    else
    {
        $cadena='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    }
    if(($tam >= $min)&&($tam <=$max))
    {
        //Generación aleatoria segun sea mayuscula o minuscula.
        for($i=0;$i<=$tam;$i++)
        {
            //Guardamos en un arreglo.
            $pila[]=$cadena{rand(0,25)};
        }
        //Desordenamos el arreglo.
        shuffle($pila);
        //Mostramos la contraseña  
        foreach($pila as $letra => $contrasena)
        {
            echo $contrasena;
        }
    }
    
    
}

La demas funciones no las pongo por que las estoy utilizando en otros scripts y me funcionan bien.

Alguien ve donde esta el error?.

Gracias

Un saludo
tienes un error en el if donde comparas if(generar_contrasena());{ el punto y como no va, despues la variable $contraseña no se de donde la sacas en teoria debe estar vacia pues no se le ha asignado ningun valor, tu funcion para general contraseñas no la retorna si no que la imprime asi que no podras almacenarla en ninguna variable hasta que modifiques la funcion para que la retorne y no la imprima.
Gracias

Pero debe de haber otro error por qu he untentado de forma directa sein generar contra seña y me sigue con el error 500, sin utilizar la funcion generar contraseña y dando un valor directo a contraseña, continua el error.

include ("configuracion.php");
include ("funciones.php");

$error="";
$usuario=limpiar($_POST['usuario']);

if(empty($usuario) || !validar_nombre($usuario)){
$error.="<b>El Nombre Esta Vacio, Es Menor Ha 4 Caracteres O Contiene Espacios.</b><br>";
}

//conexion base de datos
if(!$conexion=mysql_connect($server, $db_user, $db_pass)){
echo "No se pudo conectar con mysql porque ".mysql_error();
exit;
}
//seleccionar base datos
if(!mysql_select_db($database)){
echo "No se pudo seleccionar la base de datos porque ".mysql_error();
exit;
}

//comprobar usuario en la BBDD
$check = "select * from $table where username = '".mysql_real_escape_string($usuario)."';";
$result=mysql_query($check);
while ($row=mysql_fetch_array($result)){
$username = $row['username'];
}


//Comparo username de bbdd con usuario 
if(comparar_cadena($username,$usuario)){
$error.="<b>$usuario</b> El usuario no exixte en nuestra base de datos.<br>";		
}

if($error==""){				

//Creo e Inserto nuevo password en BBDD 
$contrasena = "tuwebliberal";
$contrasenagenerada = md5($contrasena);

mysql_query("UPDATE $table SET password = '$contrasenagenerada'
WHERE username = '$username'");	

}else{
echo "No Ha Sido Posible Cambiar La Contraseña, Pulse <a href='javascript:history.go(-1)'><b>Aqui</b></a> Para Corregir Los Siguientes Errores<br><br>";
echo "Ocurrieron Los Siguientes Errores:<br><br>".$error;
exit;
}

//selecionar tabla
$consulta=mysql_real_escape_string("select * from $table WHERE username='$username'");
$resultado=mysql_query($consulta) or die ("No se pudo seleccionar tabla porque ".mysql_error());
while($datos=mysql_fetch_array($resultado)){
$para=$datos['email'];
}
$titulo='Tu Contraseña';
$mensaje="Hola $username \n\n";
$mensaje.="Pedido De Recuperacion De Contraseña\n";
$mensaje.="La solicitud se hizo para volver a enviar su contraseña a esta dirección, si no has solicitado este pedido contraseña,
por favor informe al administrador del sitio web \n\n";
$mensaje.="Su contraseña es: ".$contrasena"\n";

if(!isset($SERVER_NAME)){$SERVER_NAME=$_SERVER['SERVER_NAME'];}
$uniq_id = md5(uniqid(time());
$cabeceras .= "MIME-Version: 1.0\r\n";
$cabeceras .= "Content-type: text/html; charset=iso-8859-1\r\n";
$cabeceras .= "Message-ID: <$uniq_id@$SERVER_NAME>\r\n";
$cabeceras .= "From: No Responder<[correo eliminado]>\r\n";
$cabeceras .= "To: $username<$para>\r\n";

if(mail($para,$titulo,$mensaje,$cabeceras)){
echo "Un Correo electrónico se ha enviado con éxito a su dirección del correo electrónico con su contraseña olvidada, por favor permita un tiempo al correo electrónico para llegar..<br><br><a href=\"identificarse.html\">Identificarse</a>";
echo "<b>IMPORTANTE: No Olvides Cambiar Tu Contraseña En Tu Perfil Cuando La Hayas Recibido</b>";
}else{
echo "Error al tratar de enviar tu contraseña, intenta otra vez.";
}

Y como puedo guardar el valor en la variable, en la función en vez de imprimirla?

Un saludo
quizas sea porque tienes un error en la linea $mensaje.="Su contraseña es: ".$contrasena"\n"; te hace falta un punto al final de la variable contrasena y antes de las "
Muchas gracias, pero no he sido capaz de arreglarlo, asi que me he apañado con el script que tenia anterior, es mas cutre pero me funciona.

Gracias de todas formas.

Un saludo