Вставка скрапта в строку бд

Тема в разделе "PHP", создана пользователем fredis69, 30 авг 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. fredis69

    fredis69 Постоялец

    Регистр.:
    25 окт 2008
    Сообщения:
    84
    Симпатии:
    2
    Здравствуйте!

    Немогу понять что происходит, есть скрипт редактирования данных в БД.
    При обновлении данных, если в поле с текстом вставить скрипт, то при обновлении данных происходит ошибка:"По техническим причинам обновление не удалось произвести, возможно произошел сбой программы. Попробуйте еще раз или обратитесь к разработчикам данной программы!"
    Эта таблица служит для хранения данных для различных блоках на сайте, в данном случае редактируется нижняя часть сайта(там находятся баннеры различных каталогов и рейтингов)

    PHP:
    $result mysql_query ("UPDATE blocks SET  title='$title' , filling='$filling' WHERE id='$id'");
    if (
    $result == 'true'
    {
    echo 
    "<META HTTP-EQUIV=\"refresh\" content=\"1;URL=".$linka."admin/cms/filling/2/=review\">"
    echo 
    "<p align='center'><h2 align='center'>Обновление произведено успешно!</h2></p>";
    }
    else {echo 
    "<p>По техническим причинам обновление не удалось произвести, возможно произошел сбой программы.<br />Попробуйте еще раз или обратитесь к разработчикам данной программы!</p>";}
    }
     
  2. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    нифига не понял

    какое поле с текстом?
     
  3. rex1963

    rex1963

    Регистр.:
    19 фев 2007
    Сообщения:
    228
    Симпатии:
    47
    Какой скрипт вставляешь JS, PHP? И что предполагается по выводу этого скрипта - работу или вывод в текстовом формате?
    Если нет записи в базу , то проверяем и обрабатываем поле где-то так так:

    PHP:
    //Обрабатываешь текстовое поле

    $text preg_replace("/\\r\\n|<br>\\r\\n/s","<br>",$text);
    //Формируем запрос
    $query "UPDATE ....";

    echo 
    $query// смотришь что в запросе
    mysql_query($query);


     
    fredis69 нравится это.
  4. ec_stasis

    ec_stasis Создатель

    Регистр.:
    5 июл 2010
    Сообщения:
    24
    Симпатии:
    3
    Ппробуй так:
    PHP:
    $result mysql_query ("UPDATE blocks SET  title='" mysql_escape_string($title) . "' , filling='" mysql_escape_string($filling) . "' WHERE id='$id'"); 
    И $id тоже обязательно надо проверить на соответсвие формату. Если там должно быть число, то я делаю так:
    PHP:
    $id = (int)$id;
     
    fredis69 нравится это.
  5. fredis69

    fredis69 Постоялец

    Регистр.:
    25 окт 2008
    Сообщения:
    84
    Симпатии:
    2
    Все работает спасибо.
    Вот что надо было всего сделать:
    PHP:
    $filling mysql_real_escape_string($filling);
    //далее следует обновление данных в бд
     
  6. rex1963

    rex1963

    Регистр.:
    19 фев 2007
    Сообщения:
    228
    Симпатии:
    47
    Проверил, работают ли записанные в базы скрипты?
    В базу запись идет экранированных спец символов, в связи с чем, при непосредственном выводе, без коррекции, часть скриптов может быть неработоспособной.
     
    fredis69 нравится это.
  7. fredis69

    fredis69 Постоялец

    Регистр.:
    25 окт 2008
    Сообщения:
    84
    Симпатии:
    2
    проверил, не работают скрипты, дома на денвере всё работало, а на хостинге нестало, выводит всё экранированное (\), что делать? как исправить?

    Добавлено через 24 минуты
    Всё задача решена .

    перед добавлением содержимого из переменной в БД, делаем так:
    PHP:
    $filling1 addslashes($filling1);
    после вавода из БД, делаем так:
    PHP:
    $filling1 stripslashes($row_footer_block['filling1']);
    //и всё можно далее выводить содержимое переменной
    echo $filling1;
    Вот и всё. Всем спасибо за пом.
     
  8. ec_stasis

    ec_stasis Создатель

    Регистр.:
    5 июл 2010
    Сообщения:
    24
    Симпатии:
    3
    можно отключить этот дебильный наворот - добавление слешей.
    В .htaccess добавить строку
    Код:
    php_flag magic_quotes_gpc off
    Не на всех хостингах будет работать, но на большинстве должно.
     
    fredis69 нравится это.
Статус темы:
Закрыта.