За последние 24 часа нас посетили 22439 программистов и 1152 робота. Сейчас ищут 867 программистов ...

В БД не записываются Русские символы

Тема в разделе "PHP для новичков", создана пользователем WiNNeR, 20 июл 2019.

  1. WiNNeR

    WiNNeR Новичок

    С нами с:
    11 июл 2019
    Сообщения:
    13
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Приветствую всех друзья! Столкнулся с проблемой. Написал веб-страницу на php, сохранил её и указал в ней кодировку UTF8
    Код (Text):
    1. header( 'Content-type: text/html; charset=utf8' );
    , написал функцию для добавления текста в базу MYSQL
    Код (Text):
    1. if ( $_GET['func'] == 'addinfouser' ) {
    2.  
    3.     sleep(1);
    4.  
    5.     if ( !isset( $_SESSION['iduser'] ) ) exit();
    6.  
    7.     if ( $_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest' ) exit();
    8.  
    9.  
    10.     $_POST['one'] = trim( $_POST['one'] );
    11.     $_POST['two'] = trim( $_POST['two'] );
    12.     $_POST['name'] = trim( $_POST['name'] );
    13.     $_POST['city'] = trim( $_POST['city'] );
    14.  
    15.     if ( empty( $_POST['name'] ) ) {
    16.         echo 'Вы не указали ваше имя!';
    17.         exit();
    18.     }
    19.    
    20.             mysql_query( " INSERT INTO infoueser (iduser, one, two, name, city, date) VALUES ('" . $_SESSION['iduser'] . "', '" . substr( check_text( $_POST['one'] ), 0, 20 ) . "', '" . substr( check_text( $_POST['two'] ), 0, 20 ) . "', '" . substr( check_text( $_POST['name'] ), 0, 10 ) . "', '" . substr( check_text( $_POST['city'] ), 0, 5 ) . "'', '" . time() . "')" );
    21.  
    22.             echo 1;
    23.             exit();
    24. }

    В таблице MYSQL указана кодировка " utf8_general_ci ".
    Отправляю в базу текст в кодировке utf8, но русский текст не записывается, просто появляются пустые поля, текст на английском записывается идиально

    Дополнение:

    В config.php при подключении к БД есть строчка mysql_query( "set names utf8" );

    Сам файл .php сохранен в кодировке UTF-8

    В начале файла есть строчка header( 'Content-type: text/html; charset=utf8' );

    Друзья, в чем может быть проблема ?
     
  2. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    тип и длинна поля куда записываешь текст какие?
     
  3. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Переходите на MySQLi и используйте set_charset из этого расширения.

    P.S. Рубить UTF-строки substr'ом???
     
    MouseZver нравится это.
  4. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    пушто нет понимания, не ведают они, что творят
     
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.750
    Симпатии:
    1.322
    Адрес:
    Лень
    Бред. Это указ для браузера в какой кодировке отображать содержимое. Изучи на будущее и не пихай куда попало.

    в 1 строке почему гет параметр не проверяется на наличие ключа ? после будешь ловить ноти ошибки и спамить файл логов новыми записями, при обращении на страницу.

    Почему логика разделена условий на 5 и 7 строке ? складывается умозаключение об незнании основ условий.

    10 по 13 как и с 1 строкой.

    Начнем с документации php.net
    Ознакамливался с данной функцией, читая официальную документацию ? Что там написано в бледно-красной рамке, с заглавным/жирным словом "Внимание" ? давайте наконец перейдем с каменного века ?

    Конечно у тебя русский текст не записывается.... тьфу, точнее у тебя байты ломаные приходят, когда ты используешь функцию substr без приставки mb_

    На будущее - прочти про sql-injection в запросах и как защититься.

    --- Добавлено ---
    Не успел написать, как мухи на г. налетели
     
  6. WiNNeR

    WiNNeR Новичок

    С нами с:
    11 июл 2019
    Сообщения:
    13
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    приставка mb_ не решила проблему
    --- Добавлено ---
    Да, я чайник в php но я учусь... если есть возможность подскажите как мне справится с данной проблемой что бы до меня дошло
     
  7. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.750
    Симпатии:
    1.322
    Адрес:
    Лень
    Значит ты не всю информацию по коду/структуры таблицы предоставил, так как в данном случае именно приставка решит ее.
     
  8. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @WiNNeR, для начала учись внимательно читать ответы и наводящие вопросы. Я спросил какой тип поля и какая длинна у него.
    Вообще по хорошему дамп структуры таблицы может многое рассказать.
    Если ты учишься и не читаешь книги, ты не учишься нифига
     
  9. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.750
    Симпатии:
    1.322
    Адрес:
    Лень
    книги отстой
     
  10. WiNNeR

    WiNNeR Новичок

    С нами с:
    11 июл 2019
    Сообщения:
    13
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Да, я чайник в php но я учу
    Код (Text):
    1. function addinfouser() {
    2.     $.ajax({
    3.         type: 'POST',
    4.         url: 'ajax.php?func=addinfouser',
    5.         data: ({one: $('#one').val(), two: $('#two').val(), name: $('#name').val(), city: $('city').val()}),
    6.         dataType: 'html',
    7.         beforeSend: function() {
    8.             $('.btn_box').css({display:'none'});
    9.             $('.pajax').css({display:'block'}).html('ждите...');
    10.             if ( $('#one').val() != '' && $('#two').val() != '' && $('#name').val() != '' && $('#city').val() != '' ) {
    11.                 $('.pajax').css({display:'block'}).html('проверка на вирусы - [ Dr.web ]');
    12.             }
    13.         },
    --- Добавлено ---
    Нужно ведь просто mb_ подставить без каких либо остальных изменений?
     
  11. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.750
    Симпатии:
    1.322
    Адрес:
    Лень
    документацию открыл ?
     
  12. WiNNeR

    WiNNeR Новичок

    С нами с:
    11 июл 2019
    Сообщения:
    13
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    предупреждение

    Это расширение было объявлено устаревшим в PHP 5.5.0 и удалено в PHP 7.0.0. Вместо этого следует использовать расширения MySQLi или PDO_MySQL . См. Также руководство по MySQL: выберите API и связанные с ним часто задаваемые вопросы для получения дополнительной информации. Альтернативы этой функции включают в себя:

    • mysqli_set_charset ()
    • PDO: добавить кодировку в строку подключения, например, charset = utf8
    --- Добавлено ---
    Я пока не хочу переводить в Mysqli у меня нет на это время к сожалению, но я обязательно это сделаю чуть позже, подскажи пожалуйста как мне выйти на данный момент из ситуации, и если можно распиши как чайнику....
     
  13. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.750
    Симпатии:
    1.322
    Адрес:
    Лень
    --- Добавлено ---
    Готовый ответ не жди, тут учат, не решебник.
     
  14. WiNNeR

    WiNNeR Новичок

    С нами с:
    11 июл 2019
    Сообщения:
    13
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Я готов учиться, но я правда уже ломаю над этой проблемой голову второй день, если все же можешь дай решение....

    Я запомню и буду знать как это делать, и если что возможно тоже смогу кому нибудь помочь в будущем
     
  15. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    само собой... их же пишут идиоты, для таких же как и они идиотов.. "умным" книги не нужны у них слишком "много" ума, что бы понять о чём пишут в книгах.
    @WiNNeR, ты никогда не станешь программистом, потому что ты не умеешь внимательность (ну и не читаешь книг). Я дважды задал один и тот же вопрос и ты дважды его в упор не видишь...
     
  16. WiNNeR

    WiNNeR Новичок

    С нами с:
    11 июл 2019
    Сообщения:
    13
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Тип поля: VARCHAR длинна 20
     
  17. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @WiNNeR, смени для начала на VARCHAR 255
     
  18. WiNNeR

    WiNNeR Новичок

    С нами с:
    11 июл 2019
    Сообщения:
    13
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Готово
     
  19. WiNNeR

    WiNNeR Новичок

    С нами с:
    11 июл 2019
    Сообщения:
    13
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Сменил, но проблема не решилась
     
  20. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @WiNNeR, отлично. Теперь вынеси запрос из mysql_query в переменную, выведи его на экран и скопируй сюда результат вывода.
     
  21. WiNNeR

    WiNNeR Новичок

    С нами с:
    11 июл 2019
    Сообщения:
    13
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Друг, подскажи как это сделать...
     
  22. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    ну типа у тебя там есть
    Код (Text):
    1. mysql_query('...');
    а ты сделай
    Код (Text):
    1. $sql = '....';
    2. echo '<pre>' . $sql . '</pre>';
    3. die();
    4. mysql_query($sql);
     
  23. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.750
    Симпатии:
    1.322
    Адрес:
    Лень
    выдай скрипт от и до / структуру таблицы, чтобы все смогли протестить у себя и выявить диагноз. Иначе басня на кофейной гуще не кончится.