Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] PHP OO No entiendo porque no me lo coge

Estas en el tema de No entiendo porque no me lo coge en el foro de PHP en Foros del Web. Muy buenas, estoy haciendo un login que compruebe tu user, tu pw a tu db. Si son correctos te logueas. Pero antes tiene que pasar ...
  #1 (permalink)  
Antiguo 13/04/2014, 09:33
 
Fecha de Ingreso: marzo-2014
Mensajes: 168
Antigüedad: 10 años, 1 mes
Puntos: 2
Pregunta No entiendo porque no me lo coge

Muy buenas, estoy haciendo un login que compruebe tu user, tu pw a tu db. Si son correctos te logueas. Pero antes tiene que pasar por comprobar si la activación es "1". Si lo es entonces te logueas. Hice unas cuantas pruevas y lo que no me coge es la activación:

login.php:
Código PHP:
<?php
session_start
();
require_once(
'./config/funciones.php');
conectar('a''a''a''a');

include(
"mantenimiento.php"); 

//Variables 
$username strip_tags($_POST['username']); 
$password strip_tags(sha1($_POST['password'])); 
$activado strip_tags($_POST['activado']);  

$query mysql_query('SELECT * FROM users WHERE  
user="'
.mysql_real_escape_string($username).'", 
pass="'
.mysql_real_escape_string($password).'" 
AND activado="'
.mysql_real_escape_string($activado).'"'); 

//Correcte fins aqui 

