@lesmanora

Что за ошибка в запросе?

В общем, есть запрос на вывод данных из БД, где статьи выводятся согласно категории (brand) и постранично. Только у меня допустим вместо 3 статей, выводится всего 2, а 3 теряется.

Вопрос, где накосячила?

Конкретно ошибка в этой строке кода:

$num = 9; // Здесь указываем сколько хотим выводить товаров.
    $page = $_GET['page'];              
   
	$count = mysqli_query($link, "SELECT COUNT(*) FROM `blog2` $where ");
    $temp = mysqli_fetch_array($count);

	If ($temp[0]>0)
	{  
	$tempcount =$temp[0];

	// Находим общее число страниц
	$total = (($tempcount - 1) / $num) + 1;
	$total =  intval($total);

	$page = intval($page);

	if(empty($page) or $page < 0) $page = 1;  
       
	if($page > $total) $page = $total;
	 
	// Вычисляем начиная с какого номера
    // следует выводить товары 
	$start = $page * $num - $num;
	$start++;
	$qury_start_num = " $where ORDER BY id DESC LIMIT $start, $num "; 
	
	}   else {
	$qury_start_num = " $where";
	$page=1;}


Весь код запроса:

spoiler

<?php
       
 
  if(!empty($cat))
{   
    $escaped_cat = mysqli_real_escape_string($link, $cat);
    $where = "WHERE `brand` = '$escaped_cat'";
}
else
    {
       $where = ''; 
    }
    if (!empty($cat))
    {
       $catlink = "cat=$cat&"; 
    }else
    {
       $catlink = ""; 
    } 
      
      
    $num = 9; // Здесь указываем сколько хотим выводить товаров.
    $page = $_GET['page'];              
   
	$count = mysqli_query($link, "SELECT COUNT(*) FROM `blog2` $where ");
    $temp = mysqli_fetch_array($count);

	If ($temp[0]>0)
	{  
	$tempcount =$temp[0];

	// Находим общее число страниц
	$total = (($tempcount - 1) / $num) + 1;
	$total =  intval($total);

	$page = intval($page);

	if(empty($page) or $page < 0) $page = 1;  
       
	if($page > $total) $page = $total;
	 
	// Вычисляем начиная с какого номера
    // следует выводить товары 
	$start = $page * $num - $num;
	$start++;
	$qury_start_num = " $where ORDER BY id DESC LIMIT $start, $num "; 
	
	}   else {
	$qury_start_num = " $where";
	$page=1;}           
 
     
$query ="SELECT * FROM blog2 $qury_start_num ";
 
$result = mysqli_query($link, $query) or die("Ошибка " . mysqli_error($link)); 


if (mysqli_num_rows($result) > 0)
{
 $row = mysqli_fetch_array($result); 
 
 do
 {
 
  	$img_pathh = './uploads_images/'.$row["image"];

 list($width, $height) = getimagesize($img_pathh); 
$ratioh = $max_height/$height; 
$ratiow = $max_width/$width; 
$ratio = min($ratioh, $ratiow); 

$width = intval($ratio*$width); 
$height = intval($ratio*$height); 
	
						 echo '	  
			
				
				<div class="col-md-4 state1 stateotst">
				
				<img src="'.$img_pathh.'"/>
				
				<div class="col-md-12 napdisnakart" >
					
					<time datetime="'.$row["date"].'" class="date-post">'.$row["date2"].'</time>
					
					<p><a href="lifestyle.php?id='.$row["id"].'&cat='.strtolower($row["brand"]).'">'.$row["title"].'</a></p>
					
				</div>
				
			</div>
			
			 ';
}
    while ($row = mysqli_fetch_array($result));
}							
?>



Кстати, если порекомендуете, где сейчас можно переучиться на PHP (курсы, книги, пособия) - буду благодарна, понимаю, что немного отстала...
  • Вопрос задан
  • 110 просмотров
Пригласить эксперта
Ответы на вопрос 2
dimonchik2013
@dimonchik2013
non progredi est regredi
выводи не только статью, но и ее номер - найдешь где ошибаешься цифрой
Ответ написан
Комментировать
@galaxy
With two arguments, the first argument specifies the offset of the first row to return, and the second specifies the maximum number of rows to return. The offset of the initial row is 0 (not 1):

https://dev.mysql.com/doc/refman/8.0/en/select.html

Т.е. в LIMIT строки нумеруются с нуля, а у вас, судя по коду, $start идет с 1.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы