New question

Question:

Date: 11-03-2016 07:04:39 (In Spanish)

Paginación PHP y MySQL - muestra los mismo resultados[Resolved]

Hola como les va, tengo un problema con la pagina muestra el numero de paginas de acuerdo al registro en mi bases de datos, muestra la información pero al momento de pasar de una pagina a otra muestra siempre el mismo resultado no, cambian los resultados en la pagina siguiente, por favor agradeceria su ayuda,

ProductData.php
<?php
class ProductData {
	public static $tablename = "product";


	public function ProductData(){
		$this->title = "";
		$this->content = "";
		$this->image = "";
		$this->link = "";
		$this->category_id = "";
		$this->is_public = "0";
		$this->created_at = "NOW()";
	}

	public function getUnit(){ return UnitData::getById($this->unit_id);}

	public function add(){
		$sql = "insert into ".self::$tablename." (short_name,code,name,description,image,price,link,category_id,unit_id,is_public,in_existence,is_featured,created_at) ";
		$sql .= "value (\"$this->short_name\",\"$this->code\",\"$this->name\",\"$this->description\",\"$this->image\",\"$this->price\",\"$this->link\",$this->category_id,$this->unit_id,$this->is_public,$this->in_existence,$this->is_featured,$this->created_at)";
		Executor::doit($sql);
	}

	public static function delById($id){
		$sql = "delete from ".self::$tablename." where id=$id";
		Executor::doit($sql);
	}
	public function del(){
		$sql = "delete from ".self::$tablename." where id=$this->id";
		Executor::doit($sql);
	}

// partiendo de que ya tenemos creado un objecto ProductData previamente utilizamos el contexto
	public function update(){
		$sql = "update ".self::$tablename." set code=\"$this->code\",name=\"$this->name\",description=\"$this->description\",link=\"$this->link\",price=\"$this->price\",in_existence=\"$this->in_existence\",is_public=\"$this->is_public\",is_featured=\"$this->is_featured\",unit_id=\"$this->unit_id\",category_id=\"$this->category_id\" where id=$this->id";
		Executor::doit($sql);
	}

	public function update_image(){
		$sql = "update ".self::$tablename." set image=\"$this->image\" where id=$this->id";
		Executor::doit($sql);
	}

	public static function getById($id){
		$sql = "select * from ".self::$tablename." where id=$id";
		$query = Executor::doit($sql);
		return Model::one($query[0],new ProductData());
	}



	public static function getAll(){
		$sql = "select * from ".self::$tablename." order by created_at desc";
		$query = Executor::doit($sql);
		return Model::many($query[0],new ProductData());
	}

	
	public static function getPublicsByCategoryId($id,$limit){
		$sql = "select * from ".self::$tablename." where category_id=$id and is_public=1 limit $limit";
		$query = Executor::doit($sql);
		return Model::many($query[0],new ProductData());
	}
	
	
	public static function get4News(){
		$sql = "select * from ".self::$tablename." where is_new=1 and is_public=1 order by created_at desc limit 4";
		$query = Executor::doit($sql);
		return Model::many($query[0],new ProductData());
	}

	public static function get4Offers(){
		$sql = "select * from ".self::$tablename." where is_offer=1 and is_public=1 order by created_at desc limit 4";
		$query = Executor::doit($sql);
		return Model::many($query[0],new ProductData());
	}

	public static function getNews(){
		$sql = "select * from ".self::$tablename." where is_new=1 and is_public=1 order by created_at desc limit 4";
		$query = Executor::doit($sql);
		return Model::many($query[0],new ProductData());
	}

	public static function getFeatureds(){
		$sql = "select * from ".self::$tablename." where is_featured=1 and is_public=1 order by created_at desc limit 6";
		$query = Executor::doit($sql);
		return Model::many($query[0],new ProductData());
	}


	public static function getLike($q){
		$sql = "select * from ".self::$tablename." where name like '%$q%' or description like '%$q%'";
		$query = Executor::doit($sql);
		return Model::many($query[0],new ProductData());
	}


}

?>



index.php
<?php 
$limit=6;
if(isset($_GET["limit"]) && $_GET["limit"]!="" && $_GET["limit"]!=$limit){
	$limit=$_GET["limit"];
}
if(isset($_GET["cat"])){
$cat = CategoryData::getByPreffix($_GET["cat"]);

$products = ProductData::getPublicsByCategoryId($cat->id,$limit);
}else if(isset($_GET["opt"])){
if($_GET["opt"]=="news"){
$products = ProductData::getNews();
}
else if($_GET["opt"]=="offers"){
$products = ProductData::getOffers();
}
}else if(isset($_GET["act"]) && $_GET["act"]=="search"){
$products = ProductData::getLike($_GET["q"]);

}

			$users = ProductData::getAll();
