Ver Mensaje Individual
  #6 (permalink)  
Antiguo 17/03/2014, 16:42
Avatar de guardarmicorreo
guardarmicorreo
 
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: A la hora de recorrer con foreach imprime una vez de más

Después de hacer pruebas como loco, encontré el problema.

Object_query es un método que tengo en la clase Connect.

Al utilizar en ese método $this->result se quedaba almacenado el array anterior y por eso unía ambos arrays que no tenían nada que ver.

Pero eso no tendría que suceder, puesto que estoy trabajando la clase con patrón singleton.

Dejo la clase y cómo la instancia para que alguien pueda decirme qué está sucediendo, ya que en teoría eso en el futuro me podría dar más errores por agotar la conexiones a la BD :S

Código PHP:
Ver original
  1. /*
  2.  *   CLASE PARA CONECTAR Y REALIZAR OPERACIONES EN LA BASE DE DATOS
  3.  */
  4. class Connect{
  5.     private $IDConexion;
  6.     private $Escapestr;
  7.     private $IDQuery;
  8.        
  9.         //para trabajar la clase con patron de diseño singleton
  10.         private static $instance;
  11.    
  12.     private function __construct(){
  13.         //establezco los datos de autenticación para acceder a la base de datos
  14.         $conexion = mysqli_connect("server", "user" , "password" , "database");
  15.        
  16.         //establezco el conjunto de caracteres a nivel de servidor en tiempo de ejecucion
  17.         mysqli_set_charset( $conexion, "utf8" );
  18.        
  19.         $this->IDQuery = $conexion;
  20.        
  21.         return $this->IDQuery;
  22.     }
  23.        
  24.         //para trabajar la clase con patron de diseño singleton
  25.         public static function Instance(){
  26.             if(self::$instance == NULL){
  27.                 self::$instance = new Connect();
  28.             }
  29.             return self::$instance;
  30.         }
  31.    
  32.     public function Escape( $string_escapar ){
  33.         //escapo caracteres para evitar sql injection
  34.         $string_escapar = trim( $string_escapar );
  35.         $escape = mysqli_real_escape_string( $this->IDQuery, $string_escapar );
  36.        
  37.          $this->Escapestr = $escape;
  38.        
  39.         return $this->Escapestr;
  40.     }
  41.    
  42.     public function Connect ( $string_consulta ){
  43.         //comprueba si se ha creado la conexion
  44.         if(!$this->IDQuery)
  45.         {
  46.             die('Error de conexion ('.mysqli_connect_errno().') '. mysqli_connect_error());
  47.         }
  48.         //conecta a la base de datos
  49.         $this->IDConsulta = mysqli_query($this->IDQuery , $string_consulta) OR die (mysqli_error($this->IDQuery));
  50.        
  51.                
  52.                
  53.         return $this->IDConsulta;
  54.     }
  55.        
  56.     public function Go_out (){
  57.         mysqli_close($this->IDQuery);
  58.     }
  59.        
  60.        
  61.         /*
  62.          * procesa el resultset de la consulta
  63.          * (devuelve un array indexado)
  64.          */
  65.         public  function Object_query($conexion){
  66.             if(mysqli_num_rows($conexion) !==0){
  67.  
  68.                 while ( $value = mysqli_fetch_array( $conexion, MYSQLI_ASSOC )){
  69.                     $result[] = $value;
  70.                 }
  71.             }
  72.             else{
  73.                 $result   = FALSE;
  74.             }
  75.  
  76.             return  $result;
  77.         }
  78. }

El método que recoge todas las subcategorias instancia así la clase connect

Código PHP:
Ver original
  1. /*
  2.      * obtiene todas las subcategories
  3.      */
  4.     public function read_subcategories(){
  5.         $this->sql  = "SELECT * FROM subcategories";
  6.        
  7.         $this->conexion = Connect::Instance()->connect($this->sql);
  8.        
  9.         $this->result   = Connect::Instance()->Object_query($this->conexion);
  10.        
  11.         return $this->result;
  12.     }

y así el método que recoge un post determinado

Código PHP:
Ver original
  1. /*
  2.      * selecciona un post por su id
  3.      */
  4.     public function read_post($idpost){
  5.         $this->idpost   = Connect::Instance()->Escape($idpost);
  6.        
  7.         $this->sql      = "SELECT * FROM posts WHERE idpost= $this->idpost";
  8.        
  9.         $this->conexion = Connect::Instance()->connect($this->sql);
  10.        
  11.         $this->result   = Connect::Instance()->Object_query($this->conexion);
  12.        
  13.         return $this->result;
  14.     }
__________________
Ayúdame a hacerlo por mi mismo.

Última edición por guardarmicorreo; 17/03/2014 a las 17:17