Foros del Web » Programando para Internet » PHP »

ayuda con clase para devolver registros para imprimir

Estas en el tema de ayuda con clase para devolver registros para imprimir en el foro de PHP en Foros del Web. Hola a todos, resulta que estoy con un gran problema, tengo que trabajar con PHP + Mssql y para el tema de paginacion es horrible ...
  #1 (permalink)  
Antiguo 09/09/2010, 08:25
 
Fecha de Ingreso: abril-2009
Mensajes: 409
Antigüedad: 15 años, 7 meses
Puntos: 3
ayuda con clase para devolver registros para imprimir

Hola a todos, resulta que estoy con un gran problema, tengo que trabajar con PHP + Mssql y para el tema de paginacion es horrible porque no tiene el limit el MSsql, encontre una clase que pagina con PHP y anda bastante bien, el tema es que yo necesito que me devuelva los resultados de tal manera que pueda aplicarlo un WHILE y asi imprimir los resultados, en este momento los devuelve en un array y para mostrarlo hay que hacerlo con foreach.
ahi pongo la funcion que da los resultados a ver si me pueden ayudar. Si necesitan la clase completa la pongo igual es chiquita. Saludos.

// returns the records for the current page
function get_page_result() {

if( $this->set_page() != 0 ){
$this->seek = $this->set_page() * $this->num_per_page;
//$seek++;
}

$this->result = mssql_query($this->sql);
mssql_data_seek($this->result, $this->seek);
//return $this->result;

for($rv=1;$rv<=$this->num_per_page;$rv++){
$row=mssql_fetch_row($this->result);
$returnarray[]=$row;
// echo "{$row[1]}-{$row[]}<br>";
}

return $returnarray;



}


espero que me puedan ayudar porque es un lio esto la verdad , nadie sabe como paginar en MSsql por ese tema.

Saludos y gracias.
  #2 (permalink)  
Antiguo 09/09/2010, 09:10
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: ayuda con clase para devolver registros para imprimir

Hola
bueno, en cuanto al limit, revisa esto

en cuanto al foreach, no lo veo, lo más parecido es el for, sera eso a lo que te refieres?
si lo quieres cambiar a while, intenta esto

Código PHP:
Ver original
  1. $rv=1;
  2. while( $rv<=$this->num_per_page )
  3. {
  4. $row=mssql_fetch_row($this->result);
  5. $returnarray[]=$row;
  6. // echo "{$row[1]}-{$row[]}<br>";
  7. $rv++;
  8. }

saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #3 (permalink)  
Antiguo 09/09/2010, 09:26
 
Fecha de Ingreso: abril-2009
Mensajes: 409
Antigüedad: 15 años, 7 meses
Puntos: 3
Respuesta: ayuda con clase para devolver registros para imprimir

a ver, yo lo que necesito no me explique bien creo, yo ejecuto esa clase y para sacar los resultados asi como esta seria de esta manera:

$result = $test->get_page_result(); // result set



// displaying records in a table
echo "<table border=1>";

foreach($result as $key=>$val){
echo "<tr>";
foreach($val as $key2=>$val2)
echo "<td>$val2</td>";
echo "</tr>";
}

echo "</table>";

yo lo que necesito es que sea : while($row = $test->get_page_result()){
echo $row[1]; etc.
}


hay forma para que la clase me deje hacer eso?. en mysql esta armado asi.

Saludos y muchas gracias
  #4 (permalink)  
Antiguo 09/09/2010, 09:36
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: ayuda con clase para devolver registros para imprimir

ahm, bueno, pues entonces según entiendo, la clase te devuelve un doble array,
en cuyo caso para convertir esos foreach en while, usaría count(array) para saber cuantos elementos tiene ese array, pero como es doble, por dentro tendría otro while con el count de cada posición del array "madre", es decir, se cambiaría el doble foreach por doble while

pues en cualquier caso parece engorroso el asunto, optaría por cambiar la clase, pero pues
no se que tanto vas de tiempo y eso para que te pongas a ello
saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #5 (permalink)  
Antiguo 09/09/2010, 09:39
 
Fecha de Ingreso: abril-2009
Mensajes: 409
Antigüedad: 15 años, 7 meses
Puntos: 3
Respuesta: ayuda con clase para devolver registros para imprimir

mira el tema que con mssql y php no hay nada en paginacion porque es un lio , esta clase la encontre y anda bien el tema es la impresion que es muy engorrosa asi. pongo la clase entera que es chica a ver si alguien que sepa mucho o vos puede hacer que la salida de los datos sea mas manejable que seria lo unico que le faltaria.

Código PHP:
require('db_config.php');
error_reporting(E_ALL); // only for testing

class MssqlPagina {
    
    
    var 
$sql;
    var 
$result;
    
    var 
$get_var QS_VAR;
    var 
$num_per_page NUM_ROWS;        //Records per page
    
    
var $tot_num_rows;        //Total number of rows
    
var $page_no;            //Current page no
    
var $num_of_pages;        //No of Pages
    
var $seek;            //Position where we have to display records
    
    
    
