За последние 24 часа нас посетили 22772 программиста и 1271 робот. Сейчас ищут 777 программистов ...

stripslashes() для всех полей всех таблиц БД —как?

Тема в разделе "Прочие вопросы по PHP", создана пользователем KIVagant, 19 фев 2006.

  1. KIVagant

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

    С нами с:
    19 фев 2006
    Сообщения:
    3
    Симпатии:
    0
    Недавно впервые (к глубокому сожалению) дошли руки до изучения свойства magic_quotes_gpc. Оказалось, что я очень давно и очень не правильно использовал функции addslashes() и stripslashes(). Из-за того, что в php.ini свойство magic_quotes_gpc было равно On, я загонял в БД данные, с лишними знаками "\".

    Теперь, разобравшися с всем этим механизмом работы добавления и убирания \", решил отключить magic_quotes_gpc, заменить все addslashes() на mysql_real_escape_string() и поудалять из кода все stripslashes(). С помощью Rapid PHP 2005 это заняло не более 2х минут. Теперь все входящие в БД данные экранируются, но возникла проблема - что делать с всеми данными, которые уже были загнаны в БД вместе с лишними знаками "\"?

    Особенно если учесть, что используется свой аналог ВВ-тегов, в которых кавычки - сплошь и рядом и теперь все они не работают правильно и повсюду в текстах вижу \"текст\", \'текст\' и т.п..

    У меня в базе - 80 таблиц, CMS установлена у нескольких клиентов, плюс мой локальный тестовый экземпляр. Вручную перебирать все базы - слишком долгий и ненадежный процесс.

    Следовательно, вопрос: возможно ли написать скрипт, который смог бы пройтись по таблицам (по списку из массива), найти все поля с типом text, longtext, varchar, циклически получить данные из этих полей, пропустить их через функцию stripslashes() и загнать обратно, не нарушая индексацию (autoincrement)? Оптимизация скорости работы этого скрипта мне не особо интересна, это нужно будет сделать только один раз.

    Заранее благодарен за любые конструктивные предложения по решению этой траблы...

    ICQ: 55055888
     
  2. Nimous

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

    С нами с:
    5 фев 2006
    Сообщения:
    64
    Симпатии:
    0
    Адрес:
    Москва
    а stripslashes() перед выводом не помогает?
     
  3. KIVagant

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

    С нами с:
    19 фев 2006
    Сообщения:
    3
    Симпатии:
    0
    Nimous, спасибо за мудрый совет... А топик прочитать? Мне нужно избавиться от stripslashes(), т.к. при правильной настройке php эта функция вообще не нужна. А если изначально были включены магические кавычки, то теперь их невозможно выключить, т.к. это порождает одну из двух проблем: если stripslashes оставить, то все новые сообщения, содержащие знак " \ " будут выводится неправильно. Например, юзеры не смогут указать путь C:\aaa\bbb\, т.к. система выведет это как C:aaabbb
    А если stripslashes убрать, то во всех старых сообщениях и вообще текстовых полях будут глюки с выводом данных из-за лишних "\".
     
  4. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    KIVagant
    написать скриптик который:
    1. переберет все таблицы.
    2. просмотрит все текстовые поля.
    3. заменит в записях кавычки.

    где не понятно?
     
  5. KIVagant

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

    С нами с:
    19 фев 2006
    Сообщения:
    3
    Симпатии:
    0
    440hz, все правильно. Вопрос именно в том, КАК написать такой скриптик.
    Всем спасибо, на http://www.nixp.ru/ я уже получил ответ на этот вопрос, а точнее точное направление для поиска.