Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Usar MySQLi en functions

Estas en el tema de Usar MySQLi en functions en el foro de PHP en Foros del Web. Hola gente, como estan? Esta vez estoy acá por qué estoy empezando en esto de MySQLi y no puedo hacer una cosa.. Tengo un archivo ...
  #1 (permalink)  
Antiguo 02/08/2013, 22:42
Avatar de elvaleehdj  
Fecha de Ingreso: julio-2011
Mensajes: 33
Antigüedad: 12 años, 9 meses
Puntos: 0
Usar MySQLi en functions

Hola gente, como estan?

Esta vez estoy acá por qué estoy empezando en esto de MySQLi y no puedo hacer una cosa..

Tengo un archivo de conexión, donde tengo esto:

Código PHP:
Ver original
  1. $db = "asd";
  2. $mysqli = new mysqli("localhost", "root", "root", $db);
  3.  
  4. /* verificar la conexión */
  5.     printf("Falló la conexión: %s\n", mysqli_connect_error());
  6.     exit();
  7. }

Y otro archivo llamado "functions.php" y estan todas las funciones..

Entre ellas está la de "registro", en la cual tengo esto:


Código PHP:
Ver original
  1. <?php
  2. //INCLUIDES
  3. include 'EpiCurl.php';
  4. include 'conexion.php';
  5.  
  6. //FUNCION DE REGISTRO
  7. function registro() {
  8. //RECUPERACION DE VARIABLES
  9.     $user=$_POST['user'];
  10.     $password=$_POST['pass'];
  11.     $pass2=$_POST['pass2'];
  12.     $email=$_POST['email'];
  13.     $ip=$_SERVER['REMOTE_ADDR'];
  14.  
  15. //ESCAPAMOS LAS VARIABLES
  16. $user=$mysqli->real_escape_string($user);
  17. $password=$mysqli->real_escape_string($password);
  18. $pass2=$mysqli->real_escape_string($pass2);
  19. $email=$mysqli->real_escape_string($email);
  20. $ip=$mysqli->real_escape_string($ip);
  21.  
  22. //CONVERTIMOS EL USUARIO A MINUSCULA
  23. $user=strtolower($user);
  24.  
  25. //ENCRIPTACION DE CONTRASEÑA
  26.     $password=md5($password);
  27.     $pass2=md5($pass2);
  28.  
  29. //REGISTRO
  30.     $query=$mysqli->query("SELECT * FROM users WHERE user = '$user' or email = '$email' LIMIT 1;");
  31.     $d=$query->num_rows;
  32.     if ($d == 0) {
  33.     if ($password == $pass2) {
  34.         $mysqli->query("INSERT INTO ".$db.".users (id , user , pass , rango , email , ip , fecha , estado) VALUES ( NULL , '$user', '$password' , '1', '$email', '$ip', NOW( ) , '0');");
  35.         echo 'Se registró correctamente';
  36.     } else {
  37.         echo 'Las contraseñas no coinciden.';
  38.     } } else {
  39.         echo 'El nombre de usuario o el email ya se encuentran registrados!';
  40.     }
  41. }

Pero me tira el siguiente error:

Fatal error: Call to a member function real_escape_string() on a non-object in C:\AppServ\www\includes\functions.php on line 49

Espero que me puedan ayudar, gracias :D

Última edición por elvaleehdj; 02/08/2013 a las 22:48
  #2 (permalink)  
Antiguo 02/08/2013, 23:30
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Usar MySQLi en functions

Tu funcion registro debe de recivir el objeto mysqli
Código PHP:
Ver original
  1. <?php
  2. //INCLUIDES
  3. include 'EpiCurl.php';
  4. include 'conexion.php';
  5.  
  6. //FUNCION DE REGISTRO. Se le debe de pasar el objeto mysqli
  7. function registro($mysqli) {
  8. //RECUPERACION DE VARIABLES
  9.     $user=$_POST['user'];
  10.     $password=$_POST['pass'];
  11.     $pass2=$_POST['pass2'];
  12.     $email=$_POST['email'];
  13.     $ip=$_SERVER['REMOTE_ADDR'];
  14.  
  15. //ESCAPAMOS LAS VARIABLES
  16. $user=$mysqli->real_escape_string($user);
  17. $password=$mysqli->real_escape_string($password);
  18. $pass2=$mysqli->real_escape_string($pass2);
  19. $email=$mysqli->real_escape_string($email);
  20. $ip=$mysqli->real_escape_string($ip);
  21.  
  22. //CONVERTIMOS EL USUARIO A MINUSCULA
  23. $user=strtolower($user);
  24.  
  25. //ENCRIPTACION DE CONTRASEÑA
  26.     $password=md5($password);
  27.     $pass2=md5($pass2);
  28.  
  29. //REGISTRO
  30.     $query=$mysqli->query("SELECT * FROM users WHERE user = '$user' or email = '$email' LIMIT 1;");
  31.     $d=$query->num_rows;
  32.     if ($d == 0) {
  33.     if ($password == $pass2) {
  34.         $mysqli->query("INSERT INTO ".$db.".users (id , user , pass , rango , email , ip , fecha , estado) VALUES ( NULL , '$user', '$password' , '1', '$email', '$ip', NOW( ) , '0');");
  35.         echo 'Se registró correctamente';
  36.     } else {
  37.         echo 'Las contraseñas no coinciden.';
  38.     } } else {
  39.         echo 'El nombre de usuario o el email ya se encuentran registrados!';
  40.     }
  41. }
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 02/08/2013, 23:34
Avatar de elvaleehdj  
Fecha de Ingreso: julio-2011
Mensajes: 33
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Usar MySQLi en functions

Cita:
Iniciado por hhs Ver Mensaje
Tu funcion registro debe de recivir el objeto mysqli
Código PHP:
Ver original
  1. <?php
  2. //INCLUIDES
  3. include 'EpiCurl.php';
  4. include 'conexion.php';
  5.  
  6. //FUNCION DE REGISTRO. Se le debe de pasar el objeto mysqli
  7. function registro($mysqli) {
  8. //RECUPERACION DE VARIABLES
  9.     $user=$_POST['user'];
  10.     $password=$_POST['pass'];
  11.     $pass2=$_POST['pass2'];
  12.     $email=$_POST['email'];
  13.     $ip=$_SERVER['REMOTE_ADDR'];
  14.  
  15. //ESCAPAMOS LAS VARIABLES
  16. $user=$mysqli->real_escape_string($user);
  17. $password=$mysqli->real_escape_string($password);
  18. $pass2=$mysqli->real_escape_string($pass2);
  19. $email=$mysqli->real_escape_string($email);
  20. $ip=$mysqli->real_escape_string($ip);
  21.  
  22. //CONVERTIMOS EL USUARIO A MINUSCULA
  23. $user=strtolower($user);
  24.  
  25. //ENCRIPTACION DE CONTRASEÑA
  26.     $password=md5($password);
  27.     $pass2=md5($pass2);
  28.  
  29. //REGISTRO
  30.     $query=$mysqli->query("SELECT * FROM users WHERE user = '$user' or email = '$email' LIMIT 1;");
  31.     $d=$query->num_rows;
  32.     if ($d == 0) {
  33.     if ($password == $pass2) {
  34.         $mysqli->query("INSERT INTO ".$db.".users (id , user , pass , rango , email , ip , fecha , estado) VALUES ( NULL , '$user', '$password' , '1', '$email', '$ip', NOW( ) , '0');");
  35.         echo 'Se registró correctamente';
  36.     } else {
  37.         echo 'Las contraseñas no coinciden.';
  38.     } } else {
  39.         echo 'El nombre de usuario o el email ya se encuentran registrados!';
  40.     }
  41. }
En ese caso, cuando llamo a la funcion que le tengo que pasar?

Algo así? : registro(new mysqli("localhost", "root", "root", $db);) ??
  #4 (permalink)  
Antiguo 03/08/2013, 00:46
 
Fecha de Ingreso: julio-2013
Ubicación: México
Mensajes: 361
Antigüedad: 10 años, 9 meses
Puntos: 55
Respuesta: Usar MySQLi en functions

Hola, lo que sucede es que con mysql se podia utilizar la coneccion en cualquier parte del script, pero con MYSQLI no se puede, tiene restricciones de visibilidad como cualquier otra variable, y tienes que enviar el objeto $mysqli a otras funciones o clases para poder utilizar la conexion.

llamas la función enviando el objeto, así:
registro($mysqli);

espero te sea de ayuda
  #5 (permalink)  
Antiguo 03/08/2013, 01:36
Avatar de elvaleehdj  
Fecha de Ingreso: julio-2011
Mensajes: 33
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Usar MySQLi en functions

