elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  funcion no inserta datos en la db
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: funcion no inserta datos en la db  (Leído 3,172 veces)
gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
funcion no inserta datos en la db
« en: 22 Septiembre 2014, 00:53 am »

Hola, estoy intentando añadir datos a un registro de usuarios, pero no funciona...

functions.php
Código
  1. //ip function
  2. function get_ip_address() {
  3. if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
  4. $ip = $_SERVER['HTTP_CLIENT_IP'];
  5. } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
  6. $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
  7. } else {
  8. $ip = $_SERVER['REMOTE_ADDR'];
  9. }
  10. }
  11.  
Código
  1. //time function
  2. function get_current_time() {
  3. $time = date('d/m/Y H:i:s', time());
  4. }
  5.  
Código
  1. //record attempt or failed login
  2. $now = time();
  3. $login_time = get_current_time();
  4. $access_address = get_ip_address();
  5.  
  6. $mysqli->query("INSERT INTO login_attempts(user_id, used_password, time, login_time, access_address)
  7. VALUES ('$user_id', '$used_password', '$now', '$login_time', '$access_address')");
  8.  

Si antes de que se encripte la contraseña creo una variable que contenga $password tal y como viene en texto plano, podre usar esa variable despues para guardarla en la db y seguira conteniendo $password sin cifrar?

Eso es lo que quiero hacer para guardar cada login fallido, pero no funciona si incluyo el $login_time y el $access_address, si los quito si que inserta.

register.inc.php
Código
  1. // Insert the new user into the database
  2. $reg_time = get_current_time();
  3. $reg_ip = get_ip_address();
  4. if ($insert_stmt = $mysqli->prepare("INSERT INTO members (username, email, password, salt, reg_time, reg_ip) VALUES (?, ?, ?, ?, ?, ?)")) {
  5. $insert_stmt->bind_param('ssssss', $username, $email, $password, $random_salt, $reg_time, $reg_ip);
  6. // Execute the prepared query.
  7. if (! $insert_stmt->execute()) {
  8. header('Location: ../error.php?err=Registration failure: Contacte al administrador.');
  9. }
  10. }
  11.  

Eso tampoco funciona y es lo que quiero que se guarde en la db al crear el usuario. Y pasa lo mismo que antes, si quito $reg_time y $reg_ip si que funciona... ¿hay algo mal con esas dos variables o funciones?

He comprobado todo lo que se, la base de datos esta bien, todas las columnas existen, pero no inserta nada en la db... ni aparece ningun error. Cuando creo una cuenta me redirecciona a la pagina "Cuenta creada" como si todo hubiera salido bien, pero en la tabla members no hay nada creado...

Es posible que este mal la llamada a esas dos funciones y por eso no inserta nada, pero antes de crear esas dos funciones lo probe poniendo directamente el codigo y tampoco funcionaba. Es algo extraño la verdad.

Gracias.


« Última modificación: 22 Septiembre 2014, 01:10 am por gAb1 » En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: funcion no inserta datos en la db
« Respuesta #1 en: 22 Septiembre 2014, 03:22 am »

¿Has revisado por los errores que pudiera tener tu SQL?

Código
  1. echo $mysql->error;


En línea

gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
Re: funcion no inserta datos en la db
« Respuesta #2 en: 22 Septiembre 2014, 04:09 am »

mysql o mysqli?? no me da ningun error cuando se ejecutan las sentencias...
« Última modificación: 22 Septiembre 2014, 04:39 am por gAb1 » En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: funcion no inserta datos en la db
« Respuesta #3 en: 22 Septiembre 2014, 04:43 am »

mysql o mysqli??

Depende del nombre del objeto mysqli de tu conexion.
En línea

gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
Re: funcion no inserta datos en la db
« Respuesta #4 en: 22 Septiembre 2014, 04:50 am »

Si, es mysqli, pero no muestra ningun error. Y el log de mysql no muestra nada desde hace 2 dias que se encendio el servidor...

No será problema de:

Código
  1. $login_time = get_current_time();
  2. $access_address = get_ip_address();

¿esas variables obtienen el valor de las variables que hay en esas funciones?
En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: funcion no inserta datos en la db
« Respuesta #5 en: 22 Septiembre 2014, 05:10 am »

Si, es mysqli, pero no muestra ningun error. Y el log de mysql no muestra nada desde hace 2 dias que se encendio el servidor...

No será problema de:

Código
  1. $login_time = get_current_time();
  2. $access_address = get_ip_address();

¿esas variables obtienen el valor de las variables que hay en esas funciones?


Estás poniendo el $mysqli->error después de $mysqli->query() y $mysqli->execute() ?

Puedes hacerle un echo a tus variables $login_time y $access_address para asegurarte que están correctas.
En línea

gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
Re: funcion no inserta datos en la db
« Respuesta #6 en: 22 Septiembre 2014, 05:21 am »

Si, despues de varios if, ¿pero donde se mostraria ese echo? ¿en que pagina?

Esta es la función entera:
Código
  1. function login($email, $password, $mysqli) {
  2. // Store password for the attempt record
  3. $used_password = $password;
  4.  
  5.    // Using prepared statements means that SQL injection is not possible.
  6.    if ($stmt = $mysqli->prepare("SELECT id, username, password, salt
  7.        FROM members
  8. WHERE email = ?
  9.        LIMIT 1")) {
  10.        $stmt->bind_param('s', $email);  // Bind "$email" to parameter.
  11.        $stmt->execute();    // Execute the prepared query.
  12.        $stmt->store_result();
  13.  
  14.        // get variables from result.
  15.        $stmt->bind_result($user_id, $username, $db_password, $salt);
  16.        $stmt->fetch();
  17.  
  18.        // hash the password with the unique salt.
  19.        $password = hash('sha512', $password . $salt);
  20.        if ($stmt->num_rows == 1) {
  21.            // If the user exists we check if the account is locked
  22.            // from too many login attempts
  23.  
  24.            if (checkbrute($user_id, $mysqli) == true) {
  25.                // Account is locked
  26.                // Send an email to user saying their account is locked
  27.                return false;
  28.            } else {
  29.                // Check if the password in the database matches
  30.                // the password the user submitted.
  31.                if ($db_password == $password) {
  32.                    // Password is correct!
  33.                    // Get the user-agent string of the user.
  34.                    $user_browser = $_SERVER['HTTP_USER_AGENT'];
  35.                    // XSS protection as we might print this value
  36.                    $user_id = preg_replace("/[^0-9]+/", "", $user_id);
  37.                    $_SESSION['user_id'] = $user_id;
  38.                    // XSS protection as we might print this value
  39.                    $username = preg_replace("/[^a-zA-Z0-9_\-]+/",
  40.                                                                "",
  41.                                                                $username);
  42.                    $_SESSION['username'] = $username;
  43.                    $_SESSION['login_string'] = hash('sha512',
  44.                              $password . $user_browser);
  45.                    // Login successful.
  46. $ip = get_ip_address();
  47. if ($mysqli->query("INSERT INTO members(last_ip)
  48.                                    VALUES ('$ip')"));
  49.                    return true;
  50.                } else {
  51.                    // Password is not correct
  52.                    // We record this attempt in the database
  53. $now = time();
  54. $time = get_current_time();
  55. $ip = get_ip_address();
  56.                    if ($mysqli->query("INSERT INTO login_attempts(user_id, password_used, time, login_time, access_address)
  57.                                    VALUES ('$user_id', '$used_password', '$now', '$time', '$ip')"));
  58.                    return false;
  59.                }
  60.            }
  61.        } else {
  62.            // No user exists.
  63.            return false;
  64.        }
  65.    echo $mysqli->error;
  66.    }
  67. }
« Última modificación: 22 Septiembre 2014, 05:29 am por gAb1 » En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: funcion no inserta datos en la db
« Respuesta #7 en: 22 Septiembre 2014, 05:30 am »

Los echos se deberían mostrar al ejecutarse el script.
En línea

gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
Re: funcion no inserta datos en la db
« Respuesta #8 en: 22 Septiembre 2014, 05:56 am »

Si hay algun error, yo no veo nada, en la pagina login.php me logueo pero no me da ningun error, ni aparece nada... Las sentencias siguen sin ejecutarse en la base de datos...

Desde otra pagina compruebo las variables:

Código
  1. <p>The time is: <?php get_current_time() ?></p>
  2. <p>My IP Address: <?php get_ip_address() ?></p>

Y funciona solo si pongo echo en las funciones:

Código
  1. function get_ip_address() {
  2. if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
  3. echo $ip = $_SERVER['HTTP_CLIENT_IP'];
  4. } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
  5. echo $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
  6. } else {
  7. echo $ip = $_SERVER['REMOTE_ADDR'];
  8. }
  9. }
  10.  
  11. function get_current_time() {
  12. echo $time = date('d/m/Y H:i:s', time());
  13. }

Edito: al parecer el usuario se crea, pero no guarda en la db estas dos ultimas variables. Lo he probado dejando echo en las funciones y sin echo, solo se guarda el nombre email y contraseña, ni la hora ni la ip...

Edito2: Solucionado era problema de las funciones y del length de la columna.

Sobre las funciones, esta es la solucion:
Código
  1. function get_current_time() {
  2. return date('d/m/Y H:i:s', time());
  3. }
« Última modificación: 24 Septiembre 2014, 00:22 am por gAb1 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Php & mysql: se conecta a La BD, pero no Inserta datos [solucionado] « 1 2 3 »
PHP
~V 20 12,488 Último mensaje 6 Diciembre 2009, 02:50 am
por ~V
Ayuda datos con funcion Split a Listview
Programación Visual Basic
v3ng4nz3 4 2,657 Último mensaje 22 Octubre 2010, 15:22 pm
por raul338
PORQUE NO INSERTA DATOS PHP « 1 2 »
PHP
lokito1986 11 5,671 Último mensaje 14 Abril 2012, 00:04 am
por lokito1986
no inserta datos tablas relacion referencial uno a muchos
Desarrollo Web
magevi 0 1,934 Último mensaje 17 Febrero 2015, 21:57 pm
por magevi
No me inserta los datos a la base de datos.
PHP
Drakaris 7 4,649 Último mensaje 24 Diciembre 2016, 16:33 pm
por Drakaris
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines