Загрузка данных


<?php

use PDO;

$inp = fopen('php://stdin', 'r');

function connectToDatabase() {
    $pdo = new PDO('sqlite:' . DB_NAME);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    return $pdo;
}

function run(int $argc, array $argv) {
    $pdo = connectToDatabase();
    
    $command = strtolower($argv[0]);
    switch ($command) {
        case "add":
            $name = promptInput("Enter name: ");
            $email = promptInput("Enter email: ");
            $phone = promptInput("Enter phone: ");
            $address = promptInput("Enter address: ");
            $stmt = $pdo->prepare("INSERT INTO contacts (name, email, phone, address) VALUES (?, ?, ?, ?)");
            $stmt->execute([$name, $email, $phone, $address]);
            echo "Contact added successfully.\n";
            break;
        case "list":
            $stmt = $pdo->query("SELECT * FROM contacts");
            $contacts = $stmt->fetchAll(PDO::FETCH_ASSOC);
            $i = 1;
            foreach ($contacts as $contact) {
                printf("%d. %s - %s - %s - %s\n", $i, $contact['name'], $contact['email'], $contact['phone'], $contact['address']);
                $i++;
            }
            break;
        case "search":
            $query = trim($argv[1]);
            $stmt = $pdo->prepare("SELECT * FROM contacts WHERE name LIKE :query OR email LIKE :query OR phone LIKE :query OR address LIKE :query");
            $stmt->execute(['query' => "%$query%"]);
            $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
            $stmtAll = $pdo->query("SELECT * FROM contacts"); // Запрос для получения всех контактов
            $allContacts = $stmtAll->fetchAll(PDO::FETCH_ASSOC);
            if (empty($results)){
                echo "No contacts found matching '{$query}'";
            } else
            foreach ($results as $result) {
                $index = array_search($result, $allContacts); // Находим индекс строки в исходном списке
                printf("%d. %s - %s - %s - %s\n", $index + 1, $result['name'], $result['email'], $result['phone'], $result['address']);
            }
            break;
        case "view":
            $contactId = $argv[1];
            $stmt = $pdo->prepare("SELECT * FROM contacts WHERE id = ?");
            $stmt->execute([$contactId]);
            $contact = $stmt->fetch(PDO::FETCH_ASSOC);
            if ($contact) {
                echo "Name: " . $contact['name'] . "\nEmail: " . $contact['email'] . "\nPhone: " . $contact['phone'] . "\nAddress: " . $contact['address'] . "\n";
                $action = promptInput("Do you want to edit or delete this contact? (edit/delete/none): ");
                if ($action === 'edit') {
                    $name = promptInput("Enter new name (leave empty to keep the same): ");
                    $email = promptInput("Enter new email (leave empty to keep the same): ");
                    $phone = promptInput("Enter new phone (leave empty to keep the same): ");
                    $address = promptInput("Enter new address (leave empty to keep the same): ");
                    $name = !empty($name) ? $name : $contact['name'];
                    $email = !empty($email) ? $email : $contact['email'];
                    $phone = !empty($phone) ? $phone : $contact['phone'];
                    $address = !empty($address) ? $address : $contact['address'];
                    $stmt = $pdo->prepare("UPDATE contacts SET name = ?, email = ?, phone = ?, address = ? WHERE id = ?");
                    $stmt->execute([$name, $email, $phone, $address, $contactId]);
                    echo "Contact updated successfully.\n";
                } elseif ($action === 'delete') {
                    // Handle deleting the contact
                    $stmt = $pdo->prepare("DELETE FROM contacts WHERE id = ?");
                    $stmt->execute([$contactId]);
                    echo "Contact deleted successfully.\n";
                }
            } else {
                echo "Contact not found.\n";
            }
            break;
        default:
            echo "Unknown command. Available commands: add, list, search, view.\n";
            break;
    }
}

function promptInput($prompt) {
    global $inp;
    echo $prompt;
    return trim(fgets($inp));;
}