Contraseñas

Hola.

Tengo un problema para eu los usuarios modifiquen su contraseña, no consigo que me funcione.

El Script que utilizo es este y no encuentro el errror

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

$username = $_COOKIE['loggedin'];
if (!isset($_COOKIE['loggedin'])) die("Usted no esta identificado, <a href=identificarse.html>click aqui</a> para identificarse.");

$error="";
$oldpass=limpiar($_POST['oldpass']);//campo contraseña vieja

$newpass=limpiar($_POST['newpass']);//campo contraseña nueva
$newpass2=limpiar($_POST['newpass2']);//campo repetir contraseña nueva

/*validar variables */
if(empty($oldpass) || !validar_password($oldpass)){
$error.="<b>Tu Antigua Contraseña Esta Vacia O Tiene Menos De 6 Caracteres.</b><br>";
}
$oldpass = md5($oldpass);

if(empty($newpass) || !validar_newpass($newpass)){
$error.="<b>Tu Nueva Contraseña Esta Vacia O Tiene Menos De 6 Caracteres.</b><br>";
}
$newpass = md5($newpass);

if(empty($newpass2) || !validar_newpass($newpass2)){
$error.="<b>Tu Nueva Contraseña Esta Vacia O Tiene Menos De 6 Caracteres.</b><br>";
}
$newpass2 = md5($newpass2);

if($error==""){

/*Conexion */
		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;
			}
			
/*Recupero password de la base de datos */
		$sql = "select password from $tabla WHERE username ='".mysql_real_escape_string($username)."';";
		$resultado = mysql_query ( $sql , $link );

		if (! $resultado ) {
   			echo "Error de MySQL: "; mysql_error () ;   		
			exit;
			}
			while ( $row  = mysql_fetch_assoc ( $resultado )) 
			
			mysql_free_result ( $resultado );
			
/*Comparo password de bbdd con oldpass */
if(empty($resultado,$oldpass) || !comparar_cadena($resultado,$oldpass)){
$error.="<b>Tu Antigua Contraseña No coincide.</b><br>";
}

/*Comparo password newpass con newpass2 y defino variable */
if(empty($newpass,$newpass2) || !comparar_cadena($newpass,$newpass2)){
$error.="<b>Tu Nueva Contraseña No coincide.</b><br>";
}
$newpassword = '$newpass';		
$newpassword = md5($newpassword);

/*Inserto nuevo password */
mysql_query("UPDATE $tabla SET password = '$newpassword'
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;
}

Funcion comparar variables
/*Comprobar cadena*/
function comparar_cadena($cadena1,$cadena2){
if ($cadena1==$cadena2){
return true;
}else{
return false;
}
}

Gracias

Un saludo
/*Recupero password de la base de datos */
$sql = "select * from $tabla WHERE password = '$username'";

Ahí hay un error porque estas comparando la contraseña guardada (password) con el nombre de usuario, siendo que debes comparar usuario con usuario. Piensa que la contraseña guardada es 123456 y el nombre de usuario ingresado ($username) es 'amigomax', entonces comparas ambas y no habrá resultado. Esa sentencia debería ser: SELECT password FROM $tabla WHERE nombre_usuario = $username; (también puede ser SELECT *).

Saludos.
gracias ya he modificado esse error y lo he cambiado en el codigo, pero me continua dando error el explorador.

No se puede mostrar la pagina.

error de programción

Un saludo
¿El error es 404: página no encontrada? Si no es ese, entonces podrías mostrar el error exacto que aparece.
He echo algunos cambios pero me continua con el mismo error.

<?php

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

$username = $_COOKIE['loggedin'];
if (!isset($_COOKIE['loggedin'])) die("Usted no esta identificado, <a href=identificarse.html>click aqui</a> para identificarse.");

$error="";
$oldpass=limpiar($_POST['oldpass']);//campo contraseña vieja

$newpass=limpiar($_POST['newpass']);//campo contraseña nueva
$newpass2=limpiar($_POST['newpass2']);//campo repetir contraseña nueva

/*validar variables */
if(empty($oldpass) || !validar_password($oldpass)){
$error.="<b>Tu Antigua Contraseña Esta Vacia O Tiene Menos De 6 Caracteres.</b><br>";
}
$oldpass = md5($oldpass);

if(empty($newpass) || !validar_newpass($newpass)){
$error.="<b>Tu Nueva Contraseña Esta Vacia O Tiene Menos De 6 Caracteres.</b><br>";
}

if(empty($newpass2) || !validar_newpass($newpass2)){
$error.="<b>Tu Nueva Contraseña Esta Vacia O Tiene Menos De 6 Caracteres.</b><br>";
}

if($error==""){

/*Conexion */
		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;
			}
			
