• Как реализовать удаление записи из таблицы?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    блин, а я пробовал вешать или переменную, которая указывала на запрос (удаления), либо пытался вкорячить функцию. Блин и ведь даже мысли не промелькнуло, что на ссылку нужно вешать обработчик :)

    Спасибо попробую :)
  • Как составить SQL запрос?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    Спасибо, что разжевали объяснили на пальцах!
  • Как составить SQL запрос?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    FanatPHP,
    может соответствовать только 1 короткий

    так точно.

    Но непонятно тогда, при чем тут пользователи и даты.

    а ведь вы в точку подметили :)
    Дата нужна для вывода информации в админку, сервис будет поддерживать возможность авторизоваться и в самой админку будут подгружаться добавленные в БД ссылки.
    Насчет пользователя я не совсем понял, возможно вы имели ввиду колонку - id_shortener, то эта колонка нужна, что бы по ней можно было производить удаление конкретной записи.
  • Как составить SQL запрос?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    Видел, гитхаб пестрит подобными сервисами :), но хочу решить сам.
  • Как составить SQL запрос?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    FanatPHP, если откинуть в сторону таблицу. Суть задачи, которую я делаю – сервис коротких ссылок.
    Посетитель вводить в input ссылку, после чего формируется уникальный id и в бд заносится:
    • Введенная посетителем ссылка
    • Сформированный id

    После чего, ему выводиться $_SERVER['HTTP_HOST']}/$uniqueID ну и при переходу по короткой ссылки происходит редирект.

    И собственно я хочу сделать правильно.
  • Как составить SQL запрос?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    Антон Р., спасибо. Действительно намудрил, хотя изначально все сделал в одной таблице, но потом почему то переклинило и посчитал, что это не совсем хорошо, а лучше разнести отдельно short_url, отдельно external и в результурующей их "собирать"

    dt - date.
    id_shortener – id результата (строки который содержит: полную, короткую ссылку и дату создания)
  • Как составить SQL запрос?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    RMate, вы правы, спасибо за совет.
  • Как составить SQL запрос?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    FanatPHP, к сожалению четкой аргументации нет :(, также как и опыта работы с БД. Руководствовался 2 вещами:
    1. Не "мешать" все в одну таблицу
    2. Смотрел на готовые решения.

    Но судят по тому, как вы написали...я что-то сделал не так :) ...
  • Как исправить предупреждение касательно время жизни куков?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    DevMan, понял, спасибо.

    Все же видоизменил установку времени жизни cookie :)
    function setTimeCookie(string $life_time): int
    {
        $getTimeShift = date_create();
        $getTimeShift = date_modify($getTimeShift, $life_time);
        $getTimeShift = date_timestamp_get($getTimeShift);
        return $getTimeShift;
    }
    
    setcookie('login', 'typa Login', setTimeCookie('+ 1 week'), '/');
  • Как исправить предупреждение касательно время жизни куков?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    Но все же :), не зря же так шторм негодует. Если он предлагает более (правильное...оптимальное) решение, почему бы сразу не перенять такую практику. Или рекомендации IDE не всегда самые правильные?
  • Упрощенное переключение между строками кода?

    yaleksandr89
    @yaleksandr89
    Присоединюсь к Антону :), тоже не мог доползти до гугла :), а тут ответ сам себя нашел. Спасибо!
  • Почему phpStorm не нравится паттерн preg_match?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    что бы я делал без вашего мнения.
  • Как реализовать ajax запрос к БД?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    Дмитрий, у меня на самописе админки, как таковой нет. Но написано, хороший процесс авторизации...по крайне мере мне так кажется :)))

    сама функция проверки авторизации:
    isAuth()
    <?php
    // Проверка авторизации
    function isAuth()
    {
        $isAuth = false;
        // если в сессии все ок, то access allowed
        if (isset($_SESSION['is_auth']) && $_SESSION['is_auth']) {
            $isAuth = true;
            // если нет, то остается проверить куки
        } elseif (isset($_COOKIE['login']) && isset($_COOKIE['pass'])) {
            if (
                $_POST['login'] == password_hash('1', PASSWORD_DEFAULT) && $_POST['pass'] == password_hash('2', PASSWORD_DEFAULT)) {
                //$_SESSION['is_auth'] = true; - такой прием делается для того, что вновь поставить авторизовать по сессии пользователя, если проверку коки он прошел
                $_SESSION['is_auth'] = true;
                $isAuth = true;
            }
        }
        return $isAuth;
    }


    Страница, где происходит авторизация, код отвечающий за проверку:
    login
    //Сбрасываем авторизацию абсолютно любого пользователя – Сессия
    if (isset($_SESSION['is_auth'])) {
        unset($_SESSION['is_auth']);
    }
    //Куки
    if (isset($_COOKIE['login'])) {
        setcookie('login', '', time() - 1, '/');
    }
    if (isset($_COOKIE['pass'])) {
        setcookie('pass', '', time() - 1, '/');
    }
    
    if (isset($_SESSION['flash_message'])) {
        $information = $_SESSION['flash_message'];
        unset($_SESSION['flash_message']);
    }
    
    if (count($_POST) > 0) {
        if ($_POST['login'] == '1' && $_POST['pass'] == '2') {
            $_SESSION['is_auth'] = true;
            if (isset($_POST['remember'])) {
                $login = password_hash('1', PASSWORD_BCRYPT, algorithmic_cost());
                $pass = password_hash('2', PASSWORD_BCRYPT, algorithmic_cost());
                setcookie('login', $login, time() + 3600 * 24 * 7, '/');
                setcookie('pass', $pass, time() + 3600 * 24 * 7, '/');
            }
            if (isset($_SESSION['returnUrl'])) {
                header('Location: /' . $_SESSION['returnUrl']);
                unset($_SESSION['returnUrl']);
                exit();
            } else {
                header('Location: /');
                exit();
            }
        } else
            $information = 'Неправильный логин или пароль!';
    }


    Ну и в каждом контроллере (добавление, редактирование, главная стр.) вначале идет проверка вида:
    $isAuth = isAuth();
    
    if (!$isAuth) {
        $_SESSION['flash_message'] = 'Несанкционированный доступ! Авторизуйтесь.';
        redirect_403();
    } else {
        $_SESSION['returnUrl'] = 'edit/article/' . $id_article;
        $_SESSION['flash_message'] = 'Сессия была завершена. Повторите авторизацию.';
    }


    А сессия стартуется на единой точке входа index (тут я так же хочу примерно сделать)
    index

    <?php
    include_once('models/articles.php');
    include_once('models/system.php');
    include_once('models/auth.php');
    include_once('functions/functions.php');
    
    session_start();
    $err404 = false;
    
    // Подключение требуемого контроллера
    $controller = trim($get_cnc[0] ?? 'main');
    
    if ($controller === '' || !file_exists("controllers/{$controller}.php") || check_controller("controllers/{$controller}.php")) {
        $err404 = true;
    } else {
        include("controllers/{$controller}.php");
    }
    
    if ($err404) {
        redirect_404();
    }
    // Формирование страницы
    echo views_connect('index.php', [
        'preloader' => $preloader ?? null,
        'title' => $title ?? null,
        'navBar' => $navBar ?? null,
        'form' => $form ?? null,
        'switch_view' => $switch_view ?? null,
        'all_articles' => $articles ?? null,
        'single_article' => $single_article ?? null,
        'infoblock' => $infoblock ?? null,
        'get_cnc' => $get_cnc
    ]);


    Такой вариант котируется? Или совсем по делитански?
  • Как реализовать ajax запрос к БД?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    Дмитрий, :)) веришь нет - давно хотел (имею ввиду ajax). Тот самопис, который на локалке валяется. В целом норм, но как же бесит при редактирование статьи у меня сделаны проверки и каждый раз нажимая отредактировать эти "дерганья страницы" + что бы контент оставался в input\textarea нужно в value php засовывать.

    Все хотел аджакс поковырять и мне его навязали :)
  • Как реализовать ajax запрос к БД?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    Дмитрий, ну по ТЗ мне в целом все понятно. Я вопрос то создал, потому с фджакс почти не работал и думал тут какие-то примудрости есть запросах к БД.
    5d9dc47141ec2124716991.png

    Ну а структуру бахнуть решил – если уж и пилю на процедурке, пусть хотя бы структура и MVC будет :). Админку я как таковую не делал. У меня был движок самописный. По умолчанию заходишь - отображаются статьи, авторизируешься у этих статей добавляются элементы (редактировать\удалить) на этой же страницы.

    По админку думаю смысл тот же. Только на отдельную страницу бахнуть.
  • Как реализовать ajax запрос к БД?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    Дмитрий, так, как я понял, я тупо через эйчаров не могу пробиться. У них написано при отклике спросить мета работы (или рекомендательные письма) и все. В любом случае ничего не напишут, в худшем дебильную фразу: "мы с вами свяжемся" :))

    Структуру проекта переделал, не смог я побороть htaccess и нафиг. В таком виде нормально? (я просто +\- шаблон хочу сделать, который в дальнейшем на типовых задачах разворачивать)?
    5d9dc2cfce6aa481643749.png