$page = 1;
if(isset($_GET["page"])){
	$page=$_GET["page"];
}
			
			
 ?>
  <div class="col-md-11">
  <div Style="max-width: 1030px;margin-right:auto;margin-left:auto;">
  <div class="col-md-3">
         <div class="category-products panel-default" >
   <h3 class="panel-heading panel-title">  Categories </h3>
	

<?php
$cats = CategoryData::getPublics();
?>
<?php if(count($cats)>0):?>
<div class="list-group">
<?php foreach($cats as $cat):?>
 <a href="index.php?view=productos&cat=<?php echo $cat->short_name; ?>" class="list-group-item">  <p> <i class=""></i> <?php echo $cat->name; ?></p></a>
<?php endforeach; ?>
</div>
<?php endif; ?>
      </div>
  </div>
 <div class="col-md-7">

    <div class="panel panel-default">
        <div class="panel-heading">
            <h3 class="panel-title"> Featured Products </h3>
        </div>
		
        <div class="panel-body">
            <div class="row listado">
		
			<?php

if(count($users)>0){

if($page==1){
	
	    $curr_users = ProductData::getPublicsByCategoryId(0,$limit);

}else{
$curr_users = ProductData::getPublicsByCategoryId($users[($page-1)*$limit]->id,$limit);

}
$npaginas = floor(count($users)/$limit);
 $spaginas = count($users)%$limit;
if($spaginas>0){ $npaginas++;}

}		

?>
			
			
<?php
$nproducts = count($products);
$filas = $nproducts/3;
$extra = $nproducts%3;
if($filas>1&& $extra>0){ $filas++; }
$n=0;
?>
<?php for($i=0;$i<$filas;$i++):?>
  <div class="row">
<?php for($j=0;$j<3;$j++):
$p=null;
if($n<$nproducts){
$p = $products[$n];
}
?>
<?php if($p!=null):
$img = "admin/storage/products/".$p->image;
?>
  <div class="col-sm-4 col-md-4 col-lg-4" > 
  
 <div class="thumbnail"> 
 <center>   <img src="<?php echo $img; ?>"class="img-responsive" style="height: 180px; width: 90%"> </center>
 <center>  
  <div class="caption "> 
<h4> 
  <a href="index.php?view=producto&product_id=<?php echo $p->id; ?>">   <?php echo $p->name; ?></h4> 
 </a>
  </div>
  </center>
<div class="price"> 
<h4>$ <?php echo number_format($p->price,2,".",","); ?>
</h4>
</div>
<div class="ratings"> 
<?php 
$in_cart=false;
if(isset($_SESSION["cart"])){
  foreach ($_SESSION["cart"] as $pc) {
    if($pc["product_id"]==$p->id){ $in_cart=true;  }
  }
  }
  ?>

<?php
 if(!$p->in_existence):?>

<a href="javascript:void()" class="btn btn-labeled btn-sm btn-warning tip" title="No disponible">
                <span class="btn-label"><i class="glyphicon glyphicon-shopping-cart"></i></span>No Disponible</a>


		  <?php elseif(!$in_cart):?>
<?php else:?>

<center><a href="javascript:void()" class="btn btn-labeled btn-sm btn-success tip" title="Already in the Cart">
                <span class="btn-label"><i class="glyphicon glyphicon-shopping-cart"></i></span> aggregated </a>
<?php endif; ?>
</div>	
</div>
<br>
                </center>
   </div>
<?php endif; ?>
<?php $n++; endfor; ?>
  </div>
<?php endfor; ?>
  <h5>Pagina <?php echo $page." de ".$npaginas; ?></h5>
<?php
$px=$page-1;
if($px>0):
?>
<a class="btn btn-sm btn-default" href="<?php echo "index.php?view=productos&cat=sam&limit=$limit&page=".($px); ?>"><i class="glyphicon glyphicon-chevron-left"></i> Atras </a>
<?php endif; ?>

<?php 
$px=$page+1;
if($px<=$npaginas):
?>
<a class="btn btn-sm btn-default" href="<?php echo "index.php?view=productos&cat=sam&limit=$limit&page=".($px); ?>">Adelante <i class="glyphicon glyphicon-chevron-right"></i></a>
<?php endif; ?>

<br>
<?php

for($i=0;$i<$npaginas;$i++){
	echo "<a href='index.php?view=productos&cat=sam&limit=$limit&page=".($i+1)."' class='btn btn-default btn-sm'>".($i+1)."</a> ";
}
?>
  </div>
  </div>
  </div>
  			</div>
        </div>
</div>
Tags: MySQL - Pagination - PHP - Question Votes: 1 - Answers: 5 - Views: 15 Share on: Google Facebook Twitter LinkedIn Link
 

