Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Закладки » PHP + MySQL

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

theIggs



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите, пожалуйста, с решением вот такого вопроса:
Имеется форум на движке PHP (InvisionBoard), к нему, соответственно, MySQL база. PHP-скрипт генерирует веб-страничку, всё как надо. На этой страничке имеется простое поле для ввода некой информации. Ввести надо туда, скажем, перевод строки (т.е. вот такой набор символов:
Код:
\\n
). По нажатию какой-то кнопки типа Submit инфа из этого поля должна записаться в базу. Так вот, для случая \\n записывается только n. Все бэкслэши, которые проставляются в том поле, пропадают. Хотя, по идее, один должен пропасть, как служебный символ, а второй уже попасть в базу. Что делать?

----------
Русская поддержка по IP.Board на IBResource.ru.
Для счастья нужно: национальный трекер и поисковик!

Всего записей: 1114 | Зарегистр. 13-11-2002 | Отправлено: 20:14 17-03-2003
Advanced_Guest



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
theIggs
дай скрипт добавления информации в базу данных.
 
скорее всего проблема в нём.
 
так же раскажи как ты смотришь информацию в базе данных.
Свой Скрипт?
программа ?
phpmyadmin ?

----------
The Abyss - UO, LA2, Ботва, BSFG

Всего записей: 2446 | Зарегистр. 14-04-2002 | Отправлено: 23:34 17-03-2003
hamshen

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
theIggs
Посмотри значения кофигурационных переменных magic_quotes_gpc, magic_quotes_sybase, magic_quotes_runtime. И почитай что сказано про них в мануале к InvisionBoard.
 


----------
Хорошие умирают молодыми, но плохие умирают уродливо.

Всего записей: 614 | Зарегистр. 22-04-2002 | Отправлено: 12:57 18-03-2003
NullDaemon

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
theIggs
addslashes() до базы, stripcslashes() с базы?

Всего записей: 991 | Зарегистр. 16-05-2002 | Отправлено: 20:09 18-03-2003
theIggs



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Прошу прощения у всех за своё долгое отсутствие...
 
Advanced_Guest
Скрипт примерно такой: имеется некое текстовое поле, вот такое:

Код:
"<input name='FOA' class='forminput' value='".$this->member['foa']."'>";

Заносится в базу вот так:
чтобы правильно занести кавычки

Код:
$ibforums->input['FOA'] = preg_replace ("/&quot;/", "\"", $ibforums->input['FOA']);

Компилится строка для SQL-запроса

Код:
$db_string = $DB->compile_db_update_string(  array (
  'time_offset'  => $ibforums->input['u_timezone'],
  'view_avs'     => $ibforums->input['VIEW_AVS'],
  'view_sigs'    => $ibforums->input['VIEW_SIGS'],
  'view_img'     => $ibforums->input['VIEW_IMG'],
  'view_smi'     => $ibforums->input['VIEW_SMI'],
  'view_pop'     => $ibforums->input['DO_POPUP'],
  'dst_in_use'   => $ibforums->input['DST'],
  'view_prefs'   => $ibforums->input['postpage']."&".$ibforums->input['topicpage'],
  'foa'          => $ibforums->input['FOA'],
  )         );

(набор полей непринципиален)
И апдейтится база

Код:
$DB->query("UPDATE ibf_members SET $db_string WHERE id='".$this->class->member['id']."'");

 
При этом, если в текстовом поле FOA написать "[ b]\n", то в базу заносится такое: "[ b]&#092;n". А мне надо, чтоб заносилось "[ b]\n".
Информацию в БД смотрю через phpMyAdmin'a.
 
hamshen Ничего не понял. С пхп я совсем не знаком. Где можно их посмотреть?
 
NullDaemon Да! Что-то вроде того. Только никак не могу понять, в какое место моего кода впихнуть эти addslashes...

----------
Русская поддержка по IP.Board на IBResource.ru.
Для счастья нужно: национальный трекер и поисковик!

Всего записей: 1114 | Зарегистр. 13-11-2002 | Отправлено: 09:13 05-04-2003 | Исправлено: theIggs, 09:23 05-04-2003
Sergeant

Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
theIggs,

Цитата:
NullDaemon Да! Что-то вроде того. Только никак не могу понять, в какое место моего кода впихнуть эти addslashes...
Сделай например вот в этом месте:

Код:
$ibforums->input['FOA'] = preg_replace ("/&quot;/", "\"", $ibforums->input['FOA']);  
$ibforums->input['FOA']=addslashes($ibforums->input['FOA']);
// и дальше апдейт базы..
 


