Foros del Web » Programando para Internet » PHP »

Ayuda con esta sentencia

Estas en el tema de Ayuda con esta sentencia en el foro de PHP en Foros del Web. Hola estoy comenzando a trabajar con php y necesito que me digais si esta sentencia que he realizado esta bien hecha(el resultado que obtengo es ...

  #1 (permalink)  
Antiguo 20/08/2005, 03:43
 
Fecha de Ingreso: abril-2004
Mensajes: 107
Antigüedad: 20 años
Puntos: 0
Ayuda con esta sentencia

Hola estoy comenzando a trabajar con php y necesito que me digais si esta sentencia que he realizado esta bien hecha(el resultado que obtengo es el k kiero)

Os explico. Recibo los datos de un formulario y tengo que mirar ese registro y mirar si tiene el campo de validacio a 0 o 1.

El codigo es el siguiente:

include("conexion.php");
$nick=$_POST['usuario'];
$clave=$_POST['clave'];

$consulta= mysql_query("SELECT * FROM usuarios WHERE user='$nick' and clave='$clave'");

while($row = mysql_fetch_array($consulta))
{
if($row[5]=="0")
{
echo "hola";
}
else
{
echo "holaaaa";
}
}

Se haria de otra forma o esta es correcta.
  #2 (permalink)  
Antiguo 20/08/2005, 04:17
Avatar de Bytevamp  
Fecha de Ingreso: junio-2005
Ubicación: /var/www/
Mensajes: 789
Antigüedad: 18 años, 10 meses
Puntos: 7
hombre desde mi punto de vista es correcto, de echo es como lo suelo usar yo, asi que perfecto.

Y por cierto, bienvenido al apasionante mundo del PHP, que tantas alegrias y tantos dolores de cabeza nos trae(los dolores de cabeza se ven resarcidos en el momento que hayamos la resolucion del problema).

Saludos y suerte en esta nueva experiencia.
  #3 (permalink)  
Antiguo 20/08/2005, 04:21
 
Fecha de Ingreso: agosto-2005
Mensajes: 143
Antigüedad: 18 años, 8 meses
Puntos: 0
Cita:
Iniciado por Touch
Hola estoy comenzando a trabajar con php y necesito que me digais si esta sentencia que he realizado esta bien hecha(el resultado que obtengo es el k kiero)

Os explico. Recibo los datos de un formulario y tengo que mirar ese registro y mirar si tiene el campo de validacio a 0 o 1.

El codigo es el siguiente:

include("conexion.php");
$nick=$_POST['usuario'];
$clave=$_POST['clave'];

$consulta= mysql_query("SELECT * FROM usuarios WHERE user='$nick' and clave='$clave'");

while($row = mysql_fetch_array($consulta))
{
if($row[5]=="0")
{
echo "hola";
}
else
{
echo "holaaaa";
}
}

Se haria de otra forma o esta es correcta.
Si y no.
El funcionamiento es correcto(te funciona bien :)) pero la seguridad es nula.
Cita:
$nick=$_POST['usuario'];
$clave=$_POST['clave'];

$consulta= mysql_query("SELECT * FROM usuarios WHERE user='$nick' and clave='$clave'");
Tienes que pasarle alguna funcion como addslashes() y htmlentities() para espacar todos los caracteres como comillas y cosas de el estilo y para convertid a entidades HTML los caracteres posibles.

De lo contrario sería vulnerable a uuna inyección de codigo SQL.

Un ejemplo rapidito:
Código:
pagina.php?usuario='+OR+1=1+UNION+ALL+SELECT+clave,clave,clave,clave,clave+WHERE+usuario='admin'+/*
  #4 (permalink)  
Antiguo 20/08/2005, 04:22
 
Fecha de Ingreso: abril-2004
Mensajes: 107
Antigüedad: 20 años
Puntos: 0
No entiendo lo que me dices, una inyección de codigo SQL????
  #5 (permalink)  
Antiguo 20/08/2005, 04:25
 
Fecha de Ingreso: abril-2004
Mensajes: 107
Antigüedad: 20 años
Puntos: 0
Por cierto, ahora estoy intentando crear una cookie para recordar al usuario y lo ponog en el ultimo else, el siguiente codigo:

setcookie("user","hola",time()+3600);
y me da este error:
Warning: Cannot modify header information - headers already sent by (output started at c:\archivos de programa\easyphp1-8\www\forobilbao\conexion.php:14) in c:\archivos de programa\easyphp1-8\www\forobilbao\validar.php on line 27
Y no encuentro al solucion
  #6 (permalink)  
Antiguo 20/08/2005, 04:25
 
Fecha de Ingreso: agosto-2005
Mensajes: 143
Antigüedad: 18 años, 8 meses
Puntos: 0
Cita:
Iniciado por Touch
No entiendo lo que me dices, una inyección de codigo SQL????
¿Nunca has escuchado de inyecciones SQL a portales php-nuke por ejemplo? ¿o a foros phpBB?

Eso eso por no filtrar los datos que metes/sacas a la base de datos.

Cita:
$nick=htmlentities(addslashes($_POST['usuario']));
$clave=htmlentities(addslashes($_POST['clave']));
  #7 (permalink)  
Antiguo 20/08/2005, 04:27
 
Fecha de Ingreso: agosto-2005
Mensajes: 143
Antigüedad: 18 años, 8 meses
Puntos: 0
Cita:
Iniciado por Touch
Por cierto, ahora estoy intentando crear una cookie para recordar al usuario y lo ponog en el ultimo else, el siguiente codigo:

setcookie("user","hola",time()+3600);
y me da este error:
Warning: Cannot modify header information - headers already sent by (output started at c:\archivos de programa\easyphp1-8\www\forobilbao\conexion.php:14) in c:\archivos de programa\easyphp1-8\www\forobilbao\validar.php on line 27
Y no encuentro al solucion
Joder que desordenllevamos posteando :).

Eso es porque setcookie() no puedes usarla despues de enviar cabezeras al navegador. Tienes que colocar la cookie antes de escribir cualquier cosa en pantalla(HTML).
  #8 (permalink)  
Antiguo 20/08/2005, 04:36
 
Fecha de Ingreso: abril-2004
Mensajes: 107
Antigüedad: 20 años
Puntos: 0
Gracias por tus rapidas respuestas, y siento el desorde. MEA CULPA
Ya investigare lo de la inyecciones SQL pero ahora me esta matando la cookie, pq no tengo puesto nada de html. Me parece k me estoy liando...el unico codigo k tengo es el k ves arriba.
Donde tendria k crear la cookie?
  #9 (permalink)  
Antiguo 20/08/2005, 04:49
 
Fecha de Ingreso: agosto-2005
Mensajes: 143
Antigüedad: 18 años, 8 meses
Puntos: 0
Asegurate de no tener nada de HTML, incluso un simple espacio antes del script o te dará un warning.

También deverias comprobar con mysql_num_rows() si existe el usuario o no.
  #10 (permalink)  
Antiguo 20/08/2005, 04:53
 
Fecha de Ingreso: abril-2004
Mensajes: 107
Antigüedad: 20 años
Puntos: 0
Si tengo k crear la cookie antes del html, como introduzco los valores que quiero en al cookie???
este es el codigo:

<?
setcookie("nombre","Fabian Muller", time()+365);
?>
<html>
<head>
</head>
<body>
<?
include("conexion.php");
$nick=$_POST['usuario'];
$clave=$_POST['clave'];
$consulta= mysql_query("SELECT * FROM usuarios WHERE user='$nick' and clave='$clave'");
if(mysql_num_rows($consulta)=="0")
{?>
<script>
alert(No estas registrado en la BBDD);
</script>
<?}
while($row = mysql_fetch_array($consulta))
{
if($row[5]=="0")
{

}
else
{
//aqui deberia de crear la cookie y no arriba
}
}
?>
</body>
</html>
  #11 (permalink)  
Antiguo 20/08/2005, 04:55
 
Fecha de Ingreso: agosto-2005
Mensajes: 143
Antigüedad: 18 años, 8 meses
Puntos: 0
Cita:
Iniciado por Touch
Si tengo k crear la cookie antes del html, como introduzco los valores que quiero en al cookie???
este es el codigo:

<?
setcookie("nombre","Fabian Muller", time()+365);
?>
<html>
<head>
</head>
<body>
<?
include("conexion.php");
$nick=$_POST['usuario'];
$clave=$_POST['clave'];
$consulta= mysql_query("SELECT * FROM usuarios WHERE user='$nick' and clave='$clave'");
if(mysql_num_rows($consulta)=="0")
{?>
<script>
alert(No estas registrado en la BBDD);
</script>
<?}
while($row = mysql_fetch_array($consulta))
{
if($row[5]=="0")
{

}
else
{
//aqui deberia de crear la cookie y no arriba
}
}
?>
</body>
</html>
Pero hombre!!! estas metiendo HTML antes del script xDD.
Cita:
<html>
<head>
</head>
<body>
<?
include("conexion.php");
$nick=$_POST['usuario'];
$clave=$_POST['clave'];
Elimina
<html>
<head>
</head>
<body>
de tu script. En php no hace falta que lo coloques.
Después de eso pon setcookie() donde lo estabas poniendo.

Otra cosa...yo no usaria una alerta en javascript para informar de que no existe ese usuario... creo que es mejor un simple echo.

Además el mensaje va entre comillas xD.

P.D: Si pones los scripts que posteas entre las etiquetas CODE, o PHP en este caso, facilitas mucho su lectura.
  #12 (permalink)  
Antiguo 20/08/2005, 05:03
 
Fecha de Ingreso: abril-2004
Mensajes: 107
Antigüedad: 20 años
Puntos: 0
Siento ser tan ....
Pero que lo dejo asi he probado ya de todo asi k habra cosas k estasn mal como el alert de tanto borrar y escribir:
Código:
<?
include("conexion.php");
$nick=$_POST['usuario'];
$clave=$_POST['clave'];
$consulta= mysql_query("SELECT * FROM usuarios WHERE user='$nick' and clave='$clave'"); 
if(mysql_num_rows($consulta)=="0")
{?>
<script>
alert("No estas registrado en la BBDD");
</script>
<?}
while($row = mysql_fetch_array($consulta))
{
if($row[5]=="0")
{

}
else
{
//el setcookie lo creo aqui o arriba?????
y si lo creo arriba como le introduzo los datos que quiero????


}
}
?>
  #13 (permalink)  
Antiguo 20/08/2005, 05:25
 
Fecha de Ingreso: agosto-2005
Mensajes: 143
Antigüedad: 18 años, 8 meses
Puntos: 0
Prueba con esto:
Código PHP:
<?php
include_once("conexion.php");

$nick htmlentities(addslashes($_POST["usuario"]));
$clave htmlentities(addslashes($_POST["clave"]));

$consulta mysql_query("SELECT * FROM usuarios WHERE user='$nick' and clave='$clave'");
if(
mysql_num_rows($consulta) != 0)
{
    
setcookie("nombre"$nicktime()+365); //ten en cuenta que son segundos
    
setcookie("clave"$clavetime()+365); //repito: SEGUNDOS!! xD
    
echo 'Se ha colocado la cookie correctamente';
}else{
    echo 
'El usuario y/o contraseña es inválido';
}
?>
Recuerda usar las funciones que te he dicho antes cada vez que metas/saques datos de la base de datos.
De una forma general tu script tendrá algo de seguridad.

Saludos ;)
  #14 (permalink)  
Antiguo 20/08/2005, 05:29
 
Fecha de Ingreso: abril-2004
Mensajes: 107
Antigüedad: 20 años
Puntos: 0
Nada de nada.
Me da el siguiente error:

Código:
Warning: Cannot modify header information - headers already sent by (output started at c:\archivos de programa\easyphp1-8\www\forobilbao\conexion.php:14) in c:\archivos de programa\easyphp1-8\www\forobilbao\validar.php on line 10

Warning: Cannot modify header information - headers already sent by (output started at c:\archivos de programa\easyphp1-8\www\forobilbao\conexion.php:14) in c:\archivos de programa\easyphp1-8\www\forobilbao\validar.php on line 11
Se ha colocado la cookie correctamente
Gracias por tu ayuda
  #15 (permalink)  
Antiguo 20/08/2005, 05:30
 
Fecha de Ingreso: agosto-2005
Mensajes: 143
Antigüedad: 18 años, 8 meses
Puntos: 0
Eso es porque todavia tienes espacios o HTML antes del script.
  #16 (permalink)  