Answers:

  • Date: 11-03-2016 10:52:17 Jose, te invito a leer: ¿Cómo cargar correctamente una nueva pregunta? [LEER]

    Transcribo algunas líneas:
    * Tener foto de perfil: parece algo sin importancia, pero la tiene, ya que estamos comunicandonos a travez de un medio frio e inhumano (como lo es Internet) es aconsejable tener una foto de peril acorde a nuestra persona. Vale aclarar que muchas veces fotos que son aptas para Facebook u otro tipo de redes sociales pueden no serlo para PHPCentral, imagenes de desnudes o provocativas puden servir para ganar una chica en Facebook pero para esta comunidad son una mala idea... También nuestra imagen nos ayudará a ser recordados, muchos podrán no recordar nuestro nombre, pero al ver nuestra imagen seguramente nos recordarán...

    Les agradezco una foto de perfil actualizada y profesional, y creo que la comunidad también lo agradece.

    Saludos a todos!
      Votes: 1 - Link answer
     
  • Date: 11-03-2016 16:30:26 Hola Jose, no he analizado tu código en profundidad, pero a simple vista veo algunas inconsistencias en la clase "ProductData", observo que en algunas partes invocas "$this->unit_id" y en otras partes "$this->id" pero en ningun lado estas propiedades han sido definidas/seteadas, no se de donde las tomas, proque tapoco utilizas herencia....

    Lo que te recomiendo aquí es que reveas el código y los "ajustes" a lo que estas intentando realizar, muy importante es ver si el script arroja algun error (también deberías comentarlo aquí) como así también tratar de ser lo mas especifico posible con "lo que no funciona".

    Espero tus comentarios.

    Saludos,

    PD: muchas gracias por cambiar la foto de perfil!
      Votes: 0 - Link answer
     
  • Date: 11-03-2016 17:07:11 el codigo funciona tal cual, amigo muestra lo que tiene que mostrar de acuerdo al limit q es 6, pero al pasar a la pagina 2, no muestra si no la misma informacion, creo que el problema lo tengo aca:
    		<?php
    
    if(count($users)>0){
    
    if($page==1){
    	
    	    $curr_users = ProductData::getPublicsByCategoryId(0,$limit);
    
    }else{
    $curr_users = ProductData::getPublicsByCategoryId($users[($page-1)*$limit]->id,$limit);
    
    }
    $npaginas = floor(count($users)/$limit);
     $spaginas = count($users)%$limit;
    
    
    if($spaginas>0){ $npaginas++;}
    
    
    
    }		
    
    
    ?>
    			
    			
    
    
    
    <?php
    
    	
    $nproducts = count($products);
    $filas = $nproducts/3;
    $extra = $nproducts%3;
    if($filas>1&& $extra>0){ $filas++; }
    $n=0;
    
    
    ?>
    <?php for($i=0;$i<$filas;$i++):?>
      <div class="row">
    <?php for($j=0;$j<3;$j++):
    $p=null;
    if($n<$nproducts){
    $p = $products[$n];
    }
    ?>
    <?php if($p!=null):
    $img = "admin/storage/products/".$p->image;
    ?>
    
    
    
    
    
    
    


    unit_id = es un campo que lleva una relacion.
    no se muy bien como hacer para que en cada pagina muestra el resultado segun el limit, establecido al inicio del script.
    No me muestra ningun error.
      Votes: 0 - Link answer
     
  • Date: 12-03-2016 11:37:00 Hola ¿Por qué haces esto?
    $curr_users = ProductData::getPublicsByCategoryId($users[($page-1)*$limit]->id,$limit);
    
    , si estás paginando según la lógica que estas usando deberías pasar la página (Sólo $page-1), en las sql para establecer paginación y límite. Se usa algo como:
    select columna from tabla limit pagina,cantidad;
    , como notarás nunca tu SQL está paginando sólo esta cambiando de categoría y poniendo limit llano, es decir, cuantos registros quiere que retorne pero siempre partiendo de cero (si no indicas la pagina comienza desde cero), creo que tu función requiere tres parámetros: categoría, página y limite y no dos por lo que puedo medio entender de tu código
      Votes: 1 - Link answer
     
  • Date: 18-03-2016 16:01:03 tienes razon amigo, pero no logro hacer que me ande me echas una mano con esto por favor.
    aqui envio el id de la categoria para q se me muestren los productos,

    $page = 1;
    if(isset($_GET["page"])){
    	$page=$_GET["page"];
    }
    		
    $limit=6;
    
    
    if(isset($_GET["cat"])){
    $cat = CategoryData::getByPreffix($_GET["cat"]);
    
    $products = ProductData::getPublicsByCategoryId($cat->id,$limit);
    
    
    





    por otro lado tengo la consulta donde mencionas que deben de ir los tres parámetros: categoría, página y limite, no se de verdad como pasar el parametro de la pagina, ya q no me deja pasar 3 paramentros: solo envio id categoria, y limite;


    	public static function getPublicsByCategoryId($id,$limit){
    
    		$sql = "select * from ".self::$tablename." where category_id=$id and is_public=1 order by category_id asc limit $limit ";
    		$query = Executor::doit($sql);
    		return Model::many($query[0],new ProductData());
    	}
    
    
    
      Votes: 1 - Link answer
     
To actively participate in the community first must authenticate, enter the system.Sign In