Ошибка использования fetch-а
Есть главная страница сайта - см. https://jsfiddle.net/vladdvin/e120g4sq/3/. По щелчку на пункте левого бокового меню должно отображаться правое боковое меню и центральная часть с помощью ajax. Ниже приведена часть кода со страницы - http://testsite.ru/stackoverflowsite/html/testsite.html.
let subcategoryflag=''; <!--подкатегория меню-->
console.log(subcategoryflag); <!--отладка-->
$('.submenu__item a').on('click', function (event) {
event.preventDefault();
console.log('Inner check');<!--отладка-->
subcategoryflag=event.target.innerHTML; <!--присваивание текста подкатегории меню-->
$.ajax ({
method: 'POST',
url: '../php/ajaxsubcategory1.php',
cache: false,
data: {subcategoryflag: subcategoryflag}, <!--отсылка на сервер подкатегории меню, в зависимости от которой сервер посылет правое боковое меню-->
dataType: 'json',
complete: function(data) {<!--отладка ajax-->
console.log(data.header);
console.log(data.countrecords);
},
success: function (data) {
console.log('check');<!--отладка-->
console.log(data);<!--отладка-->
$('.rightmenu').html(data.msg);
$('.centerarea').html('<div id=\"topcenterarea\">' +'<h1>'+data.header+'</h1>'+data.countrecords+'товара'+'</div>'); <!-- присваивание блоку правого бокового меню-->
//expandCollapsedFunction();
}
}
);
}
);
// такой же код, что и код выше - только для черных пунктов меню типа Моноблоки
let categoryflag='';
$('.submenu__title a').on('click', function (event) {
event.preventDefault();
console.log('Inner check');
categoryflag=event.target.innerHTML;
subcategoryflag=categoryflag;
console.log(categoryflag);
$.ajax ({
method: 'POST',
url: '../php/ajaxsubcategory1.php',
cache: false,
data: {categoryflag: categoryflag, subcategoryflag: subcategoryflag},
dataType: 'json',
complete: function(data) {
console.log(data.header);
console.log(data.countrecords);
},
success: function (data) {
console.log('check');
console.log(data);
$('.rightmenu').html(data.msg);
$('.centerarea').html('<div id=\"topcenterarea\">'+'<h1>'+data.header+'</h1>'+data.countrecords+'товара'+'</div>');
//expandCollapsedFunction();
}
}
);
}
);
<?php
class ajaxValidate {
function formValidate() {
//Put form elements into post variables (this is where you would sanitize your data)
$categoryflag=$_POST['categoryflag'];
$subcategoryflag = $_POST['subcategoryflag'];
//Establish values that will be returned via ajax
$return = array();
$return['msg'] = '';
$return['error'] = false;
$return['querycontent']='';
$return['header']='Моноблоки';
$return['countrecords']=0;
require_once('config.php');
$pdo = new PDO($dsn, $user, $password);
//Begin form validation functionality
if (!isset($subcategoryflag) || empty($subcategoryflag)){
$return['error'] = true;
$return['msg'] .= '<li>Error: Field1 is empty.</li>';
}
//Begin form success functionality
if ((!$return['error']) && $subcategoryflag=='Моноблоки'){
$return['msg'] = ' <div><div class="FilterContainer"><div class="FilterSeoGroup FilterSeoGroup__seo" id="popularCollections"><h4 class="FilterSeoGroup__header">Популярные подборки</h4><div class="FilterSeoGroup__group_closed"><div class="FilterSeoGroup__item-wrapper"><a class="FilterSeoGroup__item" href="https://www.citilink.ru/catalog/monobloki--nedorogie-monobloki/">Недорогие</a></div><div class="FilterSeoGroup__item-wrapper"><a class="FilterSeoGroup__item" href="https://www.citilink.ru/catalog/monobloki--dlya-doma-m/">Для дома</a></div><div class="FilterSeoGroup__item-wrapper"><a class="FilterSeoGroup__item" href="https://www.citilink.ru/catalog/monobloki--dlya-ofisa-m/">Для офиса</a></div><div class="FilterSeoGroup__item-wrapper"><a class="FilterSeoGroup__item" href="https://www.citilink.ru/catalog/monobloki--win/">с Windows</a></div><div class="FilterSeoGroup__item-wrapper"><a class="FilterSeoGroup__item" href="https://www.citilink.ru/catalog/monobloki--imac/">Apple iMac</a></div></div><div class="FilterSeoGroup__toggle-container"><button class="FilterSeoGroup__toggle-button buttonStyleDecorator buttonStyleDecorator_theme_ghostOrange buttonStyleDecorator_size_s Button" name="" type="submit" value="" tabindex="0" borderstyle="none"><span class="buttonStyleDecorator__text ">Показать все</span></button></div></div></div></div>'
}
$sql='SELECT * FROM monoblocks';
$query=$pdo->prepare($sql);
$result=$query->execute();
while ($example=$result->fetch(PDO::FETCH_ASSOC))
{
$return['querycontent']='<div style="width: 100%; border: 2px solid red"></div>';
};
$sqlcountrecords = 'SELECT COUNT(*) as count FROM monoblocks';
$querycountrecords=$pdo->prepare($sqlcountrecords);
$querycountrecords->execute();
$return['countrecords']=$querycountrecords->fetch(PDO::FETCH_ASSOC)['count'];
//Return json encoded results
return json_encode($return);
}
}
$ajaxValidate = new ajaxValidate;
echo $ajaxValidate->formValidate();
?>
В результате после перехода по ссылке Ноутбуки и компьютеры -> Моноблоки вместо отображения правого бокового меню и центральной части возникает ошибка
<br />
Fatal error: Uncaught Error: Call to a member function fetch() on boolean in C:\OSPanel\domains\testsite.ru\stackoverflowsite\php\ajaxsubcategory1.php:48
Stack trace:
#0 C:\OSPanel\domains\testsite.ru\stackoverflowsite\php\ajaxsubcategory1.php(66): ajaxValidate->formValidate()
#1 {main}
thrown in C:\OSPanel\domains\testsite.ru\stackoverflowsite\php\ajaxsubcategory1.php on line 48
(строка while ($example=$result->fetch(PDO::FETCH_ASSOC)))
Но на https://www.php.net/manual/ru/pdostatement.fetch.php написано, что использование fetch в виде $example=$result->fetch(PDO::FETCH_ASSOC) допустимо
Подскажите как устранить ошибку использования fetch.
