Я пытаюсь отладить проблему (не мой собственный код), когда строки многократно экранируются и повторно экранируются при повторном сохранении элемента.
В коде используется mysql_real_escape_string, но даже несмотря на то, что магические кавычки отключены, переменные сообщения уже заключены в кавычки при вызове моего действия, поэтому вызов mysql_real_escape_string удваивает кавычки. и затем каждый раз, когда элемент пересохраняется, накапливается все больше и больше косых черт.
Поэтому мне нужно убедиться, что элемент экранирован (один раз) перед переходом в базу данных, но затем не экранирован при отображении на странице.
Мое действие начинается так:
public function adminAction() {
$prizes = $_POST['tx_xxx_bingofrontend']['prize'];
//at this point my prize[] elements are already quoted, why?
foreach ($prizes as $key => $prize) {
foreach ($prize as $field => $value) {
// echo "Magic quotes is " . (get_magic_quotes_gpc() ? "ON" : "OFF");
// echo strip_tags($value) ;die;
// OFF gets printed
$cleanedValues[$field] = mysql_real_escape_string(strip_tags($value));
}
.... more code
Я использую typo3 v4.5.30 , есть ли настройка typo3 или, возможно, вызов API расширения, сделанный где-то, что вызывает экранирование до того, как сработает мой код действия?
Как я могу убедиться, что строки правильно отображаются и правильно пересохраняются?
Спасибо!
ОБНОВЛЕНИЕ: теперь у меня есть этот код:
public function adminAction() {
$postsvars = t3lib_div::_POST();
$prizes = $postsvars['tx_xxx_xxfrontend']['prize'];
foreach ($prizes as $key => $prize) {
foreach ($prize as $field => $value) {
//echo "Magic quotes is " . (get_magic_quotes_gpc() ? "ON" : "OFF");
// echo strip_tags($value) ;die;
$cleanedValues[$field] = $GLOBALS['TYPO3_DB']->quoteStr(strip_tags($value),'tx_xxx_domain_model_prize' );
который запускается перед каждым обновлением и созданием, и он правильно добавляет косые черты (я не уверен, как он использует мое имя таблицы в вызове, но, похоже, работает так хорошо). Но когда я читаю материал и удаляю косые черты, чтобы они отображались так в моей модели:
public function UnEscapePrize( ){
$this->setTitle(stripslashes( $this->getTitle()));
..... other vars get un-escaped
}
удаление косых черт сохраняется в базе данных, чего я не хочу. Я просто хочу удалить их для просмотра. Как я могу это сделать?
ОБНОВЛЕНИЕ 2: или я зря беспокоюсь? Подвержен ли typo3 4.5.3/extbase 1.3 атакам с внедрением sql при использовании методов обновления и добавления по умолчанию? Если он использует строку concat для объединения sql, то это может быть, но если он использует подготовленный оператор, это не так. Я пришел из места, где до сих пор используется много строк concat sql, так что это беспокойство для меня просто вторая натура.