/*Recupero password de la base de datos */
$check = "select * from $table where username = '".mysql_real_escape_string($username)."';"; 
$result=mysql_query($check);
while ($row=mysql_fetch_array($result)){
$password = $row['password'];
}			
/*Comparo password de bbdd con oldpass */
if(empty($password,$oldpass) || !comparar_cadena($password,$oldpass)){
$error.="<b>Tu Antigua Contraseña No coincide.</b><br>";
}

/*Comparo password newpass con newpass2 y defino variable */
if(empty($newpass,$newpass2) || !comparar_cadena($newpass,$newpass2)){
$error.="<b>Tu Nueva Contraseña No coincide.</b><br>";
}
$newpassword = "$newpass";
$newpassword = md5($newpassword);

/*Inserto nuevo password */
mysql_query("UPDATE $tabla SET password = '$newpassword'
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;
}

?>

La funcion de comparar variables es:

/*Comprobar cadena*/
function comparar_cadena($cadena1,$cadena2){
if ($cadena1==$cadena2){
return true;
}else{
return false;
}
}

Gracias
Modifique un poco el primer script, lo cual debería solucionar algún problema:

<?php
  // El archivo configuracion.php DEBE estar en la misma carpeta que este.
  include_once("configuracion.php");
  // El archivo links.php DEBE estar una carpeta más arriba (o atrás) que este archivo 
  include_once("../links.php");
  // El archivo funciones.php DEBE estar en la misma carpeta que este archivo.
  include_once("funciones.php");

  $username = $_COOKIE['loggedin'];
  if (!isset($_COOKIE['loggedin'])) {
    print "Usted no esta identificado, <a href=identificarse.html>click aqui</a> para identificarse.";
    // En el archivo original, si no se había identificado,
    // el script seguía ejecutándose, mientras que ahora termina
    // la ejecución si no se cumple la condición (con return;).
    return;
  }

  $error = "";
  $oldpass = limpiar($_POST['oldpass']);//campo contraseña vieja

  $newpass = limpiar($_POST['newpass']);//campo contraseña nueva
  $newpass2 = limpiar($_POST['newpass2']);//campo repetir contraseña nueva
  
  /*validar variables */
  if(empty($oldpass) || !validar_password($oldpass)) {
    $error .= "<b>Tu Antigua Contraseña Esta Vacia O Tiene Menos De 6 Caracteres.</b><br>";
  }
  else {
    $oldpass = md5($oldpass);
    if(empty($newpass) || !validar_newpass($newpass)){
      $error .= "<b>Tu Nueva Contraseña Esta Vacia O Tiene Menos De 6 Caracteres.</b><br>";
    }
    else {
      if(empty($newpass2) || !validar_newpass($newpass2)){
	$error .= "<b>Tu Nueva Contraseña Esta Vacia O Tiene Menos De 6 Caracteres.</b><br>";
      }
    }
  }
	
  if($error == "") {
    /*Conexion */
    if (! $link = mysql_connect($server, $db_user, $db_pass)) {
      echo "No pudo conectare con mysql"; 
      return; 
    }
            
    if (! mysql_select_db ($database, $link)) {
      echo "No se Pudo selecionar la base de Datos" ;
      return;
    }
            
    /*Recupero password de la base de datos */
    $check = "SELECT * FROM $table WHERE username = '" .mysql_real_escape_string($username). "'"; 
    $result = mysql_query($check);
    $array = mysql_fetch_array($result);
    $password = $array['password'];
    
    /*Comparo password de bbdd con oldpass */
    if(empty($password, $oldpass) || !comparar_cadena($password,$oldpass)){
      $error .= "<b>Tu Antigua Contraseña No coincide.</b><br>";
    }

    /*Comparo password newpass con newpass2 y defino variable */
    if(empty($newpass, $newpass2) || !comparar_cadena($newpass,$newpass2)){
      $error.="<b>Tu Nueva Contraseña No coincide.</b><br>";
    }
    else {
      $newpassword = $newpass;
      $newpassword = md5($newpassword);

      /*Inserto nuevo password */
      $result = mysql_query("UPDATE $tabla SET password = '$newpassword' WHERE username = '$username'");
      if(mysql_affected_rows($result) > 0)
        echo 'Actualización de la contraseña realizada';
      else
        $error .= '<b>Error al actualizar la contraseña: ' .mysql_error($link). '</b><br />';
    }
  }
  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;
     return;
  }
?>

compararcadena.php
<?php
  // Es algo más simple que la anterior, pero hace exactamente lo mismo:
  function comparar_cadena($s1, $s2) {
    return $s1 === $s2;
  }
?>

Prueba con eso y avísame como te va.
Hola.

Llevo toda la mañana y he dado con el error, era el "empty" en la comparacin de las variables no lo admite. lo he cambiado par ahora no me compara las variables, lo he dejado asi:

<?php
include ("configuracion.php");
include ("funciones.php");
include ("../links.php");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
</head>

<body>
<?php
$username = $_COOKIE['loggedin'];
if (!isset($_COOKIE['loggedin'])) die("Usted no esta identificado, <a href=identificarse.html>click aqui</a> para identificarse.");
?>

<?php
$error="";
$oldpass=limpiar($_POST['oldpass']);//campo contraseña vieja

$newpass=limpiar($_POST['newpass']);//campo contraseña nueva
$newpass2=limpiar($_POST['newpass2']);//campo repetir contraseña nueva

/*validar variables */
if(empty($oldpass) || !validar_password($oldpass)){
$error.="<b>Tu Antigua Contraseña Esta Vacia O Tiene Menos De 6 Caracteres.</b><br>";
}
$oldpass = md5($oldpass);

if(empty($newpass) || !validar_newpass($newpass)){
$error.="<b>Tu Nueva Contraseña Esta Vacia O Tiene Menos De 6 Caracteres.</b><br>";
}

if(empty($newpass2) || !validar_newpass($newpass2)){
$error.="<b>Tu Nueva Contraseña Esta Vacia O Tiene Menos De 6 Caracteres.</b><br>";
}

if($error==""){

/*Conexion */
		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;
			}
			
/*Recupero password de la base de datos */
		$check = "select * from $table where username = '".mysql_real_escape_string($username)."';"; 
		$result=mysql_query($check);
		while ($row=mysql_fetch_array($result)){
		$password = $row['password'];
		}
		
/*Comparo password de bbdd con oldpass */
		if(!comparar_cadena($password,$oldpass)){
		$error.="<b>Tu Antigua Contraseña No coincide.</b><br>";		
		}
		
/*Comparo password newpass con newpass2 y defino variable */
		if(! $newpassword = comparar_cadena($newpass == $newpass2)){
		$error.="<b>Tu Nueva Contraseña No coincide.</b><br>";
		}		
		$newpassword = md5($newpassword);
		
/*Inserto nuevo password */
mysql_query("UPDATE $table SET password = '$newpassword'
WHERE username = '$username'");							
echo "Ha sido modificada su contraseña <b>$username</b> con exito.<br /> <a href='perfil.php'>Click aqui</a> para volver a su perfil.<br /> Ir a la pagina <a href='usuarios/$username/index.php'>privada</a> de $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;
}
?>
</body>
</html>

Y la funcion comparar:

/*Comprobar cadena*/
function comparar_cadena($cadena1, $cadena2){
if (strcmp($cadena1 == $cadena2)){
return true;
}else{
return false;
}
}

Gracias.

Un saludo
Escribe lo siguiente al comienzo del archivo: error_reporting(E_ALL); antes de los include y después del primer <?php. Esto mostrará todos los errores que hay en script. También deberías utilizar Firebug para Firefox (o las herramientas para desarrolladores en los demás navegadore - tecla F12 generalmente), el cual es un plugin/addon sumamente útil para este navegador.

Postea los resultados (si es que hay) y será más fácil ayudarte :D.

Saludos.
He puesto el error_reporting al comienzo como me as dicho no da errores continua el script hasta el final pero no compara las variables


if(! comparar_cadena($password,$oldpass)){
$error.="<b>Tu Antigua Contraseña No Coincide.</b><br>";		
}

Función
function comparar_cadena($cadena1,$cadena2){
if(strcmp($cadena1==$cadena2)){
return true;
}else{
return false;
}
}

Me esta volviendo majara y seguro que es una tonteria.

Gracias

Un saludo
jejejeje, hay algo que no había visto XD. En la función para comparar, donde dice if(strcmp($cadena1 == $cadena2) debe ser así: if(strcmp($cadena1, $cadena2). La diferencia esta en que estas pasando parámetros a una función (strcmp()) y estos deben ir separador por comas (,) y no hacer una comparación (strcmp($cadena1 == $cadena2)).

Ahora sí (al fin) debería funcionar XD. La parte de corregir los errores es simpre la más difícil, sobre todo cuando los proyectos son de muchas líneas de código.

Suerte y saludos.
Lo he probado y sigue sin funcionarme, no me compara las variables , si me modifica el registro, pero sin compararlas,
Ejemplo:
"Contraseña BBDD"= angeles
"oldpass"=josefa
"newpass"=123456
"newpass2"=987654
Modifica el registro y guarda
"newpass"=123456

un saludo
Ya lo consegui, muchas gracias, era la negacion del if del script, gracias.

Ya funciona.

Ahora voy a pelearme con regenerar una contraseña aleatoria y enviarla por mail, por si la olvida algun usuario.

Muchas gracias de nuevo.

Un saludo
Ok, que bueno, felicitaciones por haberlo resuelto.

Suerte con lo que sigue, saludos.