Вывод контактов на PHP: практические примеры и решения

Раздел: PHP программирование -> Вывод списков

Вывод списка контактов в PHP: методы и примеры

Наиболее эффективный способ вывода списка контактов в PHP основан на использовании базы данных MySQL и расширения PDO (PHP Data Objects). Он обеспечивает безопасность, производительность и гибкость. Рекомендуется для большинства веб-приложений.


// Подключение к БД через PDO
try {
    $pdo = new PDO('mysql:host=localhost;dbname=contacts_db;charset=utf8', 'user', 'password');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // Запрос на выборку всех контактов
    $stmt = $pdo->query('SELECT id, name, phone, email FROM contacts ORDER BY name');
    $contacts = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // Вывод в виде HTML-таблицы
    echo '<table><tr><th>Имя</th><th>Телефон</th><th>Email</th></tr>';
    foreach ($contacts as $contact) {
        echo '<tr><td>' . htmlspecialchars($contact['name'], ENT_QUOTES, 'UTF-8') . '</td>
              <td>' . htmlspecialchars($contact['phone'], ENT_QUOTES, 'UTF-8') . '</td>
              <td>' . htmlspecialchars($contact['email'], ENT_QUOTES, 'UTF-8') . '</td></tr>';
    }
    echo '</table>';
} catch (PDOException $e) {
    echo 'Ошибка: ' . $e->getMessage();
}
  

вывести список php (вывести список в php)

Объяснение шагов:

  • Подключение к базе данных через PDO с указанием charset=utf8 для корректной работы с кириллицей.
  • Выполнение запроса с сортировкой по имени.
  • Извлечение данных в виде ассоциативного массива.
  • Вывод в HTML с обязательным экранированием через htmlspecialchars для защиты от XSS-атак.

Типичные проблемы и их решения:

  • SQL-инъекция – использовать подготовленные запросы (см. пример в examples_adv).
  • Кодировка – установить charset=utf8 в DSN и в соединении с БД.
  • Пустой результат – проверять количество записей и выводить сообщение.

Как вывести список контактов из CSV-файла?

Для работы с CSV используется встроенная функция fgetcsv. Подходит для небольших списков или импорта.


$filename = 'contacts.csv';
if (($handle = fopen($filename, 'r')) !== false) {
    echo '<ul>';
    while (($data = fgetcsv($handle, 1000, ',')) !== false) {
        $name = htmlspecialchars($data[0], ENT_QUOTES, 'UTF-8');
        $phone = htmlspecialchars($data[1], ENT_QUOTES, 'UTF-8');
        echo '<li>' . $name . ' - ' . $phone . '</li>';
    }
    echo '</ul>';
    fclose($handle);
}
  

List php product (вывод списка товаров в php)

Проблема: некорректная обработка строк с запятыми внутри полей. Решение: использовать параметр enclosure (кавычки) и проверять формат.

Как отобразить контакты из JSON-файла?

Данные в формате JSON легко преобразуются в массив с помощью json_decode. Часто используется в API-интеграциях.


$json = file_get_contents('contacts.json');
$contacts = json_decode($json, true);
if (is_array($contacts)) {
    echo '<table>...</table>';
    foreach ($contacts as $contact) {
        // аналогично выводу из БД
    }
} else {
    echo 'Неверный формат JSON';
}
  

Lists contact php (вывод списка контактов в php)

Ошибка: json_decode возвращает null при ошибках. Проверять через json_last_error().

Как получить список из внешнего API?

Используется cURL или file_get_contents с настройками контекста.


$url = 'https://api.example.com/contacts';
$options = [
    'http' => [
        'method' => 'GET',
        'header' => 'Accept: application/json'
    ]
];
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
$contacts = json_decode($result, true);
  

List php section (вывод списка разделов в php)

Проблема: таймауты и ошибки сети. Обрабатывать через try-catch и проверять HTTP-код ответа.

Как вывести контакты из простого массива в коде?

Для демонстрации или тестирования можно использовать статический массив.


$contacts = [
    ['name' => 'Иван Иванов', 'phone' => '+7-123-456-78-90'],
    ['name' => 'Петр Петров', 'phone' => '+7-987-654-32-10']
];
  

