Ответы пользователя по тегу PHP
  • Как реализовать бэкап сайта/бд посредством PHP?

    @thisuserhatephp
    Офлайн - losers Онлайн - lusers
    Я так сделал
    /**
     * конфиг бэкапа
     */
    function db_dump_config() {
        return [
            //общяя папка с бэкапами
            'get_backup_dir'            => $_SERVER['DOCUMENT_ROOT'] . '/backup/',
            
            // папка для бэкапа базы данных
            'get_db_backup_dir'         => $_SERVER['DOCUMENT_ROOT'] . '/backup/db/',
            
            // автоматическое название бэкапа
            'get_db_auto_name'          => 'db'.date('-(d.m.Y)'),
            
            // путь до исполняемого файла для бэкапа
            'get_mysql_dump_path'       => dirname($_SERVER['DOCUMENT_ROOT']) . '/mysql/bin/mysqldump'
        ];
    }
    
    
    /**
     * делаем бэкап базы данных
     * берем данные из конфига
     */
    function make_db_dump() {
        $dump_db_config = db_dump_config();
    
        if(is_db_backup_exists($dump_db_config['get_db_auto_name'], $dump_db_config['get_db_backup_dir']) == false) {
            ls_db_dump($dump_db_config['get_backup_dir'], $dump_db_config['get_db_backup_dir'], $dump_db_config['get_mysql_dump_path'], $dump_db_config['get_db_auto_name']);
        }
    }
    
    
    /**
     * @param string $backup_dir путь до общей папки с бэкапами
     * @param string $db_backup_dir путь до папки с бэкапами для базы данных
     * @param string $dump_exe_path путь до исполняемого файла бэкапа
     * @param strign $dump_name название файла бэкапа 
     */
    function ls_db_dump($backup_dir, $db_backup_dir, $dump_exe_path, $dump_name) {
        if(check_and_create_db_dir($backup_dir) && check_and_create_db_dir($db_backup_dir)) {
            
            $save_to = $db_backup_dir . $dump_name . '.sql';
            
            if(exec("$dump_exe_path --user=".DBUSER." --password=".DBPASS." --host=".DBHOST." ".DBNAME." --result-file={$save_to} 2>&1", $output)) {
                return true;
            }
        }
    
        return false;
    }


    spoiler
    вместо DBPASS, DBHOST, DBNAME пишите свои данные
    Ответ написан
    Комментировать
  • Правильно ли я строю HTML конструкции на PHP?

    @thisuserhatephp
    Офлайн - losers Онлайн - lusers
    Никогда так не делайте, не слушайте тех, кто будет говорить и советовать подобное. Вместо этой каши используй шаблонизаторы, возьми twig, он лёгкий в освоении. Так хоть 3к строк можешь писать (на самом деле не стоит писать 3к строк в одном twig шаблоне, лучше разбивать html на парты).
    Главное всегда разделять логику и представление
    $user_html_entity =
        '
        <a href="/user/' . $user_id . '" class="user" data-id="users___user_link">
          <div class="section_900">
            <!-- ## -->
            <img src="' . $user_avatar_link . '" />
            <!-- ## -->
            <div class="no_image_content">
              <p class="nickname">' . $user_nickname . '</p>
              <p class="online_status">' . Get_Online_Status_From_Datetime($user_last_online_datetime) . '</p>
              <p class="initials">' . $user_initials_info_string . '</p>
              <p class="location">' . $user_location_string . '</p>
            </div>
            <!-- ## -->
          </div>
        </a>
        '
        ;


    Я всегда проклинаю тех, кто пишет такой код. Все из-за влияния ужасного, мерзкого, неимоверно отвратительного WP.

    spoiler
    Get_Online_Status_From_Datetime($user_last_online_datetime)

    А именовать функции так, это вообще отдельная история...
    Ответ написан
  • В чём заключается ошибка?

    @thisuserhatephp
    Офлайн - losers Онлайн - lusers
    ты пропустил скобочку
    - if(mb_strlen($login) < 5 || (mb_strlen($login) > 90 ) {...}
    
    
    +  if(mb_strlen($login) < 5 || (mb_strlen($login) > 90 )) {...}
    Ответ написан
    2 комментария
  • Стоит ли учить php в 2021 году для разработки web приложений и сайтов?

    @thisuserhatephp
    Офлайн - losers Онлайн - lusers
    Никогда не понимал причем тут год и яп. Прыщавые иксперты с дырявыми мозгами и мне в свое время давали такие советы и наставления, мол не учи то, не учи се, сейчас такой-то год....
    Когда же вы поймете, что стек нужно выбирать не смотря на календарь, а исходя из тз которое решает данный стек. Если твою задачу лучше всего решает паскаль, то плевать какой сейчас год, хоть 5021-ый, нужно выбирать паскаль, а не что-то другое, потому что васян в коммах на форуме написал "паскаль в 2021 ? пхпхпха"

    Актуально ли php в 2021 году и стоит ли учить его?

    Если тебе позволяет время, то учить нужно все, что связанно с твоим стеком, а так кончено же актуально
    Ответ написан
  • Как вывести в модальном окне подгрузку информации по выбранному элементу в PHP?

    @thisuserhatephp
    Офлайн - losers Онлайн - lusers
    Лучше бы прислушался к совету к прошлому вопросу, но вместо этого ты продублировал вопрос.
    Хотя, аякс, ты все же загуглил

    //сразу от body обращаемся, что бы избежать следующего вопроса -  "а почему не работает клик, если подгружать динамически модалку " 
    $('body').on('click', '.open-modal-work-js', function(){
        var get_id = $(this).attr("data-id");
    	$.ajax({
    		type: 'POST',
    		url: '/path-to-action.php',
    		data: {
    			id: get_id
    		},
    		success: (data) => {
    			$('.modal-window').show().html(data);
    		}			
    	});
    });


    php
    $id = $_POST['id'];
    $sql= "SELECT * FROM works WHERE id_w = ".$id." ";


    Но так категорически не советую делать, а лучше еще раз процитирую коммент с прошлого вопроса
    запрос составлен не верно и кишит sql инъекциями, предлагаю почитать что это - sql инъекции и заодно взглянуть на pdo. так же на примеры ajax запросов в связке php и mysql
    Ответ написан
    1 комментарий
  • Почему 0 возвращает fasle?

    @thisuserhatephp Автор вопроса
    Офлайн - losers Онлайн - lusers
    Андрей Ежгуров, Павел Корнилов Спасибо, вам, навели меня на мысль и я решил. сделал проверку в твиге

    {% if count is not empty and count >= 0 %}
    Если количество больше или равно нулю выдаст ture и код выполнится.
    Ответ написан
  • Как правильно в цикле сложить значения?

    @thisuserhatephp
    Офлайн - losers Онлайн - lusers
    Не совсем понятно, но так к слову, потратил 5 минут на то что бы понять суть вопроса в итоге ничего не понял и поэтому предложу это, что бы хоть что-то чем ничего :)

    без цикла
    $arr = array(1, 2, 3, 4, 5);
    echo array_sum($arr);
    Ответ написан
    3 комментария
  • Как вывести php функцию в ответе json?

    @thisuserhatephp Автор вопроса
    Офлайн - losers Онлайн - lusers
    Решил следующим образом:
    В начале функции get_stock нужно включить буферизацию, в конце функции получить буфер и вернуть его:

    <?php
    function get_stock($id) {
      ob_start();
    ?>
    ...тут html
    
    <?php
        $result = ob_get_clean();
     
        return $result;
    }
    ?>


    В целом вариант AUser0 рабочий, но не в этом случае, скорее из-за плохой архитектуры моего кода.
    Ответ написан
    Комментировать
  • Авторизация через PHP / личный кабине т/ как каждого пользователя после логина перенаправить на разние страници?

    @thisuserhatephp
    Офлайн - losers Онлайн - lusers
    Как вариант можно добавить еще одну таблицу, которая будет связана с таблицей юзеров и будут хранить эти юрлы.
    например:

    таблица
    users >
    id - 5
    login - vasyan
    password - ....
    ----------------
    id - 6
    login - petya
    password - ....

    таблица profile >
    id - 5
    url - profile.html
    -------------
    id - 6
    url - profile_2.html

    При регистрации вы определяете юзеру страницу в profile
    А при логине получаете url с таблицы profile по id юзера и перенаправляете на нужную страницу.

    Это не лучшее решение, но как варинат я предложил.
    Ответ написан
    Комментировать
  • Как сделать рандом текст?

    @thisuserhatephp
    Офлайн - losers Онлайн - lusers
    $input = array("Hello", "Nihao", "Привiт", "Вечер в хату");
    
    $rand_keys = array_rand($input, 1);
    echo $input[$rand_keys];
    Ответ написан
    Комментировать