Foros del Web » Programando para Internet » PHP »

Problemas con WHERE username='$username'

Estas en el tema de Problemas con WHERE username='$username' en el foro de PHP en Foros del Web. mi problema es el siguiente mi tabla cuando las personas se registran pasa lo siguiente Código PHP: $connect  =  mysql_connect ( "xxx" , "xxx" , ...
  #1 (permalink)  
Antiguo 29/06/2011, 18:53
 
Fecha de Ingreso: junio-2011
Mensajes: 19
Antigüedad: 12 años, 9 meses
Puntos: 0
Pregunta Problemas con WHERE username='$username'

mi problema es el siguiente
mi tabla

cuando las personas se registran
pasa lo siguiente
Código PHP:
$connect mysql_connect("xxx","xxx","xxx");
                    
mysql_select_db("sistema");
                    
$queryreg mysql_query ("
                    INSERT INTO xxx VALUES ('','$nombre','$apellido','$username','$contraseña','','$sexo','')
"
); 
en la pagina REGISTRO.PHP
ahora cuando ingresas
pasa esto
Código PHP:
$query mysql_query("SELECT * FROM xxx WHERE username = '$username'");
            
$numrows mysql_num_rows($query);
            if(
$numrows==1)
            {
                while (
$row mysql_fetch_assoc($query))
                {
                    
$dbusername $row['username'];
                    
$dbcontraseña $row['contraseña'];
                    
$nombre $row['nombre'];
                    
$apellido $row['apellido'];
                    
$sexo $row['sexo'];
                    }
                
                        if (
$username==$dbusername&&$contraseña==$dbcontraseña)
                        {                        
                        
$_SESSION['sexo']=$sexo;
                        
                        
$_SESSION['nombre']=$nombre;
                        
                        
$_SESSION['apellido']=$apellido;
                        
                        
$_SESSION['usuario']=$username;
                        
                        include 
'index.php';
                        }
                        else
                        echo 
"<script>window.location='error3.php'</script>"
esto pasa en la pagina LOGIN.PHP
ahora cuando
en otra pagina hago lo siguiente con un formulario
Código HTML:
<B><h3>::SUBIR IMAGEN::</H3></B>
<form action='subir.php' method='POST' enctype='multipart/form-data' id='cambiarimagenperfil'>
<font face='Autumn' size='4'>archivo:</font>
<input type='file' name='foto'><input type='submit' Value='Cambiar imagen' id='boton'>
</form> 
ahora en la pagina subir.php
hago lo siguiente
Código PHP:
<?php
session_start
();
$nameimagen $_FILES['foto']['name'];
$tmpimagen $_FILES['foto']['tmp_name'];
$extimagen pathinfo($nameimagen);
$ext = array("png","gif","jpg");
$urlnueva "imagenes_perfil/".$nameimagen;
$username $_POST['username'];



if(
is_uploaded_file($tmpimagen)){
    if(
array_search($extimagen['extension'],$ext)){
     
copy($tmpimagen,$urlnueva);
        
$connect mysql_connect("localhost","root","123");
        
mysql_select_db("sistema");
        
$queryreg mysql_query ("
        INSERT INTO registro VALUES ('','','','','','','','$urlnueva') WHERE username='$username'
        "
);
        echo 
"<script>window.location='casa.php'</script>";
    }
    else 
    echo 
"No se a podido subir su imagen <b>solo formatos </b><u>jpg</u>, <u>png</u> o <u>gif</u>";
}
else 
echo 
"Elija una imagen";
?>
no funciona porque porque esta parte del codigo
Código PHP:
INSERT INTO registro VALUES ('','','','','','','','$urlnueva'WHERE username='$username' 
NO la reconoce no se porque
que puedo hacer??
que pongo en WHERE o que hago en login
para que me pueda incluir el url en la columna foto de la persona que esta logueada
y si esta pregunta no va en esta area donde va
espero que me puedan ayudar porque cuando hago esto
la columna "foto"
en la tabla queda vacio como si no hubiera pasado nada
porfavor encerio ayudenme
  #2 (permalink)  
Antiguo 29/06/2011, 19:00
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 14 años, 11 meses
Puntos: 322
Respuesta: Problemas con WHERE username='$username'

Esto debe ir en el foro de SQL.
Ahora, sabes insertar registros? Al parecer no...
Te mostraré, la sintáxis básica para insertar es algo así:
Código MySQL:
Ver original
  1. INSERT INTO tutabla('campo1', 'campo2', 'campo3') VALUES ('valor_campo1', 'valor_campo2', 'valor_campo2')

1- Tienes que especificar los campos de la tabla después del nombre
2- Cómo quieres insertar un registro poniendo una condición!?
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #3 (permalink)  
Antiguo 29/06/2011, 19:05
Avatar de skiper0125  
Fecha de Ingreso: octubre-2010
Ubicación: $this->Mexico('Toluca');
Mensajes: 1.127
Antigüedad: 13 años, 6 meses
Puntos: 511
Respuesta: Problemas con WHERE username='$username'

Por q no usas un update
__________________
Recuerda que estamos aquí para orientarte, y no para hacer tu trabajo.
Si mi aporte fue de ayuda, recuerda que agradecer no cuesta nada +1

Skiper0125

Última edición por skiper0125; 29/06/2011 a las 19:12
  #4 (permalink)  
Antiguo 30/06/2011, 01:11
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 9 meses
Puntos: 165
Respuesta: Problemas con WHERE username='$username'

Lo que te falta es una relación en tus tablas para que la tabla donde haces el insert tenga el id de usuario.

Además tienes bastantes cosas a mejorar.. cuando haces login puedes hacer la condición con el password...

Un saludo!
  #5 (permalink)  
Antiguo 30/06/2011, 01:49
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problemas con WHERE username='$username'

Creo que esta muy bien pensado como haces el login, buscar solo el usuario, si lo encuentras, comparar contraseña y de ahi permitir o no el acceso.

Ahora, el problema, como bien apunta skiper0125 es que debes usar UPDATE y no INSERT, de hecho en INSERT no puedes usar WHERE.

La consulta seria mas o menos asi:
Código SQL:
Ver original
  1. UPDATE registro SET url = '$urlnueva' WHERE username = '$username'

Para saber si hay algun error al ejecutar la consulta, siempre agrega al final:
$consulta = mysql_query(/* aqui tu consulta */) or die('Error: ' . mysql_error());


Solo como aclaracion respecto al comentario de Sourcegeek, conozco 3 formas para hacer el INSERT:

Código SQL:
Ver original
  1. -- Lista de campos y lista de valores
  2. INSERT INTO tabla (campo1, campo2, campo3) VALUES (valor1, valor2, valor3);
  3.  
  4. -- Lista de valores, solo funciona cuando incluyes un valor para cada campo de la tabla
  5. INSERT INTO tabla VALUES (valor1, valor2, valor3)
  6.  
  7. -- Usando SET
  8. INSERT INTO tabla SET campo1 = valor1, campo2 = valor2, campo3 = valor3

Definitivamente prefiero SET ya que en las otras dos formas es mas facil que se te escape algun campo o valor, aunque ahora me gusta mas PDO.
__________________
- León, Guanajuato
- GV-Foto
  #6 (permalink)  
Antiguo 30/06/2011, 01:55
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 9 meses
Puntos: 165
Respuesta: Problemas con WHERE username='$username'

Cita:
Iniciado por Triby Ver Mensaje
Creo que esta muy bien pensado como haces el login, buscar solo el usuario, si lo encuentras, comparar contraseña y de ahi permitir o no el acceso.
No es mejor comparar directamente en la consulta SQL?? es más rápido, consume menos memoria.. No depende del lenguaje..

Un saludo!
  #7 (permalink)  
Antiguo 30/06/2011, 02:03
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problemas con WHERE username='$username'

Si, es mas rapido, pero menos efectivo, sobre todo si tienes tus tablas con un juego de caracteres con sufijo _ci (case insensitive) donde comparar "miktrv" con "MikTrv" devuelve verdadero.

Entonces:
1- Consultas por nombre de usuario
2- Si se obtuvo un registro comparas el nombre de usuario y contraseña recibidos de POST con lo obtenido de la BD
__________________
- León, Guanajuato
- GV-Foto
  #8 (permalink)  
Antiguo 30/06/2011, 02:09
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 9 meses
Puntos: 165
Respuesta: Problemas con WHERE username='$username'

Pero... cuando guardas la contraseña, la guardas encriptada.. y la encriptación mantiene CI, por lo tanto.. es mucho mejor que tener que hacer un select, declarar variables, comparar... en definitiva.. es mucho más rápido.. menos memoria, no depende del lenguage de programación..


Un saludo!
  #9 (permalink)  
Antiguo 30/06/2011, 02:19
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problemas con WHERE username='$username'

Solo haces una consulta, ya sea que incluyas nombre de usuario y contraseña o solo el nombre de usuario. Si los datos son correctos o no, si hay un registro que coincide o no, de todas formas solo se hizo esa consulta.

Tal vez sea mucho (?) mas rapido agregar la contraseña en el filtro WHERE que comparar los valores del formulario con lo leido de la base de datos, prefiero perder algunos milisegundos agregando un poco de seguridad con un par de comparaciones dentro de un mismo if.
__________________
- León, Guanajuato
- GV-Foto
  #10 (permalink)  
Antiguo 30/06/2011, 02:22
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 9 meses
Puntos: 165
Respuesta: Problemas con WHERE username='$username'

Pero haces una consulta que te devuelve lo que necesitas, no creo que sea más seguro comparar directamente dentro de la consulta a fuera de ella, lo que tiene que estar seguro es la manera en que realizas la consulta. Otra cosa es que tu consulta no sea segura.. pero si lo es, no tiene porque ser más seguro hacer la comparación fuera de ella, usando más recursos de los necesarios..

Un saludo!
  #11 (permalink)  
Antiguo 30/06/2011, 02:39
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problemas con WHERE username='$username'

Podrias ser mas especifico respecto a los recursos? Cuanto consumiria en tiempo, memoria y CPU lo siguiente?

Código PHP:
Ver original
  1. if($_POST['username'] !== $row['username'] || md5($_POST['password']) !== $row['password']) {
  2.     die('Nombre de usuario o contraseña invalidos.');
  3. }

Hace tanto tiempo que comparo asi la contraseña que no me habia detenido a pensar que los metodos de encriptacion actuales no mezclan mayusculas y minusculas, de ahi que no habria tanto problema por incluirla en la consulta; tengo tarea para analizar!

Sin embargo:

Cita:
Simple comparison operations (>=, >, =, <, <=, sorting, and grouping) are based on each character's “sort value.” Characters with the same sort value are treated as the same character. For example, if “e” and “é” have the same sort value in a given collation, they compare as equal.

http://dev.mysql.com/doc/refman/5.0/...nsitivity.html
Si el nombre de usuario en la base de datos en "Admin" y la tabla (campo) es _ci, obtendras registro cuando se ingresen cosas como "Ádmín", "admIn", etc.
__________________
- León, Guanajuato
- GV-Foto
  #12 (permalink)  
Antiguo 30/06/2011, 02:43
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 9 meses
Puntos: 165
Respuesta: Problemas con WHERE username='$username'

Más específico, no es necesario saber el tiempo exacto ni la memoria exacta para saber que consume más. Simplemente tengo en cuenta el hecho de que consume más cuando no es necesario, es más, aunque consumiera lo mismo, que no es el caso, creo que no es necesario.

Te dejo un ejemplo:

Código PHP:
Ver original
  1. echo sha1('Admin') . '</br>';
  2.         echo sha1('admin') . '</br>';
  3.         echo sha1('Ádmin') . '</br>';

Devuelve:

Código HTML:
Ver original
  1. 4e7afebcfbae000b22c7c85e5560f89a2a0280b4
  2. d033e22ae348aeb5660fc2140aec35850c4da997
  3. 3ec16152f374a163b74e59abac255e8c1ad2ff7a

Un saludo!
  #13 (permalink)  
Antiguo 30/06/2011, 02:51
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 9 meses
Puntos: 165
Respuesta: Problemas con WHERE username='$username'

No havía visto el apartado donde comentas lo del nombre de usuario. Respecto a ese punto creo que un sistema de usuarios bien diseñado no debería permitir tener dos usuarios en el sistema con una única diferencia de CASE SENSITIVE, por lo tanto ese problema no existiria. De todas formas como comentario, creo que es mejor usar cuentas de correo en lugar de nicknames.

Un saludo!
  #14 (permalink)  
Antiguo 30/06/2011, 02:59
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problemas con WHERE username='$username'

Cierto, de hecho no debe haber tal similitud entre nombres de usuario y el problema no reside tanto ahi, sino en que los atacantes tienden a utilizar combinaciones de nombres+contraseñas que si te podrian generar algun riesgo.

En cuanto a usar nicknames o cuentas de correo, depende del proyecto, me han pedido en varias ocasiones poder crear dos o mas usuarios con un mismo email.
__________________
- León, Guanajuato
- GV-Foto
  #15 (permalink)  
Antiguo 30/06/2011, 03:01
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 9 meses
Puntos: 165
Respuesta: Problemas con WHERE username='$username'

Cita:
Iniciado por Triby Ver Mensaje
En cuanto a usar nicknames o cuentas de correo, depende del proyecto, me han pedido en varias ocasiones poder crear dos o mas usuarios con un mismo email.
Si si, es solo un gusto personal, evidentemente depende de cada proyecto, cliente etc, el tema estaba en la manera de hacer login.

Un saludo!

Etiquetas: mysql, tabla
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 19:40.