Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: gAb1 en 18 Septiembre 2014, 01:01 am



Título: funcion para lista de usuarios
Publicado por: gAb1 en 18 Septiembre 2014, 01:01 am
Hola, estoy terminando una lista de usuarios, pero hay una parte en la que no me aclaro...

La funcion actual muestra una lista con los datos de un usuario.

La web es un CMS basado en Yii Framework. Aqui pongo el codigo:

UsuarioController.php
Código
  1. class UsuarioController extends Controller
  2. {
  3. public function actionAdmin()
  4. {
  5. if(Yii::app()->authManager->checkAccess('RUsuario', Yii::app()->user->getState("rol")))
  6. {
  7. $model=new Usuario('search_propios');
  8. $model->unsetAttributes();
  9. if(isset($_GET['Usuario'])) $model->attributes=$_GET['Usuario'];
  10. $this->render('admin',array('model'=>$model,));
  11. }
  12. else
  13. throw new CHttpException(401,'No tiene permisos de acceso al recurso URL.');
  14.        }
  15. }

Models -> Usuario.php
Código
  1. class Usuario extends CActiveRecord
  2. {
  3. public static function model($className=__CLASS__)
  4. {
  5. return parent::model($className);
  6. }
  7.  
  8. public function tableName()
  9. {
  10. return 'rc_usuario';
  11. }
  12.  
  13. public function search_propios()
  14. {
  15. // Warning: Please modify the following code to remove attributes that
  16. // should not be searched.
  17. $idUsuarioActual = Yii::app()->user->getState('idWeb');
  18.  
  19. $criteria=new CDbCriteria;
  20.  
  21. $criteria->compare('idUsuario',$this->idUsuario);
  22. $criteria->compare('nombre',$this->nombre,true);
  23. $criteria->compare('apellidos',$this->apellidos,true);
  24. $criteria->compare('email',$this->email,true);
  25. $criteria->compare('web',$this->web,true);
  26. $criteria->order='idWeb';
  27.  
  28. return new CActiveDataProvider($this, array('criteria'=>$criteria,));
  29. }
  30. }

Esa lista muestra todos los usuarios, pero necesito que muestre solo unos segun las ids de otra tabla.

La tabla rc_amigo tiene las columnas 'idAmigo' y 'idUsuario'. Necesito que la lista muestre los amigos del usuario conectado, sería algo asi como
Código
  1. SELECT * FROM rc_amigo WHERE idUsuario=1
Y, por ejemplo, esto sería lo que devuelve la sentencia:
Citar
-----------------------
idAmigo|idUsuario
         2 |            1
         3 |            1
         4 |            1
-----------------------

Si, en este caso, el usuario que hay conectado es el 1, necesito que la lista muestre los usuarios 2, 3 y 4 de la tabla rc_usuario.

Código
  1. SELECT * FROM rc_usuario WHERE idUsuario = (SELECT * FROM rc_amigo WHERE idUsuario=1)

Ese 1 tendría que cambiarlo por el 'idUsuario' del login actual...

Mas o menos puedo hacerme una idea de como hacerlo, pero realmente llevo un lio en la cabeza, llevo unas horas probando y no consigo nada... ;(

¿Conoceis alguna manera simple de hacerlo?

Gracias!


Título: Re: funcion para lista de usuarios
Publicado por: MinusFour en 18 Septiembre 2014, 01:43 am
Solo conozco Symfony realmente, pero parece ser que lo que buscas es establecer la relación de los Active Records.

http://www.yiiframework.com/doc/guide/1.1/en/database.arr


Título: Re: funcion para lista de usuarios
Publicado por: gAb1 en 18 Septiembre 2014, 16:37 pm
¿Podría de alguna manera hacerse mas facil? Por ejemplo con:

Código
  1. SELECT * FROM rc_usuario WHERE idUsuario = (SELECT idAmigo FROM rc_amigo WHERE idUsuario = $connectedUserID)

He probado esa consulta y al parecer da error si hay mas de 1 fila... si solo hay 1 resultado lo muestra...

Gracias!


Título: Re: funcion para lista de usuarios
Publicado por: MinusFour en 18 Septiembre 2014, 17:05 pm
La consulta que buscas quizá sea:

Código
  1. SELECT rc_usuario.*, rc_amigo.*
  2. FROM rc_amigo
  3. INNER JOIN rc_usuario ON rc_usuario.idUsuario = rc_amigo.idAmigo
  4. WHERE rc_amigo.idUsuario = $connectedUserID


Título: Re: funcion para lista de usuarios
Publicado por: gAb1 en 18 Septiembre 2014, 19:33 pm
Sii muchas gracias funciona perfecto.

He conseguido armar algo muy simple y al parecer funciona bien, lo unico que falla es la variable que comprueba el id del usuario conectado con el id que obtiene de la db...

Código
  1. <?php header('Content-Type: charset=utf-8');
  2.  
  3. $connectedUserID = Yii::app()->user->getState('idUsuario'); // aqui se declara
  4.  
  5. $idUsuario = '0';
  6. $idReferido = '1';
  7.  
  8. mysql_connect('localhost', 'root', '123456');
  9. mysql_select_db('website');
  10. $query = sprintf("SELECT rc_usuario.*, rc_referidos.*
  11. FROM rc_referidos
  12. INNER JOIN rc_usuario ON rc_usuario.idUsuario = rc_referidos.idReferido
  13. WHERE rc_referidos.idUsuario = '$connectedUserID'", // aqui se usa
  14. mysql_real_escape_string($idReferido));
  15.  
  16. $data = mysql_query($query);
  17.  
  18. while ($fila = mysql_fetch_assoc($data)) {
  19.    echo $fila['nombre'];
  20.    echo $fila['apellidos'];
  21.    echo $fila['direccion'];
  22.    echo $fila['web'];
  23. }
  24.  
  25. ?>

No da ningún error, pero tampoco muestra nada, y he comprobado la id con la que estoy conectado y en la db esta esa id... debería de mostrar el contenido, pero no muestra nada ;(

Si cambio la variable '$connectedUserID' por el numero directamente si que muestra...

Gracias!

EDITO: Vale era problema del nombre que se usaba... idUsuario que no existia en la clase yii