Как я могу запустить PHP-код в определенном разделе html

#php #html #jquery

#php #HTML #jquery

Вопрос:

У меня есть раздел на моей странице .html, где я хочу запустить некоторый PHP-код, который считывает данные из базы данных и «повторяет» таблицу, заполненную этой информацией. Я вроде как сделал это объектно-ориентированным, поэтому я пытаюсь сохранить это в проекте.

У меня есть эта точная функция или метод в классе (Class Servicio):

     public static function listaServicios(){
        
        $servicios = array();

        $query = "";

        $db = Database::getInstance();

        $query = "SELECT descripcion, precio FROM servicio";

        $resultado = $db->conn()->query($query);       

        foreach($resultado as $item){
            $servicio = new Servicio();
            $servicio->setDescripcion($item['descripcion']);
            $servicio->setPrecio($item['precio']);

            array_push($servicios,$servicio);
        }
        return $servicios;
    }
  

Как вы можете видеть, функция просто возвращает массив, заполненный таким количеством объектов, сколько строк есть в таблице. Страница PHP вызовет этот метод, а затем напечатает таблицу с выбранными данными внутри (с этим проблем нет).

Дело в том, как я могу распечатать его в указанном ранее разделе (div с id =’datos’), который просто:

 <section class="principal">

    <div id="datos">

    </div>

</section>
  

У меня вроде как есть идея, но я действительно не знаю, как ее реализовать. Возможно, с помощью функции document.ready в jQuery, вызывающей PHP-код? Я бы действительно хотел использовать этот язык, даже если это очень маленькая функция для изучения.

Комментарии:

1. » Я бы действительно хотел использовать этот язык » Вы имеете в виду jQuery? Если это так, вам нужно заглянуть в Ajax. Если нет, то самым простым и правильным способом было бы изменить ваш .html файл на .php файл и вызвать его напрямую.

2. Я кое-что сделал с jQuery на другой странице, поэтому я хотел бы поддерживать поток и учиться. Спасибо

Ответ №1:

Вы можете использовать функцию загрузки jquery для загрузки содержимого через удаленный файл в div. Но вам нужно будет обновить свой listaServicios , чтобы возвращать html вместо массива.

jquery:

 $(document).ready(function(){
   $('#datos').load('phpfile.php');
});
  

phpfile.php

 <?php
   $serv = new Servicio();
   echo $serv->listaServicios();
?>
  

Комментарии:

1. Я думал в кс го на .файл php: <?php include_once «clases/servicio.php»; $tabla; //table $servicios = Servicio::listaServicios(); //Fill data echo $tabla; ?> Как вы думаете, это нормально?

2. @DannAsekas, да, однако вам нужно реализовать PHP. Мой PHP был скорее примером, чтобы показать вам, как использовать отдельный файл php.

Ответ №2:

Правильный ответ на ваш вопрос зависит от интерфейса вашего будущего приложения, которого вы хотите достичь. Если вы хотите какой-то SPA, то вам следует выполнять AJAX-запросы с использованием JavaScript (jQuery или что-то еще) и создать отдельный контроллер для ответа данными.

Но я думаю, что в вашем конкретном случае вы можете делать все на стороне сервера. Прежде всего, вы должны добавить новый метод в свой класс, name например, render:

 public static function render(){
    $services = static::listaServicios();
    include 'path/to/your/template.php';
}
  

Затем внутри вашегоtemplate.php напишите следующий:

 <section class="principal">

    <div id="datos">
        <?php 
             foreach($services as $service) {
                  // echo your $service here as you wish
             }
        ?>
    </div>

</section>
  

Итак, после вызова render() PHP отобразит эту часть шаблона.

Ответ №3:

Для доступа к свойствам Servicio лучше создать свою таблицу на php:

 <?php $servicios = Servicio::listaServicios(); ?>
<section class="principal">
  <div id="datos">
    <table style="width:100%">
      <tr>
        <th>Descripcion</th>
        <th>Precio</th>
      </tr>
      <?php foreach ($servicios as $servicio): ?>
        <tr>
          <td><?= $servicio->getDescripcion() ?></td>
          <td><?= $servicio->getPrecio() ?></td>
        </tr>
      <?php endforeach; ?>
    </table>
  </div>
</section>