if($existe mysql_fetch_object($query)) 

  if(
$existe["activado"] != 1) { 
    echo 
'Primero activa tu cuenta entrando a tu correo'
}else{ 
    
$_SESSION['logged'] = 'yes'
    
$_SESSION['username'] = $username
    echo 
'<script>window.location="ofserker.php"</script>'

}else{ 
    echo 
'El usuario y/o pass son incorrectos.';     

?>
Atentamente y con ganas de respuestas:
-OfSerker
  #2 (permalink)  
Antiguo 13/04/2014, 09:43
 
Fecha de Ingreso: abril-2014
Ubicación: Canarias!
Mensajes: 150
Antigüedad: 10 años
Puntos: 10
Respuesta: No entiendo porque no me lo coge

Código PHP:
<?php
if($existe mysql_fetch_object($query)) 

  if(
$existe["activado"] != 1) { 
    echo 
'Primero activa tu cuenta entrando a tu correo'
}
Deberia ser

Código PHP:
<?php
if($existe mysql_fetch_object($query)) 

  if(
$existe->activado != 1) { 
    echo 
'Primero activa tu cuenta entrando a tu correo'
}
Ya que estas diciendo que $existe debe convertirse en un objeto. Si quieres que se convierte en un array deberias usar mysql_fetch_assoc

otra cosa, por favor, intenta usar librerias mas nuevas como mysqli, no sigan usando librerias obsoletas.
Otra mas, ya que solo te esperas 1 unico resultado de la consulta mysql, se aconseja poner "limit 1" al final como mirooptimización
__________________
Pautas php:
No usar libreria mysql, usa mysqli; Separar siempre los controladores de la vista; Procedual es feo, ama los objetos

Última edición por Qazser; 13/04/2014 a las 09:50
  #3 (permalink)  
Antiguo 13/04/2014, 09:52
 
Fecha de Ingreso: marzo-2014
Mensajes: 168
Antigüedad: 10 años, 1 mes
Puntos: 2
Respuesta: No entiendo porque no me lo coge

Muchas gracias por contestar :'D

Mira, me sigue saliendo el mismo error. No lo entiendo xd.

Bueno, aqui va la foto:



Atentamente, OfSerker
  #4 (permalink)  
Antiguo 13/04/2014, 09:56
 
Fecha de Ingreso: abril-2014
Ubicación: Canarias!
Mensajes: 150
Antigüedad: 10 años
Puntos: 10
Respuesta: No entiendo porque no me lo coge

Dice que el resultado de la consulta no es un argumento esperado, siempre que te sale eso, tu Query tiene un error

cambia esto
Código PHP:
$query mysql_query('SELECT * FROM users WHERE  
user="'
.mysql_real_escape_string($username).'", 
pass="'
.mysql_real_escape_string($password).'" 
AND activado="'
.mysql_real_escape_string($activado).'"'); 
a esto
Código PHP:
$query mysql_query('SELECT * FROM users WHERE  
user="'
.mysql_real_escape_string($username).'", 
pass="'
.mysql_real_escape_string($password).'" 
AND activado="'
.mysql_real_escape_string($activado).'"') or die(mysql_error()); 
Ahora, enves de avisarte que tienes mal la consulta, te debe aparecer el error mysql, con el que podrás corregir la query

EDIT: Ah coño, miraaa esto
Código PHP:
$query mysql_query('SELECT * FROM users WHERE  
user="'
.mysql_real_escape_string($username).'", 
pass="'
.mysql_real_escape_string($password).'" 
AND activado="'
.mysql_real_escape_string($activado).'"'); 
Cambialo a esto
Código PHP:
$query mysql_query('SELECT * FROM users WHERE  
user="'
.mysql_real_escape_string($username).'"
AND pass="'
.mysql_real_escape_string($password).'" 
AND activado="'
.mysql_real_escape_string($activado).'"'); 
Tenias un error en la consulta mysql, poniendo una coma enves de un AND, aun así te recomiendo que para que tu mismo lo veas, pongas ahora en la query lo que te puse, veas que efectivamente te sale un error mysql, y luego, muy importante, vuelvas a quitar el "or die..." porque un error mysql no tiene porque ser visible a cara al publico
__________________
Pautas php:
No usar libreria mysql, usa mysqli; Separar siempre los controladores de la vista; Procedual es feo, ama los objetos
  #5 (permalink)  
Antiguo 13/04/2014, 10:22
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: No entiendo porque no me lo coge

OfSerker: ¿Este problema de sintaxis no lo habíamos tratado ya en este post: http://www.forosdelweb.com/f18/no-ve.../#post4589304?
No puedes separar las condiciones de un WHERE con comas. Eso no existe en ningún DBMS. Ninguno.
Por favor, revisa los temas de sintaxis de SQL antes de proseguir, porque estás repidiendo los mismos fallos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 13/04/2014, 10:44
 
Fecha de Ingreso: marzo-2014
Mensajes: 168
Antigüedad: 10 años, 1 mes
Puntos: 2
Pregunta Respuesta: No entiendo porque no me lo coge

Me salta este error:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' pass="ca50c0bb2a83d26d956d317893ac98168e3d12bb", activado=""' at line 2

Porfavor ayudame.

Atentamente, OfSerker

Editado: Si, este es el problema de ese POST. Pero ya no me ayudó más.
  #7 (permalink)  
Antiguo 13/04/2014, 10:50
 
Fecha de Ingreso: abril-2014
Ubicación: Canarias!
Mensajes: 150
Antigüedad: 10 años
Puntos: 10
Respuesta: No entiendo porque no me lo coge

Código PHP:
$query mysql_query('SELECT * FROM users WHERE  
user="'
.mysql_real_escape_string($username).'", 
pass="'
.mysql_real_escape_string($password).'" 
AND activado="'
.mysql_real_escape_string($activado).'"'); 
Cambia el código de arriba por este

Código PHP:
$query mysql_query("SELECT * FROM users WHERE  
user='"
.mysql_real_escape_string($username)."' 
AND pass='"
.mysql_real_escape_string($password)."' 
AND activado='"
.mysql_real_escape_string($activado)."'"); 
__________________
Pautas php:
No usar libreria mysql, usa mysqli; Separar siempre los controladores de la vista; Procedual es feo, ama los objetos
  #8 (permalink)  
Antiguo 13/04/2014, 11:36
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: No entiendo porque no me lo coge

Cita:
Iniciado por OfSerker Ver Mensaje
Editado: Si, este es el problema de ese POST. Pero ya no me ayudó más.
Está prohibido en las PDU de FDW para un mismo forista abrir dos threads por el mismo tema o problema.
Deberías haber continuado el tema en ese thread.

Por otro lado, y ate dije sobre los errores de distaxis que comentes, y en este nuevo thread estas mostrando que no lo corregiste.
¿No quedó claro que estabas escribiendo mal la query? ¿Hubo alguna parte de esas explicaciones que resultara dificil de comprender?


Finalmente, si me remito a lo que te plantee en esa ocasión, tu me contestaste esto:
Cita:
Iniciado por OfSerker Ver Mensaje
Vale, ahora lo entiendo todo...
La variable $activado selecciona del panel de login si esta activado pero como no hay un campo para eso, no lo selecciona y me salta el error:

'Error al ingresar los datos. Al menos un dato no se ingreso en el formulario.' (Ya que falta el dato activado que como no hay un campo no lo selecciona y dice que un dato no se ingreso).

Me gustaría que me ayudarás ha hacerlo. Se tendria que hacer un:

Código PHP:
$activado SELECT FROM users WHERE activado ""
(Codigo rápido).

Si no se hace asi dime como puedo cambiar esta variable y su contenido.

Atentamente, OfSerker
Yo ya te había dicho ý demostrado que tenias un fallo a nivel de los parametros que entraban por $_POST, te tocaba a ti verificar por qué no llegaban, pero no veo que lo hayas hecho.

Si me remito al último mensaje de este thread, dices recibir este mensaje de error:
Cita:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' pass="ca50c0bb2a83d26d956d317893ac98168e3d12bb", activado=""' at line 2
con lo que es obvio que no te importa lo que te digo de sintaxis, y ni siquiera lees lo que el mismo @Qazser te está diciendo... porque persistes en usar un codigo mal escrito, del que ya te hemos dicho varias veces.
Resulta un poco frustrante darte consejos y ver que no los aplicas.

¿Podrías al menos incorporar lo que se te sugiere:
1) Corrige esa espantosa sintaxis del SQL, que ya de remarcamos esta mal escrita.
2) Verifica por qué ese valor no está llegando.

