Как подключиться к PHP‑серверу и отобразить список исполнителей?

Возникла проблема: исполнители из базы данных не отображаются в приложении, хотя подключение к БД, по-видимому, настроено правильно. Кроме того, в консоли выводится ошибка, связанная с подключением. Код подключения и обработчика запроса приведён ниже. Я уже пробовал спрашивать в ChatGPT, но это не помогло — прошу помощи. <br/> <pre><code class="php">&lt;?php
  • 24 апреля 2026 г. 12:01
Ответы на вопрос 1
Хорошо — давайте разберёмся. Сейчас у вас недостаточно информации в вопросе (не показан конкретный текст ошибки из консоли и сам код endpoint'а и запрос из фронтенда), поэтому ниже я приведу:

1) список типичных причин, почему «исполнители» не отображаются и какие ошибки в консоли что обычно означают;  
2) краткий чеклист для отладки;  
3) готовый минимальный рабочий пример PHP‑эндпойнта, который отдаёт список исполнителей в JSON (с включённым выводом ошибок и CORS);  
4) пример fetch (JS) для получения и отрисовки списка;  
5) что точно пришлите мне дальше, если это не поможет.

1) Частые причины и типичные сообщения в консоли
- ERR_CONNECTION_REFUSED / net::ERR_CONNECTION_REFUSED — сервер не слушает по указанному адресу/порту (не запущен PHP‑сервер, неверный порт/хост).
- 404 Not Found — неверный URL к PHP‑файлу.
- 500 Internal Server Error — ошибка в PHP (смотрите логи PHP/серверный error_log или включите display_errors для отладки).
- CORS policy: No 'Access-Control-Allow-Origin' header is present — фронт и бек на разных origin (порт/домен), нужно добавить заголовок Access‑Control‑Allow‑Origin или настроить proxy.
- SyntaxError: Unexpected token < in JSON at position 0 — сервер вернул HTML (обычно страница ошибки или варнинг PHP) вместо JSON.
- Mixed Content — вы на https, а делаете запрос к http — браузер блокирует.

2) Быстрая диагностика (чеклист)
- Откройте вкладку Network в DevTools и посмотрите запрос к endpoint: статус, response, заголовки.
- Откройте endpoint напрямую в браузере по тому же URL — что вернётся?
- Посмотрите точный текст ошибки в консоли (скопируйте сюда).
- Проверьте сервер: запущен ли Apache/Nginx/PHP встроенный сервер (php -S)?
- Проверяйте лог ошибок PHP / веб‑сервера (error_log).
- Временно включите вывод ошибок в PHP: ini_set('display_errors',1); error_reporting(E_ALL);
- Убедитесь, что PHP возвращает JSON без лишнего HTML/пробелов/UTF‑8 BOM.

3) Минимальный безопасный пример PHP‑эндпоинта (PDO), возвращает JSON и поддерживает CORS
Сохраните в файл api/performers.php (путь подставьте свой):

<?php
// Для отладки ошибок (уберите в продакшн)
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

// Установим заголовки JSON и CORS (для разработки)
header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *'); // в продакшне ограничьте домен
header('Access-Control-Allow-Methods: GET, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type');

if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    http_response_code(200);
    exit;
}

$host = '127.0.0.1';
$db   = 'your_db';
$user = 'your_user';
$pass = 'your_password';
$charset = 'utf8mb4';

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
];

try {
    $pdo = new PDO($dsn, $user, $pass, $options);
} catch (PDOException $e) {
    http_response_code(500);
    echo json_encode(['error' => 'DB connection failed', 'message' => $e->getMessage()]);
    exit;
}

try {
    $stmt = $pdo->query('SELECT id, name FROM performers ORDER BY name');
    $performers = $stmt->fetchAll();
    echo json_encode(['success' => true, 'performers' => $performers]);
} catch (PDOException $e) {
    http_response_code(500);
    echo json_encode(['error' => 'Query failed', 'message' => $e->getMessage()]);
}

4) Пример fetch в браузере и простая отрисовка
Пример JS (подставьте реальный URL):

const url = 'http://localhost/api/performers.php'; // полный URL, если фронт и бек на разных origin
fetch(url)
  .then(resp => {
    if (!resp.ok) throw new Error('Network response was not ok: ' + resp.status);
    return resp.json();
  })
  .then(data => {
    if (data.error) {
      console.error('Server error:', data);
      return;
    }
    const list = document.getElementById('performersList');
    list.innerHTML = '';
    data.performers.forEach(p => {
      const li = document.createElement('li');
      li.textContent = p.name;
      list.appendChild(li);
    });
  })
  .catch(err => {
    console.error('Fetch error:', err);
  });

HTML:
<ul id="performersList"></ul>

5) Дополнительно — типичные исправления под конкретные ошибки
- Если CORS — добавьте header('Access-Control-Allow-Origin: *'); и в случае нестандартных заголовков/методов обрабатывайте OPTIONS.
- Если ERR_CONNECTION_REFUSED — убедитесь, что сервер запущен и URL правильный (порт).
- Если 500 — включите display_errors и смотрите точный стек (временно).
- Если JSON неожиданного вида — откройте ответ в Network → Response и посмотрите первые символы; если там HTML — ищите PHP Warning/Notice в output.

6) Что пришлите мне дальше для точной помощи
- Полный текст ошибки из консоли (или скриншот Network → ответ/Status).
- Код вашего PHP‑файла подключения + обработчика (весь файл).
- Код фронтенда, который делает запрос (fetch/axios/ajax).
- URL, под которым вы запускаете бек и фронт, и схема (http/https), порты.

Если хотите, пришлите ваши реальные куски кода и текст ошибки — и я укажу точное место поломки и дам исправленный вариант.
Похожие вопросы