Вывод аналогичен предыдущим примерам.

Расширенные примеры вывода списка контактов

Пример 1: Подготовленные запросы PDO с фильтрацией по первой букве

Пример

// Фильтрация по первой букве имени (безопасная)
$letter = 'А';
$stmt = $pdo->prepare('SELECT id, name, phone FROM contacts WHERE name LIKE :letter');
$stmt->execute([':letter' => $letter . '%']);
$contacts = $stmt->fetchAll(PDO::FETCH_ASSOC);
// Результат (массив):
Array
(
    [0] => Array ([id] => 1, [name] => 'Анна', [phone] => '111-222')
    [1] => Array ([id] => 5, [name] => 'Алексей', [phone] => '333-444')
)

Пояснение: подготовленные запросы предотвращают SQL-инъекции. LIKE с пользовательским вводом всегда требует экранирования через параметры или дополнительную проверку.

Пример 2: Пагинация (постраничный вывод)

Пример

$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$limit = 10;
$offset = ($page - 1) * $limit;

$totalStmt = $pdo->query('SELECT COUNT(*) FROM contacts');
$total = $totalStmt->fetchColumn();
$pages = ceil($total / $limit);

$stmt = $pdo->prepare('SELECT id, name, phone, email FROM contacts ORDER BY name LIMIT :limit OFFSET :offset');
$stmt->bindValue(':limit', $limit, PDO::PARAM_INT);
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->execute();
$contacts = $stmt->fetchAll(PDO::FETCH_ASSOC);

// Вывод контактов и ссылок пагинации
for ($i = 1; $i <= $pages; $i++) {
    echo '<a href="?page=' . $i . '">' . $i . '</a> ';
}
// На первой странице показываются первые 10 контактов

Важно: параметры LIMIT и OFFSET должны быть целыми числами, чтобы избежать ошибок SQL.

Пример 3: Вывод в виде карточек с использованием шаблона

Пример

// Генерация HTML напрямую (без шаблонизатора)
$html = '<div class="contacts">';
foreach ($contacts as $c) {
    $html .= '<div class="card">
                <h3>' . htmlspecialchars($c['name']) . '</h3>
                <p>Телефон: ' . htmlspecialchars($c['phone']) . '</p>
                <p>Email: ' . htmlspecialchars($c['email']) . '</p>
              </div>';
}
$html .= '</div>';
echo $html;
<div class="contacts">
  <div class="card">
    <h3>Иван Иванов</h3>
    <p>Телефон: +7-123-456-78-90</p>
    <p>Email: ivan@example.com</p>
  </div>
  ...
</div>

Пояснение: экранирование всех выводимых данных обязательно. Карточки удобны для мобильных интерфейсов.

Пример 4: Экспорт списка контактов в Excel (CSV с корректной кодировкой)

Пример

header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename="contacts.csv"');

$output = fopen('php://output', 'w');
// BOM для корректного отображения кириллицы в Excel
fprintf($output, chr(0xEF).chr(0xBB).chr(0xBF));
fputcsv($output, ['Имя', 'Телефон', 'Email']);
foreach ($contacts as $c) {
    fputcsv($output, [$c['name'], $c['phone'], $c['email']]);
}
fclose($output);
// Скачивается CSV-файл с заголовками и данными

Проблема: Excel может не распознать UTF-8 без BOM. В примере добавлен BOM.

Пример 5: Кэширование результата для ускорения вывода при больших объёмах

Пример

$cacheFile = 'contacts_cache.html';
$cacheTime = 3600; // 1 час
if (file_exists($cacheFile) && (time() - filemtime($cacheFile) < $cacheTime)) {
    readfile($cacheFile);
    exit;
}
ob_start();
// ... обычный вывод ...
$html = ob_get_clean();
file_put_contents($cacheFile, $html);
echo $html;
// При повторных запросах в течение часа отдаётся закэшированная страница

Пояснение: кэширование снижает нагрузку на БД, но требует ручного сброса при изменении данных.

Вывод списка контактов в PHP - comments

En
Lists contact php (php)