Luego veremos el resto.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 13/04/2014, 11:54
 
Fecha de Ingreso: marzo-2014
Mensajes: 168
Antigüedad: 10 años, 1 mes
Puntos: 2
Pregunta Respuesta: No entiendo porque no me lo coge

Vale, haber, lo que falla es el parámetro "activación" no se como sacarlo. Lo tengo que seleccionar de la bd. Pero pongo el método $_POST no se porque.

La varibale:
Código PHP:
$activado strip_tags($_POST['activado']); 
Esta mal, ya que no recoge nada. En canvio el user y pw si que recogen (recogen lo que hayas puesto).

¿Lo tengo que seleccionar de la db aparte? ¿O que hago?

Atentamente, OfSerker
  #10 (permalink)  
Antiguo 13/04/2014, 12:00
 
Fecha de Ingreso: abril-2014
Ubicación: Canarias!
Mensajes: 150
Antigüedad: 10 años
Puntos: 10
Respuesta: No entiendo porque no me lo coge

Como dijo @gnzsoloyo. Si no recibe nada, en tu formulario html no estás enviandolo bien, debes ir ahí y buscar el error.
__________________
Pautas php:
No usar libreria mysql, usa mysqli; Separar siempre los controladores de la vista; Procedual es feo, ama los objetos
  #11 (permalink)  
Antiguo 13/04/2014, 12:05
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: No entiendo porque no me lo coge

Cita:
Iniciado por OfSerker Ver Mensaje
Código PHP:
$activado strip_tags($_POST['activado']); 
Esta mal, ya que no recoge nada. En canvio el user y pw si que recogen (recogen lo que hayas puesto).

Simplificando, si no devuelve nada, sino lo obtienes en esa línea, es porque el dato no existe.
Postea el código completo del formulario que envía eso.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 13/04/2014, 12:49
 
Fecha de Ingreso: marzo-2014
Mensajes: 168
Antigüedad: 10 años, 1 mes
Puntos: 2
Respuesta: No entiendo porque no me lo coge

Página web en que tengo el proyecto:
[URL="http://www.ofserker.netai.net"]http://www.ofserker.netai.net[/URL]

login.html:
Código HTML:
<?php
require_once('./config/funciones.php');
conectar('a', 'a', 'a', 

'a');

include("mantenimiento.php"); 

?>
<!DOCTYPE html>
<!--[if lt IE 7 ]> <html lang="en" class="no-js ie6 lt8"> <![endif]-->
<!--[if IE 7 ]> <html lang="en" class="no-js ie7 lt8"> <![endif]-->
<!--[if IE 8 ]> <html lang="en" class="no-js ie8 lt8"> <![endif]-->
<!--[if IE 9 ]> <html lang="en" class="no-js ie9"> <![endif]-->
<!--[if (gt IE 9)|!(IE)]><!--> <html lang="en" class="no-js"> <!--<![endif]-->
<head>
<form action="login.php" method="POST" />
        <meta charset="UTF-8" />
        <title>OfSerker Web Page</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
        <meta name="description" content="Login and Registration Form with HTML5 

and CSS3" />
        <meta name="keywords" content="html5, css3, form, switch, animation, 

:target, pseudo-class" />
        <meta name="author" content="Codrops" />
        <link rel="shortcut icon" href="favicon.ico"> 
        <link rel="stylesheet" type="text/css" href="css/demo.css" />
        <link rel="stylesheet" type="text/css" href="css/style.css" />
		<link rel="stylesheet" type="text/css" href="css/animate-

