• Как вывести топ 10 авторов?

    rozhnev
    @rozhnev Куратор тега MySQL
    Fullstack programmer, DBA, медленно, дорого
    SELECT
    	author,
    	count(*) books_count
    FROM books
    GROUP BY author
    ORDER BY books_count DESC
    ;


    SQL online queries
    Ответ написан
    1 комментарий
  • В чем ошибка моего кода?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Самое время познакомиться с темной стороной программирования.
    Начинающие вайтишники искренне думают, что программист - это типа такой художник. Берет мольберт, поллитру, кисти и начинает ВАЯТЬ. Потом отходит на шаг, любуется делом рук своих, и снова. Ваять. А потом сразу заказчику, за большие деньги.

    Так вот, в реальности это всё не так.
    Большую часть времени программист не пишет код.
    А пытается разобраться, почему он не работает.

    Так что мы будем сейчас учиться это делать.
    Тем более, что это в принципе несложно.
    Главное не думать, что чем-то поможет сидеть и тупить в свой кодик. И приглашать других людей потупить в него тоже бессмысленно. Потому что причина может быть совсем не в нем. но даже если проблема и в коде, то искать её всё равно надо по-другому.
    В код не надо тупить. Его надо ЗАПУСКАТЬ.
    И выводить промежуточные результаты. Проверять его работу.
    Заранее выяснить, какие должны быть значения у переменных, и проверять их на каждом этапе.
    Где не совпадут - там и проблема.
    В идеале IDE сама покажет содержание всех переменных при трассировке, но если пишешь код в блокнотике, то даже тупо писать var_dump($bar1,$var2,$var3...); и смотреть что там лежит.
    Условия проверять еще проще, тупо echo 'зашли в условие if (!empty($user))';
    И если лежит не то, или эхо не выводится - вот тогда уже смотреть в код и думать, почему так получилось.

    В частности, при авторизации надо проверить две вещи:
    1. Находится ли юзер по логину
    2. если находится, то проверить корректность хэша. Для этого при регистрации надо вывести полученный через password_hash пароль и записать на бумажке
    потом запросить сохраненный из БД и сравнить

    Кроме того
    Разумеется, отладка невозможна без сообщений об ошибках.
    В половине случаев РНР человеческим голосом сообщает в чем проблема.
    Поэтому всегда, в любом окружении должно стоять error_reporting(E_ALL);
    плюс на домашнем компике полезно прописать ini_set('display_errors', 1); чтобы сразу видеть ошибки на экране.
    На боевом сервере разумеется поставить 0 вместо 1, и добавить ini_set('log_errors', 1);

    У меня только один вопрос.
    Какой смысл вообще делать парольную защиту, если любой придурок сможет спокойно авторизоваться через SQL инъекцию?
    Ответ написан
    9 комментариев
  • Как распарсить json?

    Immortal_pony
    @Immortal_pony Куратор тега PHP
    В рамках бредопрограммирования я написал функцию, которая превращает твою строку в валидный json

    function repairUnqotedJsonValues(string $json) : string {
        $json = str_replace(": ", ":", $json);
        $json = str_replace("{ ", "{", $json);
        $json = str_replace(" }", "}", $json);
        $quotes = 0;
        $fixMode = false;
        $repaired = [];
        
        foreach (mb_str_split($json) as $char) {
            $add = [$char];
        
            if ($fixMode) {
                if ($char === ":") {
                    array_push($add, "\"");
                }
                
                if ($char === "," || $char === "}") {
                    array_unshift($add, "\"");
                }
                
                if ($char === "\"") {
                    $fixMode = false;
                }
            }
            
            $repaired = array_merge($repaired, $add);
            
            if ($char === "\"") {
                $quotes++;
            }
            
            if ($quotes === 2) {
                $fixMode = true;
                $quotes = 0;
            }
        }
        
        return implode("", $repaired);
    }


    Далее, после обработки строки с её помощью можно уже пользоваться json_decode:
    $weirdString = file_get_contents('application.json');
    $json = repairUnqotedJsonValues($weirdString);
    $user = json_decode($json);
    $name = $user->{'Имя'};
    print $name;


    Ну а правильным вариантом будет, конечно, хранение в application.json валидного json'а, а не строки в непонятном формате.
    Ответ написан
    1 комментарий
  • Как словить и прочитать http запрос?

    Megas
    @Megas
    //Считываем данны из тела HTTP запора
    $json = file_get_contents('php://input');
    //Превращаем JSON строчку в PHP массив
    $data = json_decode($json);
    
    //Содержимое переменной $data
    // [
    //         "Имя" => <строка>, 
    //         "Пароль" => <строка>, 
    //         "Год рождения" => <строка>, 
    // ]
    Ответ написан
    Комментировать
  • Как вывести определённые данные phpmyadmin?

    Stalker_RED
    @Stalker_RED
    SELECT `login`, `name`, `password`, `date` FROM `users` WHERE `login`='сидоров'

    И если у вас пароли хранятся в открытом виде, то у вас дыра в безопасности.
    Ответ написан
    4 комментария
  • Как словить и прочитать http запрос?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Приветствую.
    Каждый сайт во всемирной сети вэвэвэ делает то же самое.
    Каждый.
    Это одна из самых часто встречающихся задач в веб-разработке.
    В интернете есть миллионы примеров, как это сделать.

    Попробуйте раз в жизни воспользоваться поиском.
    Ответ написан
    2 комментария
  • Как прочитать и сравнить данные из .txt с введёнными из формы?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    $result = "$uname||$pass"; //данные которые ввели
    
    $match = null;
    //считываем файл построчно и ищем совпадение
    //если совпадение найдено - записываем результат в $match и прекращаем сканирование файла
    $fp = fopen("user.txt", "r+");
    while (($line = stream_get_line($fp, 1024 * 1024, "\n")) !== false) {
        if(trim($line) === trim($result)) {
            $match = trim($line);
            break;
        }
    }
    fclose($fp);
    
    if(!empty($match)) {
        echo "Найдено совпадение - {$match}";
    } else {
        echo "Ничего не найдено";
    }
    Ответ написан
    Комментировать
  • Как создать окно в tkinter где нужно заполнить форму и чтобы введённые данные превращались в переменные?

    Viktor_T2
    @Viktor_T2
    python developer
    Ну ето просто:
    import tkinter as tk
    
    win = tk.Tk() 
    
    e1 = tk.StringVar() # переменная связанная с полем
    entry1 = tk.Entry(master=win, textvariable=e1, width=25).pack(side='left', anchor='nw', padx=5, pady=4)
    
    resp = ''  # выводит переменную после написания данных
    
    def button_clck():
        resp = e1.get() # получить ввод
        print('resp =',resp)
        e1.set('okeh') # записать что-нить в поле
    
    
    button = tk.Button(master=win, text='get entry', command=button_clck).pack(side='left', anchor='nw', padx=5, pady=2)
    
    win.mainloop()

    Присылай симпафку
    Ответ написан
    Комментировать