Antiguo 20/08/2005, 05:33
 
Fecha de Ingreso: abril-2004
Mensajes: 107
Antigüedad: 20 años
Puntos: 0
me parece que no tengo nada:
lo unico que tengo en la pagian es este codigo tal cual:

Código:
<?
include("conexion.php"); 
$nick = htmlentities(addslashes($_POST["usuario"])); 
$clave = htmlentities(addslashes($_POST["clave"])); 
$consulta = mysql_query("SELECT * FROM usuarios WHERE user='$nick' and clave='$clave'"); 
if(mysql_num_rows($consulta) != 0) 
{ 
setcookie("nombre", $nick, time()+365); //ten en cuenta que son segundos 
setcookie("clave", $clave, time()+365); //repito: SEGUNDOS!! xD 
echo 'Se ha colocado la cookie correctamente'; 
}
else
{ 
echo 'El usuario y/o contraseña es inválido'; 
} 
?>
y luego no hay nada más ni html ni scrip ni nada.
Buff de nuevo gracias
  #17 (permalink)  
Antiguo 20/08/2005, 05:34
 
Fecha de Ingreso: agosto-2005
Mensajes: 143
Antigüedad: 18 años, 8 meses
Puntos: 0
Crear un archivo nuevo y mete este código TAL Y COMO YO TE LO DOY!! xD
Código PHP:
<?php
$enviar 
$_POST["enviar"];
if(isset(
$enviar))
{
    include_once(
"conexion.php");

    
$nick htmlentities(addslashes($_POST["usuario"]));
    
$clave htmlentities(addslashes($_POST["clave"]));

    
$consulta mysql_query("SELECT * FROM usuarios WHERE user='$nick' and clave='$clave'");
    if(
mysql_num_rows($consulta) != 0)
    {
        
setcookie("nombre"$nicktime()+365); //ten en cuenta que son segundos
        
setcookie("clave"$clavetime()+365); //repito: SEGUNDOS!! xD
        
echo 'Se ha colocado la cookie correctamente';
        exit();
    }else{
        echo 
'El usuario y/o contraseña es inválido<br>';
    }
}
?>
<form method="post" action="<?=$PHP_SELF?>">
Usuario:<br>
<inpup type="text" name="usuario"><br>
Clave:<br>
<inpup type="password" name="clave"><br>
<input type="submit" name="enviar" value="Conectar">
</form>
No incluyas este archivo en ningún lado...simplemente entra en él y veras como puedes logearte sin problemas(salvo si cometí un error de sintaxis).

Prueba y me cuentas ;)
  #18 (permalink)  
Antiguo 20/08/2005, 05:38
 
Fecha de Ingreso: agosto-2005
Mensajes: 143
Antigüedad: 18 años, 8 meses
Puntos: 0
Despues de probar este script te salta algún error?¿

Llevo tiempo sin programar en php pero no creo que me haya afectado tanto xD
  #19 (permalink)  
Antiguo 20/08/2005, 05:40
 
Fecha de Ingreso: abril-2004
Mensajes: 107
Antigüedad: 20 años
Puntos: 0
me sale esto:

Undefined index: enviar in c:\archivos de programa\easyphp1-8\www\forobilbao\prueba.php on line 2
  #20 (permalink)  
Antiguo 20/08/2005, 05:41
 
Fecha de Ingreso: agosto-2005
Mensajes: 143
Antigüedad: 18 años, 8 meses
Puntos: 0
Ups...

Prueba reemplazando
Código PHP:
$enviar $_POST["enviar"];
if(isset(
$enviar)) 
por
Código PHP:
if(isset($_POST["enviar"])) 
P.D: I forgot postback ;)
  #21 (permalink)  
Antiguo 20/08/2005, 05:44
 
Fecha de Ingreso: abril-2004
Mensajes: 107
Antigüedad: 20 años
Puntos: 0
La primera pagina me sale bien pero al dar a conectar esto:

Código:
Forbidden
You don't have permission to access /forobilbao/<br /><b>Notice</b>: Undefined variable: PHP_SELF in <b>c:/archivos de programa/easyphp1-8/www/forobilbao/prueba.php</b> on line <b>20</b><br /> on this server.
  #22 (permalink)  
Antiguo 20/08/2005, 05:48
 
Fecha de Ingreso: agosto-2005
Mensajes: 143
Antigüedad: 18 años, 8 meses
Puntos: 0
Perdona...crea otra archivo salir.php
Código PHP:
<?php
setcookie
("nombre");
setcookie("clave");
?>
El errores de las cabeceras puede salirte porque estés intentando sobreescribir las cookies.
Primero elimina las cookies con salir.php y despues logeate en el otro archivo.
  #23 (permalink)  
Antiguo 20/08/2005, 05:49
 
Fecha de Ingreso: agosto-2005
Mensajes: 143
Antigüedad: 18 años, 8 meses
Puntos: 0
Joder, que server mas estricto tienes...te dice claramente que no tienes permisos.

En el formulario, cambia <?=$PHP_SELF?> por el nombre del archivo que lo contiene.

A ver si por fin damos en el clavo!!!
  #24 (permalink)  
Antiguo 20/08/2005, 05:50
 
Fecha de Ingreso: abril-2004
Mensajes: 107
Antigüedad: 20 años
Puntos: 0
Me sale el mismo error
  #25 (permalink)  
Antiguo 20/08/2005, 05:52
 
Fecha de Ingreso: agosto-2005
Mensajes: 143
Antigüedad: 18 años, 8 meses
Puntos: 0
Cita:
Forbidden
You don't have permission to access /forobilbao/
Tiene que tener permisos suficientes.
  #26 (permalink)  
Antiguo 20/08/2005, 05:54
 
Fecha de Ingreso: abril-2004
Mensajes: 107
Antigüedad: 20 años
Puntos: 0
Estoy trabajndo de forma local y ahora me sale este error

Código:
Warning: Cannot modify header information - headers already sent by (output started at c:\archivos de programa\easyphp1-8\www\forobilbao\conexion.php:14) in c:\archivos de programa\easyphp1-8\www\forobilbao\prueba.php on line 12

Warning: Cannot modify header information - headers already sent by (output started at c:\archivos de programa\easyphp1-8\www\forobilbao\conexion.php:14) in c:\archivos de programa\easyphp1-8\www\forobilbao\prueba.php on line 13
  #27 (permalink)  
Antiguo 20/08/2005, 05:55
 
Fecha de Ingreso: agosto-2005
Mensajes: 143
Antigüedad: 18 años, 8 meses
Puntos: 0
jajajaj
lo sabia.
Puedes poner el contenido, completo, de tu archivo conexion.php?

Queria creer que no, pero seguro que en ese archivo tienes HTML xDDDD!!!!
  #28 (permalink)  
Antiguo 20/08/2005, 06:01
 
Fecha de Ingreso: abril-2004
Mensajes: 107
Antigüedad: 20 años
Puntos: 0
Hay va:

Código:
<? 
//Conexion con la base 
$conn = mysql_connect("localhost","root",""); 
mysql_select_db("foro",$conn); 
?>
  #29 (permalink)  
Antiguo 20/08/2005, 06:07
 
Fecha de Ingreso: agosto-2005
Mensajes: 143
Antigüedad: 18 años, 8 meses
Puntos: 0
Joder, me estoy volviendo crazy!!!

La verdad, la única explicación que le encuentro es que tengas un espacio en el archivo de configuración(Mira bien al final del archivo xD)

No encuentro otro errore y ademas ese Warning que la cabecera no puede modificarse, que fue enviada.

Bueno, la verdad, me extraña esta cantidad de problemas.

Espero que sea eso...porque yo no doy mas de si.
  #30 (permalink)  
Antiguo 20/08/2005, 06:11
 
Fecha de Ingreso: abril-2004
Mensajes: 107
Antigüedad: 20 años
Puntos: 0
YA ESTA!!!!!!!!!
Joder gracias, muchisimas gracias, el error era al final del archivo de conexion, no tenia texto sino unos saltos de linea que me he dado cuenta con el dreamweaver colocando lo de las lineas y he visto que habia mas lineas que texto.

De verdad siento haberte dado esta mañana. Muchassssss gracias
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 12:58.