Cita:
Iniciado por Erick_MD9 Ver Mensaje
Hola, lo que sucede es que con mysql se podia utilizar la coneccion en cualquier parte del script, pero con MYSQLI no se puede, tiene restricciones de visibilidad como cualquier otra variable, y tienes que enviar el objeto $mysqli a otras funciones o clases para poder utilizar la conexion.

llamas la función enviando el objeto, así:
registro($mysqli);

espero te sea de ayuda
Gracias!

Ya pude establecer conexión, pero ahora, si tengo estas lineas, no me carga la página:

Código PHP:
Ver original
  1. //ESCAPAMOS LAS VARIABLES
  2. $user=$mysqli->real_escape_string($user);
  3. $password=$mysqli->real_escape_string($password);
  4. $pass2=$mysqli->real_escape_string($pass2);
  5. $email=$mysqli->real_escape_string($email);
  6. $ip=$mysqli->real_escape_string($ip);

Si pongo esas lineas el navegador (Probé con todos) me tira este error:



Nuevamente, gracias, y espero qué me puedan ayudar! :)
  #6 (permalink)  
Antiguo 03/08/2013, 04:39
Avatar de rocha7778  
Fecha de Ingreso: mayo-2013
Ubicación: Cartagena Colombia
Mensajes: 79
Antigüedad: 11 años
Puntos: 1
Respuesta: Usar MySQLi en functions

prueba eliminando el include de conexión y conectándote directamente en el archivo de registro.


no debe presentar ningun problema, lo otro es que imprimas el resultado de real_escape_string.


por otro lado:

Cita:
//ENCRIPTACION DE CONTRASEÑA
$password=md5($password);
$pass2=md5($pass2);
por que haces esto en php, si lo puedes hacer en la base de datos, no te parece que es mejor comparar

las cadenas sin modificar, par ver si son iguales y no despues de modificar como haces

Cita:
if ($password == $pass2) {
no es lo mismo comparar
Cita:
1 = 1,
que c4ca4238a0b923820dcc509a6f75849b = c4ca4238a0b923820dcc509a6f75849b

haa por ultimo si quitas las funciones de real_scape... si conecta?
  #7 (permalink)  
Antiguo 03/08/2013, 04:41
Avatar de rocha7778  
Fecha de Ingreso: mayo-2013
Ubicación: Cartagena Colombia
Mensajes: 79
Antigüedad: 11 años
Puntos: 1
Respuesta: Usar MySQLi en functions

Cita:
if ($password == $pass2) {
$mysqli->query("INSERT INTO ".$db.".users (id , user , pass , rango , email , ip , fecha , estado) VALUES ( NULL , '$user', '$password' , '1', '$email', '$ip', NOW( ) , '0');");
me falto decirte que imprimas esta cadena y la pruebes directamente en la bd, para descartar que la cadena contenga errores.
  #8 (permalink)  
Antiguo 03/08/2013, 10:40
Avatar de elvaleehdj  
Fecha de Ingreso: julio-2011
Mensajes: 33
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Usar MySQLi en functions

Cita:
Iniciado por rocha7778 Ver Mensaje
prueba eliminando el include de conexión y conectándote directamente en el archivo de registro.


no debe presentar ningun problema, lo otro es que imprimas el resultado de real_escape_string.


por otro lado:



por que haces esto en php, si lo puedes hacer en la base de datos, no te parece que es mejor comparar

las cadenas sin modificar, par ver si son iguales y no despues de modificar como haces



no es lo mismo comparar


haa por ultimo si quitas las funciones de real_scape... si conecta?
Probé como me dijiste y nada, sigue igual...
Y si, si saco el real_scape conecta correctamente..
Cita:
Iniciado por rocha7778 Ver Mensaje
me falto decirte que imprimas esta cadena y la pruebes directamente en la bd, para descartar que la cadena contenga errores.
Eso ya lo hice, y funciona correctamente! :)
  #9 (permalink)  
Antiguo 03/08/2013, 13:13
Avatar de rocha7778  
Fecha de Ingreso: mayo-2013
Ubicación: Cartagena Colombia
Mensajes: 79
Antigüedad: 11 años
Puntos: 1
Respuesta: Usar MySQLi en functions

Código PHP:

<?php
//INCLUIDES

//FUNCION DE REGISTRO. Se le debe de pasar el objeto mysqli
function registro() {
    
    
    
$db "clientes";
$mysqli = new mysqli("localhost""root""123456"$db);
 
/* verificar la conexión */
if (mysqli_connect_errno()) {
    
printf("Falló la conexión: %s\n"mysqli_connect_error());
    exit();
}
//RECUPERACION DE VARIABLES
    
$user='amdx';
    
 
//ESCAPAMOS LAS VARIABLES
$user=$mysqli->real_escape_string($user);

 
//CONVERTIMOS EL USUARIO A MINUSCULA
$user=strtolower($user);
 
//ENCRIPTACION DE CONTRASEÑA
    
$pass='123456';
    
$pass=md5($pass);
 
 
//REGISTRO
 
 
 
    
$query=$mysqli->query("SELECT * FROM usuarios WHERE user = '$user'  LIMIT 1;");
    
$d=$query->num_rows;
    if (
$d == 0) {
    if (
true) {
        
       
     
        
        
$mysqli->query("INSERT INTO ".$db.".usuarios ( usuario ,  PASSWORD ,  email ,fecha) VALUES ('$user', '$pass' ,  'rocha@',  NOW( ) );");
        echo 
'Se registró correctamente';
    } else {
        echo 
'Las contraseñas no coinciden.';
    } } else {
        echo 
'El nombre de usuario o el email ya se encuentran registrados!';
    }
}


registro();
 
?>
compañero probé tu código y ami me funciona correctamente, es decir el problema no es el código.

confirmamos si aun persite el problema, y si lo solucionaste postea lo que te estaba pasando para dejarlo registrado.
  #10 (permalink)  
Antiguo 03/08/2013, 14:53
Avatar de elvaleehdj  
Fecha de Ingreso: julio-2011
Mensajes: 33
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Usar MySQLi en functions

Cita:
Iniciado por rocha7778 Ver Mensaje
Código PHP:

<?php
//INCLUIDES

//FUNCION DE REGISTRO. Se le debe de pasar el objeto mysqli
function registro() {
    
    
    
$db "clientes";
$mysqli = new mysqli("localhost""root""123456"$db);
 
/* verificar la conexión */
if (mysqli_connect_errno()) {
    
printf("Falló la conexión: %s\n"mysqli_connect_error());
    exit();
}
//RECUPERACION DE VARIABLES
    
$user='amdx';
    
 
//ESCAPAMOS LAS VARIABLES
$user=$mysqli->real_escape_string($user);

 
//CONVERTIMOS EL USUARIO A MINUSCULA
$user=strtolower($user);
 
//ENCRIPTACION DE CONTRASEÑA
    
$pass='123456';
    
$pass=md5($pass);
 
 
//REGISTRO
 
 
 
    
$query=$mysqli->query("SELECT * FROM usuarios WHERE user = '$user'  LIMIT 1;");
    
$d=$query->num_rows;
    if (
$d == 0) {
    if (
true) {
        
       
     
        
        
$mysqli->query("INSERT INTO ".$db.".usuarios ( usuario ,  PASSWORD ,  email ,fecha) VALUES ('$user', '$pass' ,  'rocha@',  NOW( ) );");
        echo 
'Se registró correctamente';
    } else {
        echo 
'Las contraseñas no coinciden.';
    } } else {
        echo 
'El nombre de usuario o el email ya se encuentran registrados!';
    }
}


registro();
 
?>
compañero probé tu código y ami me funciona correctamente, es decir el problema no es el código.

confirmamos si aun persite el problema, y si lo solucionaste postea lo que te estaba pasando para dejarlo registrado.
En este momento no estoy en mi casa, apenas llegue veo que puedo hacer..

Una ultima cosa: Podrias probar hacer LO MISMO pero con un archivo de conexión aparte? (Creo que ese es el problema)...

Gracias!
  #11 (permalink)  
Antiguo 05/08/2013, 19:36
Avatar de elvaleehdj  
Fecha de Ingreso: julio-2011
Mensajes: 33
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Usar MySQLi en functions

Pude solucionarlo...

Me di cuenta que en mi servidor local tenia instalado la versión PHP 6 DEV (Para desarrolladores, digamos, la "BETA")

Al parecer había un bug..

Tema solucionado

Etiquetas: mysql, mysqli, registro, select, sql, usar, 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 10:02.