| Новости | FAQ | Авторы | Документация | В действии | Библиотека |
| Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
TLoD,Snake 06.12.2006 18:47
@process_hobby[hobby_txt][hobbys;words;hobby;hid;hobby_html]
$hobby_html[]
^void:sql{DELETE FROM user_hobby WHERE uid=^user.id.int[]}
$hobbys[^hobby_txt.split[,;v]]
$result[
^hobbys.menu{
$words[ ^hobbys.piece.split[ ;v] ]
$hobby[^words.menu{^words.piece.trim[]}[ ]]
^if(^hobby.length[] < 256 && ^hobby.match[^^[\w\-]+^$]){
<a href="/userlist.html?act=search&hobby=^taint[uri][$hobby]">$hobby</a>
$hid(^int:sql{SELECT id FROM hobby WHERE name='^taint[sql][$hobby]'}[$.default(0)])
^if(!$hid){
^void:sql{INSERT INTO hobby (name) VALUES('^taint[sql][$hobby]')}
$hid(^int:sql{SELECT LAST_INSERT_ID() FROM hobby}[$.default(0) $.limit(1)])
}
^void:sql{INSERT INTO user_hobby (uid, hid) VALUES(^user.id.int[], $hid)}
}{
^taint[html][$hobby]
}
}[, ]
]В переменной $result получаем то что надо, плохие куски запачканы как html, наши ссылки чистые. Но, если дальше пихнуть это в SQL @update[param][set]
^if($user){
^if(def $param.hobby){
^dbconnect{
$param.hobby_html[^process_hobby[$param.hobby]]
}
}
$set[^param.foreach[key;value]{^if($value is string || !def $value){$key='^taint[sql][$value]'}{$key=$value}}[, ]]
^MAIN:dbconnect{
^void:sql{UPDATE user SET $set WHERE id=$user.id}
}
$result(1)
}то все счастье исчезает, так как код метится, как sql ^taint[sql][$value], но если это убрать, то при присутствии в тексте одинарной кавычки SQL запрос рушится.