custom.css" />
    </head>
    <body>
        <div class="container">
            <!-- Codrops top bar -->
            <div class="codrops-top">
                <a href="">
                    </a>
                <span class="right">
                    <a href=" http://www.youtube.com/user/OfSerker">
                        <strong>Back to the OfSerker's Youtube Channel</strong>
                    </a>
                </span>
                <div class="clr"></div>
            </div><!--/ Codrops top bar -->
            <header>
                <h1>Welcome to<span> OfSerker</span> Page</h1>
				<nav class="codrops-demos">
<B>Click en las Redes Sociales<B>
				<a href="facebook-twitter.html"><font size = 

+1>Facebook/Twitter</font></a>
				</nav>
            </header>
<section>				
                <div id="container_demo" >
                    <!-- hidden anchor to stop jump 

http://www.css3create.com/Astuce-Empecher-le-scroll-avec-l-utilisation-de-

target#wrap4  -->
                    <a class="hiddenanchor" id="toregister"></a>
                    <a class="hiddenanchor" id="tologin"></a>
                    <div id="wrapper">
                        <div id="login" class="animate form">
                            <form  action="login.php" autocomplete="on"> 
                                <h1>Log in</h1> 
                                <p> 
                                    <label for="username" class="uname" data-

icon="u" > T&uacute Usuario </label>
                                    <input id="username" name="username" 

required="required" type="text" placeholder="Mi Usuario"/>
                                </p>
                                <p> 
                                    <label for="password" class="youpasswd" data-

icon="p"> T&uacute Contrase&ntildea </label>
                                    <input id="password" name="password" 

required="required" type="password" placeholder="Ej: X8df!90EO" /> 
                                </p>
                                <p class="keeplogin"> 
									<input 

type="checkbox" name="loginkeeping" id="loginkeeping" value="loginkeeping" /> 
									<label 

for="loginkeeping">Mantenme logueado</label>
								</p>
                                <p class="login button"> 
                                    <input type="submit" value="Login" /> 
								</p>
                                <p class="change_link">
									No eres 

miembro todav&iacutea ?
									<a 

href="register.html" class="to_register">&Uacutenete Ahora</a>
				
                           
                        </div>
						
                    </div>
                </div>  
            </section>
        </div>
    </body>
</html> 
Código PHP:
<?php
session_start
();
require_once(
'./config/funciones.php');
conectar('ma''a''a''a');

include(
"mantenimiento.php"); 

//Variables 
$username strip_tags($_POST['username']); 
$password strip_tags(sha1($_POST["password"])); 
$activado = ("SELECT * FROM users WHERE activado = ''");  

$query mysql_query("SELECT * FROM users WHERE   
user='"
.mysql_real_escape_string($username)."'  
pass='"
.mysql_real_escape_string($password)."'  
AND activado='"
.mysql_real_escape_string($activado)."'");  

//Correcte fins aqui 

