Problema con regenerar contraseña

Hola,

Tengo un problema para qeu el usuario pueda regenerar su contraseña en caso de olvido, hebia pensado en pedir dos campos y hacerlos coincidir con los de la base de datos, si son iguales dejarle modificar su contraseña.

Me pierdo en el codigo php apartir de comprobar los datos, creoq eu hasta ahi va mas o menos bien.

Alguien me puede orientar

Tengo el form

<table width="800" align="center">
  <tr>
    <td><form action="identificarse.php" method="post" onSubmit="return validate()">
  		<p><strong>Rellena los campos para regenerar tu contrase&ntilde;a </strong></p>
		Nombre Usuario
			<input type="text" name="r_usuario" size="20">		
  		<p>Apellidos : 
   		  <input type="text" name="apellidos" size="20">
   		 <br>
		Provincia: 
		<input type="text" name="provincia" size="20">
		<br>
		<input type="submit" value="Aceptar">
		| <a href="registro.html">Registre una nueva cuenta</a>
		</form>
	</td>
  </tr>
</table>

Y el codigo php:
<?php
ob_start();

include("configuracion.php"); 

// conectar con el servidor mysql 
$link = mysql_connect($server, $db_user, $db_pass) 
or die ("No se puede conectar con el servidor mysql porque ".mysql_error()); 

// seleccion base de datos
mysql_select_db($database) 
or die ("No se pudo conectar con la base de datos porque ".mysql_error());

//extraemos apellido
if (! $link = mysql_connect($server, $db_user, $db_pass)) {
			echo "No pudo conectare con mysql"; 
			exit; 
			}
			
		if (! mysql_select_db ($database, $link)) {
    		echo "No se PUDO selecionar la base de Datos" ;
    		exit;
			}
			
 		$sql = "select apellidos from $table WHERE username = '".mysql_real_escape_string($R_usuario)."';");
		$apellidos = mysql_query ( $sql , $link );

		if (! $apellidos ) {
   			echo "Error de MySQL: "; mysql_error () ;   		
			exit;
			}						
			
			mysql_free_result ( $apellidos ); 

//extraemos provincia
if (! $link = mysql_connect($server, $db_user, $db_pass)) {
			echo "No pudo conectare con mysql"; 
			exit; 
			}
			
		if (! mysql_select_db ($database, $link)) {
    		echo "No se PUDO selecionar la base de Datos" ;
    		exit;
			}
			
 		$sql = "select provincia from $table WHERE username  = '".mysql_real_escape_string($R_usuario)."';");
		$provincia = mysql_query ( $sql , $link );

		if (! $provincia ) {
   			echo "Error de MySQL: "; mysql_error () ;   		
			exit;
			}
						
			mysql_free_result ( $provincia );
			 
//recogemos datos del form
if(!empty($_POST['usuario'])){
$R_usuario = htmlspecialchars($_POST['r_usuario']);
$R_usuario = stripslashes($_POST['r_usuario']);
$R_usuario = strip_tags($R_usuario);
$R_usuario = htmlentities($R_usuario);}

if(!empty($_POST['R_apellidos'])){
$R_apellidos = htmlspecialchars($_POST['R_apellidos']);
$R_apellidos = stripslashes($_POST['R_apellidos']);
$R_apellidos = strip_tags($R_apellidos);
$R_apellidos = htmlentities($R_apellidos);}

if(!empty($_POST['R_provincia'])){
$R_provincia = htmlspecialchars($_POST['R_provincia']);
$R_provincia = stripslashes($_POST['R_provincia']);
$R_provincia = strip_tags($R_provincia);
$R_provincia = htmlentities($R_provincia);}