    // constructor
    
function MssqlPagina() {
        
$this->connect_db();
    }
    
    
    
// database connection
    
function connect_db() {
        
$conn_str mssql_connect(DB_SERVERDB_USERDB_PASSWORD);
        
mssql_select_db(DB_NAME$conn_str);
    }
    
    
    
// sets the current page number
    
function set_page() {
        
$this->page_no = (isset($_REQUEST[$this->get_var]) && $_REQUEST[$this->get_var] != "") ? $_REQUEST[$this->get_var] : 0;
        return 
$this->page_no;
    }
    
    
    
// gets the total number of records 
    
function get_total_rows() {
        
$tmp_result mssql_query($this->sql);
        
$this->tot_num_rows mssql_num_rows($tmp_result);
        
mssql_free_result($tmp_result);
        return 
$this->tot_num_rows;
    }
        
    
    
// get the total number of result pages
    
function get_num_pages() {
        
$this->num_of_pages ceil($this->get_total_rows() / $this->num_per_page);
        return 
$this->num_of_pages;
    }
    
    
    
    
    
// returns the records for the current page
    
function get_page_result() {
    
    if( 
$this->set_page() != ){
        
$this->seek $this->set_page() * $this->num_per_page;
        
//$seek++;
        
}
        
        
$this->result mssql_query($this->sql);
        
mssql_data_seek($this->result$this->seek);
        
//return $this->result;
        
        
for($rv=1;$rv<=$this->num_per_page;$rv++){
        
$row=mssql_fetch_row($this->result);
        
$returnarray[]=$row;
        
//echo "{$row[0]}-{$row[1]}<br>";
        
}
        
        return 
$returnarray;
        
        
        
    }
    
    
        
// function to handle other querystring than the page variable
    
function rebuild_qs($curr_var) {
        if (!empty(
$_SERVER['QUERY_STRING'])) {
            
$parts explode("&"$_SERVER['QUERY_STRING']);
            
$newParts = array();
            foreach (
$parts as $val) {
                if (
stristr($val$curr_var) == false)  {
                    
array_push($newParts$val);
                }
            }
            if (
count($newParts) != 0) {
                
$qs "&".implode("&"$newParts);
            } else {
                return 
false;
            }
            return 
$qs// this is your new created query string
        
} else {
            return 
false;
        }
    } 
    
    
    
// function to show navigation
    
function show_navigation($displayname "Page"){
    
$var $this->get_var;
    
    for(
$PageCount=0;$PageCount<$this->get_num_pages();$PageCount++)
        {
        echo 
" | ";
        echo 
"<a href=\"".$_SERVER['PHP_SELF']."?".$this->get_var."=".$PageCount.$this->rebuild_qs($var)."\">$displayname ".($PageCount+1)."</a>";    
        echo 
" | ";
        }
    }
    
    
// free the database result
    
function free_page_result() {
        
mssql_free_result($this->result);
    }
    


desde ya muchisimas gracias...
  #6 (permalink)  
Antiguo 09/09/2010, 09:48
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: ayuda con clase para devolver registros para imprimir

bueno, yo con gusto me pondría a ello, pero no tengo ese motor de base de datos instalado
espero alguien que si lo tenga pase por aquí y se anime
saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #7 (permalink)  
Antiguo 09/09/2010, 10:06
 
Fecha de Ingreso: abril-2009
Mensajes: 409
Antigüedad: 15 años, 7 meses
Puntos: 3
Respuesta: ayuda con clase para devolver registros para imprimir

muchisimas gracias por las ganas , ojala alguien pueda arreglarla porque seria util para mucha gente ya que no hay nada sobre paginacion sobre MSSQL, igualmente te hago una consulta ahi get_page_result() devuleve un array multiple , no hay otra forma de imprimirlo que no sea con forech? porque ahi esta el tema , si se podria mejorar eso listo .

Saludos y gracias nuevamente.
  #8 (permalink)  
Antiguo 09/09/2010, 10:23
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: ayuda con clase para devolver registros para imprimir

pues como te comente, con doble while, haciendo un count sobre cada array,
y en cada ciclo de los while sería la posición de ambos arrays (el madre primero, y luego internamente, las n posiciones que tenga cada hijo)
saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #9 (permalink)  
Antiguo 09/09/2010, 10:35
 
Fecha de Ingreso: abril-2009
Mensajes: 409
Antigüedad: 15 años, 7 meses
Puntos: 3
Respuesta: ayuda con clase para devolver registros para imprimir

si no es mucha molestias podrias ponerme la funcion de salida reformado como decis vos y despues como aplicarla para mostrar los resultados?.

Desde ya muchisimas gracias, yo el tema de clase no se casi nada por ahora.

Saludos.
  #10 (permalink)  
Antiguo 09/09/2010, 14:22
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: ayuda con clase para devolver registros para imprimir

Bueno, sería algo así

Código PHP:

// displaying records in a table
echo "<table border=1>";

$i 0;
//total of records of first array
$j count($result);
while( 
$i $j )
    {
    
$k=0;
    
//second array
    
$otroresult $result[$i];
    
//total of records of second array
    
$l count($otroresult);
    echo 
"<tr>";
    while( 
$k $l )
    {
        echo 
"<td>$otroresult[$k]</td>";
        
$k++;
    }
    
$i++;
    echo 
"</tr>";
}

echo 
"</table>"
pruebalo y comentas
saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com

Última edición por mortiprogramador; 09/09/2010 a las 14:30
  #11 (permalink)  
Antiguo 09/09/2010, 18:18
 
Fecha de Ingreso: abril-2009
Mensajes: 409
Antigüedad: 15 años, 7 meses
Puntos: 3
Respuesta: ayuda con clase para devolver registros para imprimir

ahi me estaria imprimiendo todas las columnas de la base no? si es asi, como y hago para imprimir solo las columnas qeu quiero osea $row[1],$row[2] y asi las que necesite...

Saludos y gracias. mañana pruebo esto a ver como serai pero lo que me intereza a mi es imprimir columna por columna como haria con el while.
  #12 (permalink)  
Antiguo 09/09/2010, 18:26
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: ayuda con clase para devolver registros para imprimir

estaria haciendo lo mismo que los foreach
para imprimir por ej el campo1 de cada grupo de registros,
no uses el segundo while,
simplemente imprime $otroresult[1]
intenta con eso
saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com

Etiquetas: clase, devolver, registros
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 21:35.