if($existe mysql_fetch_object($query))  
{  
  if(
$existe->activado != 1) {  
    echo 
'Primero activa tu cuenta entrando a tu correo';  
}else{ 
    
$_SESSION['logged'] = 'yes'
    
$_SESSION['username'] = $username
    echo 
'<script>window.location="ofserker.php"</script>'

}else{ 
    echo 
'El usuario y/o pass son incorrectos.';     

?>
Atentamente, OfSerker.
  #13 (permalink)  
Antiguo 13/04/2014, 12:58
 
Fecha de Ingreso: abril-2014
Ubicación: Canarias!
Mensajes: 150
Antigüedad: 10 años
Puntos: 10
Respuesta: No entiendo porque no me lo coge

Creo que voy entendiendo tu problema.....Trata mas bien de entender conceptos

Las variables $_GET y $_POST se usan para recoger datos desde el navegador, sea por la barra de navegación o un formulario (o métodos como jquery).

Tu no le vas a preguntar a un usuario su nombre de usuario, contraseña y su estado. Porque sino, yo estoy expulsado de tu página y envio mi nombre, mi contraseña, y le digo a tu php que no estoy activado...¿Que pasaria? Entraria en la página, porque estas preguntando donde activación sea igual al estado de activación que pides al usuario.

$_POST solo sirve para eso, NO tienes que usar post para pasar datos a la base de datos, y menos si no se las pides antes al usuario.

Es decir...Borra esta lineas

$activado = ("SELECT * FROM users WHERE activado = ''");

Y pon en la query, esto:

Código PHP:
$query mysql_query("SELECT * FROM users WHERE  
user='"
.mysql_real_escape_string($username)."' 
AND pass='"
.mysql_real_escape_string($password)."' 
AND activado='1' "
); 
Olvidate de la variable activado. Y un consejo:

Concéntrate en entender tu código...Envés de dejarnos un código roto y pedir que solucionemos el error, pregunta que es lo que no entiendes de tu código, porque has mostrado que no sabes realmente lo que estas haciendo (sin ofensa ninguna, estamos para ayudar), como lo que has puesto ahora en la variable $activado, no puede ser si entiendes para que estan las consultas mysql.

Nosotros podemos arreglartelo, pero estamos aquí para que aprendas tu a hacerlo bien.

Te recomiendo que te sometas bajo un curso php que te aclare las bases.
__________________
Pautas php:
No usar libreria mysql, usa mysqli; Separar siempre los controladores de la vista; Procedual es feo, ama los objetos
  #14 (permalink)  
Antiguo 13/04/2014, 14:56
 
Fecha de Ingreso: marzo-2014
Mensajes: 168
Antigüedad: 10 años, 1 mes
Puntos: 2
Pregunta Respuesta: No entiendo porque no me lo coge

Hola, gracias por responder nuevamente. El valor "1" de activado lo selecciona de la bd. Solo puede ser "0" o "1". Si es "0" no te podras loguear y te saldra un echo mostrando que actives tu cuenta. Si es "1", te podras loguear.

No como tu que solo has puesto que el valor sea "1":

Código PHP:
$query mysql_query("SELECT * FROM users WHERE  
user='"
.mysql_real_escape_string($username)."' 
AND pass='"
.mysql_real_escape_string($password)."' 
[B]AND activado='1' "
);[/B
Pero aparte del activado viene el sistema de logueo normal:

login.php (normal, funciona bien):

Código PHP:
<?php
session_start
();
require_once(
'./config/funciones.php');
conectar('a''a''a''a');
 
include(
"mantenimiento.php");

//Variables
$username strip_tags($_POST['username']);
$password strip_tags(sha1($_POST['password']));
 
$query = @mysql_query('SELECT * FROM users WHERE user="'.mysql_real_escape_string($username).'" AND pass="'.mysql_real_escape_string($password).'"');

if(
$existe = @mysql_fetch_object($query))
{
    
$_SESSION['logged'] = 'yes';
    
$_SESSION['username'] = $username;
    echo 
'<script>window.location="ofserker.php"</script>';
}else{
    echo 
'El usuario y/o pass son incorrectos.';    
}
?>
En este mismo codigo le quiero añadir el sistema de activación y no se como. Pero el error que has cometido de poner que el valor activado sea siempre "1"... Bueno gracias por ayudarme.

Esperando respuestas, atentamente:
-OfSerker
  #15 (permalink)  
Antiguo 13/04/2014, 15:03
 
Fecha de Ingreso: abril-2014
Ubicación: Canarias!
Mensajes: 150
Antigüedad: 10 años
Puntos: 10
Respuesta: No entiendo porque no me lo coge

Le he puesto 1 para que un usuario NO activo, NO entre...Fue la idea, lo hice a propósito.

Pero no entiendo ahora el problema que tienes tu, porque has quitado el activado de arriba (Muy bien!) Pero lo has quitado de abajo.

Lo que te falta es unir lo que hicistes en el primer mensaje y lo que tienes en el último

Código PHP:
<?php
session_start
();
require_once(
'./config/funciones.php');
conectar('a''a''a''a');
 
include(
"mantenimiento.php");

//Variables
$username strip_tags($_POST['username']);
$password strip_tags(sha1($_POST['password']));
 
$query mysql_query("SELECT * FROM users WHERE user='".mysql_real_escape_string($username)."' AND pass='".mysql_real_escape_string($password)."' ");

if(
$existe mysql_fetch_object($query)) 

  if(
$existe->activado != 1) { 
    echo 
'Primero activa tu cuenta entrando a tu correo'
}else{ 
    
$_SESSION['logged'] = 'yes'
    
$_SESSION['username'] = $username
    echo 
'<script>window.location="ofserker.php"</script>'

}else{ 
    echo 
'El usuario y/o pass son incorrectos.';     
}
El código sigue siendo muy sucio pero deberia cumplir lo que pides.
__________________
Pautas php:
No usar libreria mysql, usa mysqli; Separar siempre los controladores de la vista; Procedual es feo, ama los objetos
  #16 (permalink)  
Antiguo 13/04/2014, 15:41
 
Fecha de Ingreso: marzo-2014
Mensajes: 168
Antigüedad: 10 años, 1 mes
Puntos: 2
Pregunta Respuesta: No entiendo porque no me lo coge

¡El p**o amo ! Ya me funciona a la perfección. Gracias por todo. Marco el tema como solucionado.

Atentamente, OfSerker

Etiquetas: mysql, select, sql, variable
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 13:19.