//Conmprobamos si los datos coinciden
if ($apellidos == $R_apellidos, $provincia == $R_provincia) {
	
	echo "
	<p> 
      <input name="pasword" type="password" value="<?php 
		include "configuracion.php";
		//conexion base de datos
		mysql_connect($server, $db_user, $db_pass) 
		or die ("No se pudo conectar con mysql porque ".mysql_error());
		//seleccionar base datos
		mysql_select_db($database)
		or die ("No se pudo seleccionar la base de datos porque ".mysql_error());
		//selecionar tabla
		$check = "select * from $table WHERE username = '$username'";
		$result = mysql_query($check)
		or die ("No se pudo seleccionar tabla porque ".mysql_error()); 

		   while ($qry = mysql_fetch_array($result)) { 
      		echo "$qry[password]"; 
   		} 
	?>" 
	  size="20"  />      
  </p> "
	<p>
      <input name="Submit" type="submit" id="Submit"  value="Enviar" />
    </p>
ob_end_flush();

?>

Gracias

Un saludo
Veo tu codigo y me mareo, por asi decirlo, no lo entiendo del todo, pero a lo que observo y en lo que he podido ayudarte te puedo decir lo siguiente:

1) Es mala Idea usar regenarar una contraseña como lo estas haciendo por las siguientes razones:
a) Cualquier persona que conosca al usuario podria cambiar la contraseña respondiendo esas preguntas tan simples.
b) Cualquier usuario que tenga adceso al perfil de la persona igualmente podria cambiar la contrasea, pues generalmente esos datos se muestran en un perfil.
c) Puede Ser incluso vulnerable a un ataque por fuerza bruta ya que las respuestas a las preguntas serian bastante comunes. solo seria intentar he intentar.

2) Repites mucho codigo, trata de reducir tu codigo al minimo y optimizarlo.
Observa tu codido, y recicla lo que puedas, por ejemplo create una funcion para limpiar tus variables que es lo que mas repites, al igual que tu conexion a la base de datos, por ejemplo:
<?php
/*////////////////////////////////////////////
// Codigos Y Funciones Utilies En PHP       //
// Sitio Web: http://www.serverdns.us       //
// Soporte Tecnico: [correo eliminado]    //
////////////////////////////////////////////*/

function sincodigo($cadena){
if(!empty($cadena)){
$cadena=stripslashes($cadena));
$cadena=stript_tags($cadena);
$cadena=htmlentities($cadena);
$cadena=htmlspecialchars($cadena);
return $cadena;
}else{
return false;
}
}
?>

Asi con la funcion solo tendras que incluir el archivo donde la guardes y llamarla como haces con todas las demas por ejemplo:
$R_usuario=sincodigo($_POST['r_usuario']);

Ademas de que usas variables en tus consultas que aun no as declaro, por ejemplo $R_usuario la usas al pricipio en las consultas a la base de datos, y no la declaras y limpias hasta antes de comparar las respuestas.

Tambien Liberas y/o destruyes por asi decirlo las variables que vas ha comparar : mysql_free_result ( $apellidos ) mysql_free_result ( $provincia ) y cuando haces la comparacion estas variables ya no existen o estan vacias. Procura llevar un orden en tu programacion.
Ok.

Entonces de momento voy a dejar lo de regenerar la contraseña, seran mejoras que ire incluyendo segun lo vaya consiguiendo.

Si se les olvid ue me envien un correo con el nombre de usuario y lo borro de la base de datos y asi se pueden volver a registrar con el mismo nombre.

Muchas gracias por la aclaracion, intentare resumir lo de las variables e intentare organizarlo mejor, aunque no e snada facil para mi, por ue no tengo mucha idea como habras comprobado, lo poco que se lo he aprendido, probando de miles de maneras, y alfinal teminas por aprender algo.

De lo que me as comentado de los campos que pueden estar en su perfil, eso campos los he borrado del perfil por eso mismo. Pero aun asi tienes razon cualquiera que conoza al usuario lo podria hacer.

Gracias de nuevo

Un saludo
la mejor solucion es con una pregunta secreta quizas, aunque yo me iria mejor por un procedimiento mas o menos asi:

1) el usuario hace una peticion de regenerar su contraseña.
2) el sistema recive la peticion de regeneral la contraseña y le manda un correo con un codigo de verificacion para continuar.
3) el usuario resive el correo con el codigo de verificacion y/o un link para activar el cambio de contraseña o en su defecta cancelarlo.
4) el usuario ingresa el codigo y/o llega mediente el link y si le manda una contraseña temporal o se le muestra un formulario para cambiar la contraseña.

creo que asi seria mas seguro el cambio o regeneracion de una contraseña.