2012-05-08 2 views
1

Я строю CMS, и я пытаюсь создать систему управления версиями.

Каждый раз, когда пользователь учитывает обновление к существующей веб-страницы, я хочу таблицы «Управление версиями», чтобы сохранить журнал событий, из которых отредактированный поля ...

, чтобы сделать это, я запустить кучу чтобы проверить, отличается ли содержимое формы, которое пользователь только что заполнил, до содержимого на веб-сайте до нажатия кнопки ...

поэтому перед тем, как я сделаю обновление, у меня есть следующий код (извинения если форматирование искажено):

$sql = "select * from pages where ID =" .$_POST[id]; 
$rs = odbc_exec ($db, $sql); 
$contents_original = odbc_result($rs,"content"); 
$title_original = odbc_result($rs,"title"); 
$pageorder_original = odbc_result($rs,"pageorder"); 
$parent_original = odbc_result($rs,"parent"); 
$footer_original = odbc_result($rs,"footer"); 

$updated_content = trim(stripslashes(strtolower(htmlentities($_POST['content'])))); 
$original = trim(strtolower($contents_original)); 

if ($updated_content == $original) { 
       $a = 'n'; 
       } else { 
       $a = '<p>Contents changed.'; 
       } 

// и так далее от переменных $ Ь - $ е ... то:

$update = "$a $b $c $d $e"; 

который затем следует обновляемым процедуры (все из которых работает хорошо и денди), и в конце Версии обновить, я вставляю содержимое $ update в SQL в столбце «события» (это также работает просто отлично)

Однако! предположив, что пользователь загружает форму с исходным содержимым страницы и нажимает на отправку ... если в форму ничего не изменилось, тогда $ a will = '' и, следовательно, ничто не должно вводиться в столбец «события». Кроме того, он продолжает вводить «содержимое изменено» и, фактически, делает это для каждой отдельной строки (например, поле заголовка, поле нижнего колонтитула и т. Д.)! странная вещь есть 2 целых ввода, и они записываются в меню событий просто отлично.

Если я распечатать STRLEN (stripslashes (strtolower (htmlentities ($ _ POST [ 'содержание'])))) и StrLen (strtolower ($ contents_original)) это показывает, что длины различны ...

нет ничего в коде или длине базы данных, чтобы вызвать это торможение.


ВЫХОД ИЗ: stripslashes (strtolower (stripcslashes ($ thenewcontent)))

Привет из осьминога!

добро пожаловать в jonathan m. edwards ".

все, что вам нужно для проектирования - бизнес-сайт, логотип группы, вы называете его - у меня есть навыки, чтобы предоставить вам творческий и профессиональный продукт.

нажмите на картинки ниже, чтобы иметь быстрый просматривание:

организовать для цитаты или если вы просто хотите поговорить идею до конца, напишите мне письмо по адресу: контакт [в] angry-octopus.co .uk или позвоните мне по (0789) 694-3379


ВЫХОД иЗ stripslashes (strtolower (html_entity_decode ($ contents_original)))

привет из осьминога!

добро пожаловать в jonathan m. edwards ".

все, что вам нужно для проектирования - бизнес-сайт, логотип группы, вы называете его - у меня есть навыки, чтобы предоставить вам творческий и профессиональный продукт.

нажмите на картинки ниже, чтобы иметь быстрый просматривание:

организовать для цитаты или если вы просто хотите поговорить идею до конца, напишите мне письмо по адресу: контакт [в] angry-octopus.co .uk или позвоните мне (0789) 694-3379

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _

+0

Ваш код очень уязвимы для SQL-инъекций – Madbreaks

+0

Почему вы не используете firebug для просмотра фактических сообщений, идущих туда и обратно? – Julian

+0

Он должен быть скрыт и закодирован. он не находится на странице домена по умолчанию. –

ответ

0

Если вы звоните htmlentities(), строка может быть длинной из-за преобразования символов. Или короче, потому что вы также используете stripslashes(). (ТНХ Jorge)

+1

то же самое со штрих-кодами –

+0

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

0

представляет данные в базе данных несколько байт,

в случае данных юникод (многоканальные байты), нормальные STRLEN функция не работает хорошо, так как они подсчитывают строку в качестве одного байта

вы можете попробовать использовать функцию:

mb_strlen (strtolower($contents_original))) 

http://www.php.net/manual/en/ref.mbstring.php

+0

Также лучший способ прочитать изменения - сохранить в блокноте (файле) и открыть его в редакторе, который не имеет кодировки, вы поняли бы проблему .. –

+0

Я дал это попробовать, он немного изменил числа, но они все еще не совпадали, я также проверил тот же результат с mb_check_encoding, и он подошел с '1' Я не знаю, подтверждает ли это, что база данных действительно многобайтовая база данных, но она подразумевает, что она, вероятно, ... –

+0

Aroha Labs, я попробую его в редакторе. Я начинаю терять надежду! Я работал над этими глупыми строками кода часами, ха-ха! –

Смежные вопросы