----------
Если вы спорите с идиотом,
Наверняка, он занимается тем же самым.

Всего записей: 1553 | Зарегистр. 06-08-2001 | Отправлено: 13:55 05-04-2003
theIggs



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sergeant
Так я уже пробовал. В базу всё равно попадает &#092;


----------
Русская поддержка по IP.Board на IBResource.ru.
Для счастья нужно: национальный трекер и поисковик!

Всего записей: 1114 | Зарегистр. 13-11-2002 | Отправлено: 18:09 05-04-2003
Sergeant

Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
theIggs,
После сабмита формы сделай print_r($_POST); и посмотри, что там с этим несчастным \n.
 
И еще.. у тебя может htmlspecialchars() где-то там делается? Посмотри в коде.

----------
Если вы спорите с идиотом,
Наверняка, он занимается тем же самым.

Всего записей: 1553 | Зарегистр. 06-08-2001 | Отправлено: 18:36 05-04-2003
theIggs



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ввожу в поле FOA
"[b]\n"
print_r выдаёт
[FOA] => \"[b]\\n\"
В базе
"[b]&#092;n"

htmlspecialchars не используется.

----------
Русская поддержка по IP.Board на IBResource.ru.
Для счастья нужно: национальный трекер и поисковик!

Всего записей: 1114 | Зарегистр. 13-11-2002 | Отправлено: 04:47 06-04-2003
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Эх... а что, никто в код не догадался заглянуть, прежде чем давать советы ?)  

Код:
 
    /*-------------------------------------------------------------------------*/
    // Makes incoming info "safe"              
    /*-------------------------------------------------------------------------*/
   function parse_incoming()
{
blah-blah-blah
while( list($k2, $v2) = each($HTTP_GET_VARS[$k]) )
 $return[$k][ $this->clean_key($k2) ] = $this->clean_value($v2);
// это только строка оттуда - все переменные там "очищаются" и для GET и для POST
}
 
    /*-------------------------------------------------------------------------*/
    // Key Cleaner - ensures no funny business with form elements              
    /*-------------------------------------------------------------------------*/
    function clean_key($key) {
     
    if ($key == "")
    {
    return "";
    }
    $key = preg_replace( "/\.\./"           , ""  , $key );
    $key = preg_replace( "/\_\_(.+?)\_\_/"  , ""  , $key );
    $key = preg_replace( "/^([\w\.\-\_]+)$/", "$1", $key );
    return $key;
    }
     
    function clean_value($val) {
     
    if ($val == "")
    {
    return "";
    }
    $val = str_replace( "&#032;"       , " "             , $val );
    $val = str_replace( "&"            , "&amp;"         , $val );
    $val = str_replace( "<!--"         , "&#60;&#33;--"  , $val );
    $val = str_replace( "-->"          , "--&#62;"       , $val );
    $val = preg_replace( "/<script/i"  , "&#60;script"   , $val );
    $val = str_replace( ">"            , "&gt;"          , $val );
    $val = str_replace( "<"            , "&lt;"          , $val );
    $val = str_replace( "\""           , "&quot;"        , $val );
    $val = preg_replace( "/\|/"        , "&#124;"        , $val );
    $val = preg_replace( "/\n/"        , "<br>"          , $val ); // Convert literal newlines
    $val = preg_replace( "/\\\$/"      , "&#036;"        , $val );
    $val = preg_replace( "/\r/"        , ""              , $val ); // Remove literal carriage returns
    $val = str_replace( "!"            , "&#33;"         , $val );
    $val = str_replace( "'"            , "&#39;"         , $val ); // IMPORTANT: It helps to increase sql query safety.
    $val = stripslashes($val);                                     // Swop PHP added backslashes
    $val = preg_replace( "/\\\/"       , "&#092;"        , $val ); // Swop user inputted backslashes
    return $val;
   }
 

стоит специально, чтобы не вводили ', закрывая скобки при запросе в MySQL и не задавали собственных команд.


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 05:36 06-04-2003 | Исправлено: Cheery, 05:37 06-04-2003
theIggs



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery

Огромное спасибо!
Маленько помучал код и всё заработало.

----------
Русская поддержка по IP.Board на IBResource.ru.
Для счастья нужно: национальный трекер и поисковик!

Всего записей: 1114 | Зарегистр. 13-11-2002 | Отправлено: 12:33 06-04-2003
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » Закладки » PHP + MySQL


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru