Foros del Web » Programando para Internet » PHP »

Problema con php (mysql)

Estas en el tema de Problema con php (mysql) en el foro de PHP en Foros del Web. Lo que quiero hacer es una pagina en la que se pudiera combiar la contraseña de una base de datos mysql. Lo que pasa es ...
  #1 (permalink)  
Antiguo 05/06/2011, 07:54
 
Fecha de Ingreso: mayo-2011
Mensajes: 8
Antigüedad: 12 años, 10 meses
Puntos: 0
Problema con php (mysql)

Lo que quiero hacer es una pagina en la que se pudiera combiar la contraseña de una base de datos mysql. Lo que pasa es que me indica como si no hubiese entrado bien el usuario y la contraseña antigua. Este es el codigo:
(Aclaración: password = pass. antigua , newpassword= nueva pass. a introducir, newpassword2= confirmación de la nueva pass.)
Código PHP:
<?php 
    
include ('conexion.php');
    if(isset(
$_POST['cambiar'])) {
    if(
$_POST['newpassword'] == $_POST['newpassword2']) {
        
$user=trim($_POST['username']);
        
$password=md5($_POST['password']); 
        
$new_password=md5($_POST['newpassword']); 
        
$resultsprintf("SELECT login,password FROM account WHERE login='$user' AND password='$password'");
        
$UserTrobat $result->num_rows;
        if(
$UserTrobat) {
            
$result2=$db->query("INSERT INTO account SET login= ('".$user."'), password= ('".$new_password."')");
            if (
$result2) {
                echo 
'La contraseña se ha cambiado correctamente!';
                }
            }    
        else{ echo 
'Has entrado una combinación usuario/contraseña incorrecta.';}
    } else {echo
'Procure introducir la misma contraseña en los dos campos.';}
    
    }
?>
Si alguien que vea el problema fuera tan amable de explicármelo, se lo agradecería.

Saludos.
  #2 (permalink)  
Antiguo 05/06/2011, 08:09
 
Fecha de Ingreso: agosto-2010
Ubicación: Tenerife
Mensajes: 893
Antigüedad: 13 años, 8 meses
Puntos: 202
Respuesta: Problema con php (mysql)

Entiende que la gente del foro no es adivina, no sabemos que datos introduces ni como tienes la conexión, ni los datos de tu tabla...

Pero queda clara una cosa:
Te está entrando si es como dices en este else
Código PHP:
        else{ echo 'Has entrado una combinación usuario/contraseña incorrecta.';} 
que viene de este if()
Código PHP:
$resultsprintf("SELECT login,password FROM account WHERE login='$user' AND password='$password'");
        
$UserTrobat $result->num_rows;
        if(
$UserTrobat) {
             
//aquí tu consulta   
        

por tanto haz un echo de $UserTrobat. Posiblemente esté vacía debido a que algo en la consulta esté mal.

Si este fuese tu problema comprueba las variables que concatenas en la consulta y la consulta en sí misma a ver si es correcta.

Un saludo.
__________________
Pensaba que internet era una gran biblioteca de sabiduría, hasta que comprendí que un libro no puede tener mil páginas llenas de faltas de ortografía... :(
  #3 (permalink)  
Antiguo 05/06/2011, 09:00
 
Fecha de Ingreso: mayo-2011
Mensajes: 8
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Problema con php (mysql)

IEKK, muchas gracias por responder, y si, como suponías tan tu como yo, la variable $UserTrobat está vacía, por tanto algo en la consulta está mal. El problema es que lo he revisado todo, y no me he equivocado en nada que sea nombres de tablas ni bases de datos. Lo he intentado hacer funcionar así pero pasa lo mismo:
Código PHP:
<?php 
    
include ('conexion.php');
    if(isset(
$_POST['cambiar'])&& $_POST['cambiar']== 'Cambiar contraseña') {
    if(
$_POST['newpassword'] == $_POST['newpassword2']) {
        
$user=mysql_real_escape_string($_POST['username']);
        
$password=mysql_real_escape_string($_POST['password']); 
        
$new_password=mysql_real_escape_string($_POST['newpassword']); 
        
$resultsprintf("SELECT login,password FROM account WHERE login='".$user."' AND password=PASSWORD('".$password."')"); //Aquí está lo que supuestamente está mal, pero que no encuentro, ya que los nombres están correctos.
        
$UserTrobat $result->num_rows;
        if(
$UserTrobat) {
            
$result2=$db->query("INSERT INTO account SET login= '".$user."', password= PASSWORD('".$new_password."')");
            if (
$result2) {
                echo 
'La contraseña se ha cambiado correctamente!';
                }
            }     
        else{ echo 
'Has entrado una combinación usuario/contraseña incorrecta.';} //Se me traba aquí, esté bien o no la combinación.
    
} else {echo'Procure introducir la misma contraseña en los dos campos.';}
    
    }
?>
Por lo que me hace pensar, que lo que está mal aquí no són los nombres, sinó la estructura en si.

Saludos
  #4 (permalink)  
Antiguo 05/06/2011, 09:15
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: Problema con php (mysql)

Hola,

Lo más extraño es que no te genere un error,

Código PHP:
<?php 
...
        
$resultsprintf("SELECT login,password FROM account WHERE login='".$user."' AND password=PASSWORD('".$password."')"); //Aquí está lo que supuestamente está mal, pero que no encuentro, ya que los nombres están correctos.
        // $db->query($result)...
        
$UserTrobat $result->num_rows;
...
?>
Consulta la documentación de la instrucción sprintf y mysql_query. En otras palabras, $result es de pseudo tipo String y no está haciendo la consulta y no es un objeto.

Saludos,
  #5 (permalink)  
Antiguo 07/06/2011, 07:19
 
Fecha de Ingreso: mayo-2011
Mensajes: 8
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Problema con php (mysql)

Culpa mia por meterme en cosas en las que no tengo experiencia. Muchas gracias por avisarme, podría haberme pasado dias pensando en qué fallaba.

Bueno, mas o menos ya lo he arreglado, lo que pasa es que ahora ha surgido un problemilla secundario, pero no por eso menos importante.

Resulta que cuando la intentas cambiar, si has introducido el usuario y la contraseña antigua bien, te la cambia y te lo enuncia con el echo. Pero, si la contraseña antigua está mal, no se cambia pero me sale el echo como si hubiera cambiado satisfactoriamente. Aquí el código:

Código PHP:
<?php 
    
include ('conexion.php');
    if(isset(
$_POST['cambiar'])&& $_POST['cambiar']== 'Cambiar contraseña') {
    if(
$_POST['newpassword'] == $_POST['newpassword2']) {
        
$username=trim($_POST['username']);
        
$password=$_POST['password'];
        
$new_password=$_POST['newpassword']; 
        
$result=$db->query("UPDATE account SET password = PASSWORD('$new_password') WHERE login = '".$username."' AND password=PASSWORD('".$password."')");
    
        if(
$result) {
            
                echo 
'La contraseña se ha cambiado correctamente!';
                }else{
'Combinación incorrecta';}
                 
        
    } else {echo
'Procure introducir la misma contraseña en los dos campos.';}
    
    }
?>
Lo que no entiendo es porqué $result devuelve un valor, aun no coincidiendo con los parámetros dados.
  #6 (permalink)  
Antiguo 07/06/2011, 07:26
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: Problema con php (mysql)

si te cambia con la vieja es que no la ha cambiado en la BD, eso tenlo por seguro...
mira haz esto en tu consulta mysql_query($sql) or die(mysql_error());

y dinos la salida
  #7 (permalink)  
Antiguo 07/06/2011, 08:00
 
Fecha de Ingreso: mayo-2011
Mensajes: 8
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Problema con php (mysql)

Cita:
si te cambia con la vieja es que no la ha cambiado en la BD, eso tenlo por seguro...
No acabo de entender exactamente a qué te refieres.

Cita:
mira haz esto en tu consulta mysql_query($sql) or die(mysql_error());
Lo he hecho y sigue haciendo lo mismo, no me da error.
  #8 (permalink)  
Antiguo 07/06/2011, 08:06
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: Problema con php (mysql)

lo que yo digo es que si te deja cambiar el pass con la contraseña vieja es que entonces no la ha cambiado realmente, pq de lo contrario no haría bien el where del update...., revisa en la bd a ver si la cambia, haz en echo a tu sql y pegalo en tu phpmyadmin y mira desde allí
  #9 (permalink)  
Antiguo 07/06/2011, 08:16
 
Fecha de Ingreso: mayo-2011
Mensajes: 8
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Problema con php (mysql)

Seguro que la cambia, no tengo la menor duda, ya que esa base de datos la uso para un servidor de juegos y estoy mirando en la pagina de inicio de sesión,cada vez, si entran o no las contraseñas.
  #10 (permalink)  
Antiguo 07/06/2011, 08:21
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: Problema con php (mysql)

entonces haz lo otro que te dije de correr la consulta mostrada con echo, en tu phpmyadmin a lo mejor alli te da más luz
  #11 (permalink)  
Antiguo 07/06/2011, 08:44
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: Problema con php (mysql)

me mandaste un mensaje al privado por lo de phpmyadmin, no tengas pena de no saberlo, nadie nace sabiendo, si preguntas por acá todos aprendemos....

http://es.wikipedia.org/wiki/PhpMyAdmin

todos los hosting lo traen, si tu hosing es local te lo instalas, si te instalaste todo tu servidor web desde un instalador de WAMP lo tienes en http://localhost/phpmyadmin
  #12 (permalink)  
Antiguo 07/06/2011, 19:42
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: Problema con php (mysql)

Hola,

Seguramente la consulta se realiza exitosamente, el problema es que es una función y devuelve un valor, y como me suena a CodeIgniter, seguramente te devuelve true o false dependiendo si se llevó a cabo o no se llevó a cabo exitosamente la consulta.

Código PHP:
<?php 
        $result
=$db->query("UPDATE account SET password = PASSWORD('$new_password') WHERE login = '".$username."' AND password=PASSWORD('".$password."')");
    
        if(
$result) {
            
                echo 
'La contraseña se ha cambiado correctamente!';
                }else{
'Combinación incorrecta';}
Ahora ... el problema es de interpretación de las consultas SQL, en las API de las bases de datos las consultas pueden efectuarse exitosamente aún cuando no modifiquen nada, es decir, aunque no se actualice nada devuelve 'true' puesto que no hubo error en no actualizar nada, porque no se encontró un registro coincidente aunque se realizó la acción.

En este caso creo que sería aconsejable hacer un select previo para averiguar si existe la contraseña y en caso positivo hacer el cambio.

Código PHP:
        $result=$db->query("SELECT COUNT(*) cuenta FROM account
WHERE login = '"
.$username."' AND password=PASSWORD('".$password."')");
        if (
$result->get('cuenta') == 1) {
          
// actualiza UPDATE
        
} else {
          
// la contraseña no coincide
        

Observa que $actualiza->get() me lo acabo de inventar, porque no tengo ni idea que es $result, pero seguramente de alguna forma tiene algún método para recuperar un campo, en este caso el campo 'cuenta'.

Saludos,

Etiquetas: mysql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:52.