Home>

There is a Monoblocks table in a database, according to which the list of product goods cards should be displayed as a vertical list. All this happens with AJAX. The client is sent a string with a selected left side menu item and, depending on it, the right side menu and the central part with the entire list of selected categories of goods are displayed.

    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);
                        let centeroutput='<div id=\"topcenterarea\">'+'<h1>'+data.header+' '+data.countrecords+' товара'+'</h1>'+'</div>' + data.outputtext;
                        /*$('.centerarea').html('<div id=\"topcenterarea\">'+'<h1>'+data.header+' '+data.countrecords+' товара'+'</h1>'+'</div>');*/
                        $('.centerarea').html(centeroutput);
                        //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']) &amp;
&amp;
 $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);
            $query->execute();
            $return['outputtext']='<div style="width: 100%; border: 2px solid red">';
            while ($example=$query->fetch(PDO::FETCH_ASSOC))
            {
                //$return['querycontent']='<div style="width: 100%; border: 2px solid red"></div>';
                $return['outputtext'].='<div class="ProductCardBlock">';
                //присваивание данных $example[]
                $return['outputtext'].='</div>';
            };
            $return['outputtext'].='</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();
?>

В последнем блоке кода от сервера к клиенту передается html и css код, сформированный на сервере на основе выборки данных результатов sql запроса. Это плохой вариант. Правильно бы было получить выборку данных результата sql запроса на сервере и отослать их клиенту и на нем же (на клиенте) сформировать html и css код для вывода списка карточек продуктов-товаров. Каким образом (желательно привести все варианты на практике) осуществить передачу результатов sql запроса? <strong>Помимо результатов sql запроса должно передаваться число выбранных результатов.</strong>

  • Answer # 1

    in php can be transmitted so

    Return JSON_ENCODE ([
       'result'= >
     $ Return
       'some_data'= >
     $ some_var,
       'etc'= >
     $ etc.
     ]);
    

    And in the body of the SUCCESS get

    Success: Function (DATA) {
      If (Data.Result) {
        $ ('. Result'). HTML (Data.Result);
      }
      if (data.some_data) {
       $ ('. Some_Query'). HTML (Data.some_Data);
      }
    }
    
  • Answer # 2

    in php can be transmitted so

    Return JSON_ENCODE ([
       'result'= >
     $ Return
       'some_data'= >
     $ some_var,
       'etc'= >
     $ etc.
     ]);
    

    And in the body of the SUCCESS get

    Success: Function (DATA) {
      If (Data.Result) {
        $ ('. Result'). HTML (Data.Result);
      }
      if (data.some_data) {
       $ ('. Some_Query'). HTML (Data.some_Data);
      }
    }