Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Porque no funciona esto?

Estas en el tema de Porque no funciona esto? en el foro de PHP en Foros del Web. Porque no me devuelve el objeto con los datos la consulta que esta en rojo? No entiendo no devuelve nada CREATE TABLE IF NOT EXISTS ...
  #1 (permalink)  
Antiguo 03/03/2017, 21:12
Avatar de Fernarey1810  
Fecha de Ingreso: noviembre-2008
Mensajes: 214
Antigüedad: 15 años, 5 meses
Puntos: 1
Porque no funciona esto?

Porque no me devuelve el objeto con los datos la consulta que esta en rojo? No entiendo no devuelve nada

CREATE TABLE IF NOT EXISTS `usuarios` (
`id_user` int(5) unsigned NOT NULL AUTO_INCREMENT,
`nombre` varchar(30) NOT NULL,
`usernombre` varchar(30) NOT NULL,
`password` char(40) NOT NULL,
`email` varchar(50) NOT NULL,
PRIMARY KEY (`id_user`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

INSERT INTO `usuarios` (`id_user`, `nombre`, `usernombre`, `password`, `email`) VALUES
(1, 'fernando ojeda', 'fernarey1810', 'c5f617e3dfc03337ef4eea22cad65b56d25c45f5', '[email protected]');


index.php

Código PHP:
Ver original
  1. <?php
  2. include 'db.php';
  3. include 'user.php';
  4.  
  5.        
  6. $user = User::getByUsername('fernarey1810');
  7. print_r($user);
  8.  
  9. if ($user->userId) {
  10.      echo 'Lo sentimos, esa cuenta ya existe. Prueba un nombre de usuario diferente.';
  11. }
  12. ?>

db.php
Código PHP:
Ver original
  1. <?php
  2. define('DB_HOST', 'localhost');
  3. define('DB_USER', 'root');
  4. define('DB_PASSWORD', '');
  5. define('DB_SCHEMA', 'ap_tostado');
  6.  
  7. $connection = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
  8. if(!$connection) {
  9.     die("Falla en la conexión a la base de datos." . mysql_error());
  10. }
  11. $db_select = mysql_select_db(DB_SCHEMA, $connection);
  12. if(!$db_select) {
  13.     die("Falla en la selección de la base de datos." . mysql_error());
  14. }
  15. ?>

user.php
Código PHP:
Ver original
  1. <?php
  2. class User {
  3.     private $uid;    
  4.     private $fields;  
  5.    
  6.    
  7.     public function __construct() {
  8.         $this->uid = null;
  9.         $this->fields = array('nombre' => '',
  10.                               'username' => '',
  11.                               'password' => '',
  12.                               'emailAddr' => '');                              
  13.     }
  14.     public function __get($field) {
  15.         if ($field == 'userId') {
  16.             return $this->uid;
  17.         }else {
  18.             return $this->fields[$field];
  19.         }
  20.     }
  21.            
  22.    
  23.     public function __set($field, $value) {
  24.         if (array_key_exists($field, $this->fields)) {
  25.             $this->fields[$field] = $value;
  26.         }
  27.     }
  28.     public static function getByUsername($username) {
  29.         $u = new User();
  30.                 // ESTA CONSULTA NO FUNCIONA NOSE PORQUE
  31.         $query = "SELECT id_user, nombre, password, email FROM usuarios WHERE usernombre = '$username'";
  32.         $result = mysql_query($query, $connection);
  33.                
  34.         if (mysql_num_rows($result)) {
  35.             $row = mysql_fetch_assoc($result);
  36.             $u->nombre = $row['nombre'];
  37.             $u->username = $username;
  38.             $u->password = $row['password'];
  39.             $u->emailAddr = $row['email'];            
  40.             $u->uid = $row['id_user'];
  41.         }
  42.        
  43.         mysql_free_result($result);
  44.         return $u;
  45.     }
  46. }
  #2 (permalink)  
Antiguo 03/03/2017, 22:20
 
Fecha de Ingreso: julio-2014
Mensajes: 334
Antigüedad: 9 años, 9 meses
Puntos: 30
Respuesta: Porque no funciona esto?

Tienes activado "display_errors"? Adivino que no, ya que de lo contrario verías esto:

Notice: Undefined variable: connection in C:\inetpub\wwwroot\pruebas\user.php on line 32

Warning: mysqli_query() expects parameter 1 to be mysqli, string given in C:\inetpub\wwwroot\pruebas\user.php on line 32

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, null given in C:\inetpub\wwwroot\pruebas\user.php on line 34

Warning: mysqli_free_result() expects parameter 1 to be mysqli_result, null given in C:\inetpub\wwwroot\pruebas\user.php on line 43
User Object ( [uid:User:private] => [fields:User:private] => Array ( [nombre] => [username] => [password] => [emailAddr] => ) )

Ahí tienes la razón por la que no te devuelve nada (a parte que ya se no se utiliza mysql, se utiliza mysqli).
  #3 (permalink)  
Antiguo 03/03/2017, 22:29
Avatar de Fernarey1810  
Fecha de Ingreso: noviembre-2008
Mensajes: 214
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Porque no funciona esto?

Yo uso wamp server y tengo la version 5.3.13 de php y siempre anduvo. El error es que tengo que cambiar a funciones de MySQLi???
  #4 (permalink)  
Antiguo 04/03/2017, 11:46
Avatar de Fernarey1810  
Fecha de Ingreso: noviembre-2008
Mensajes: 214
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Porque no funciona esto?

Encontre esto y lo solucione http://stackoverflow.com/questions/2...qli-connection

Agregandole la palabra global funciona. Asi global $connection;
Código PHP:
Ver original
  1. // Devuelve un objeto que se ha rellenado en base al nombre de usuario del registro *****
  2.     public static function getByUsername($username) {
  3.         $u = new User();
  4.         global $connection;
  5.         $query = "SELECT id_user, nombre, password, email FROM usuarios WHERE usernombre = '$username'";
  6.         $result = mysql_query($query, $connection);
  7.                
  8.         if (mysql_num_rows($result)) {
  9.             $row = mysql_fetch_assoc($result);
  10.             $u->nombre = $row['nombre'];
  11.             $u->username = $username;
  12.             $u->password = $row['password'];
  13.             $u->emailAddr = $row['email'];
  14.             // $u->isActive = $row['IS_ACTIVE'];
  15.             $u->uid = $row['id_user'];
  16.         }
  17.        
  18.         mysql_free_result($result);
  19.         return $u;
  20.     }

O bien pasando $connection como parametro:

Código PHP:
Ver original
  1. $user = User::getByUsername($username, $connection);
  2.  
  3. public static function getByUsername($username, $con) {
  4.         $u = new User();
  5.      
  6.     $query = "SELECT id_user, nombre, password, email FROM usuarios WHERE usernombre = '$username'";
  7.     $result = mysql_query($query, $con);
  8.                
  9.         if (mysql_num_rows($result)) {
  10.             $row = mysql_fetch_assoc($result);
  11.             $u->nombre = $row['nombre'];
  12.             $u->username = $username;
  13.             $u->password = $row['password'];
  14.             $u->emailAddr = $row['email'];
  15.             // $u->isActive = $row['IS_ACTIVE'];
  16.             $u->uid = $row['id_user'];
  17.         }
  18.        
  19.         mysql_free_result($result);
  20.         return $u;
  21.     }
  #5 (permalink)  
Antiguo 04/03/2017, 11:49
 
Fecha de Ingreso: julio-2014
Mensajes: 334
Antigüedad: 9 años, 9 meses
Puntos: 30
Respuesta: Porque no funciona esto?

Cita:
Iniciado por Fernarey1810 Ver Mensaje
Yo uso wamp server y tengo la version 5.3.13 de php y siempre anduvo. El error es que tengo que cambiar a funciones de MySQLi???
Que antes te funcione no quiere decir que siempre te funcione si actualizas versiones de cualquier componente.

Ya te publiqué el error, activa display_errors para que te ahorres la molestia de preguntar por cada error que te surga, de nuevo te publico el error.

Notice: Undefined variable: connection in C:\inetpub\wwwroot\pruebas\user.php on line 32

Y sí, parte del error es porque no estás utilizando mysqli.

Etiquetas: mysql, select, usuario
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:11.