Snusmumriken
02.04.2018
13:02:55
Чего-чего?
Катя, зачем нам идеи малого бизнеса с прибылью в 40к в количестве трёх штук на сайте-одностраничнике?
Всем тихо, я одмен ))
Я в курсе, но сначала же надо выяснить, что за спам и зачем он тут.
Google
Юрий
02.04.2018
13:05:14
Kate
02.04.2018
13:05:23
Добрый день, случайно вышел на ваш чат
Извините
Dika
02.04.2018
13:05:54
о, бот отвечает
Kate
02.04.2018
13:06:13
Бот?)
Смешно)
Snusmumriken
02.04.2018
13:07:19
Карочи, Катя.
а) Чтобы делать нормальный флорариум, нужно закончить университет по специальности "ландшафтный дизайн". Иначе получится херня. Инфа 98%. Два процента на то что у человека есть Особое Чувство Прекрасного, и он, например, настоящий художник.
б) Идеи для бизнеса не связанные с программированием тут не шибко котируются.
Alex
02.04.2018
13:07:55
Парни, вопрос... как экранировать ковычки в переменной.
Есть скрипт, которые записывает СМСки в базу. Всё бы ничего, но если в тексте встречается одинарная ковычка, то данные не записываются в базу
local from = message:getHeader("from");
local to = message:getHeader("to");
local body = message:getBody();
local time = message:getHeader("Event-Date-Local");
local luasql = require "luasql.postgres"
—
— Настройки подключения к базе PostgreSQL
DBHOST = '127.0.0.1'
DBNAME = 'freeswitch'
DBUSER = 'freeswitch'
DBPASS = 'professional'
DBPORT = 5432
local env = assert (luasql.postgres())
local dbcon = env:connect(DBNAME, DBUSER, DBPASS, DBHOST, DBPORT)
sql = "INSERT INTO sms (date, to_sms, from_sms, body_sms) VALUES ('".. time .."', '".. to .."', '".. from .."', '".. body .."')"
res, serr = dbcon:execute(sql)
dbcon:close()
env:close()
текст присутствует в переменной body
Юрий
02.04.2018
13:08:16
Бот?)
Ну да, а чё нет, при входе ни здрасти, сразу ссылку на хренпоймикуды, очень напоминает поведение бота
Snusmumriken
02.04.2018
13:08:26
Парни, вопрос... как экранировать ковычки в переменной.
Есть скрипт, которые записывает СМСки в базу. Всё бы ничего, но если в тексте встречается одинарная ковычка, то данные не записываются в базу
local from = message:getHeader("from");
local to = message:getHeader("to");
local body = message:getBody();
local time = message:getHeader("Event-Date-Local");
local luasql = require "luasql.postgres"
—
— Настройки подключения к базе PostgreSQL
DBHOST = '127.0.0.1'
DBNAME = 'freeswitch'
DBUSER = 'freeswitch'
DBPASS = 'professional'
DBPORT = 5432
local env = assert (luasql.postgres())
local dbcon = env:connect(DBNAME, DBUSER, DBPASS, DBHOST, DBPORT)
sql = "INSERT INTO sms (date, to_sms, from_sms, body_sms) VALUES ('".. time .."', '".. to .."', '".. from .."', '".. body .."')"
res, serr = dbcon:execute(sql)
dbcon:close()
env:close()
текст присутствует в переменной body
print("text with \"quotes\"")
Philipp
02.04.2018
13:08:47
Snusmumriken
02.04.2018
13:09:07
На бинарных опционах от Форекс Клуб.
Sergey
02.04.2018
13:09:14
Нафиг луа, пойду флорариумы пилить ?
Google
Philipp
02.04.2018
13:09:35
Блин, я теперь флорариум хочу себе :(
Юрий
02.04.2018
13:10:19
Sergey
02.04.2018
13:10:38
Если запилишь свой, расшарь плиз на гитхабе
Philipp
02.04.2018
13:10:49
Sergey
02.04.2018
13:11:01
Канеш☺️
Philipp
02.04.2018
13:11:05
Без проблем
Snusmumriken
02.04.2018
13:11:09
Philipp
02.04.2018
13:11:40
Snusmumriken
02.04.2018
13:12:01
А, ну тогда это уже экранирование sql.
Вот эти кавычки: `
Philipp
02.04.2018
13:12:08
Во. Он наверное про это
Snusmumriken
02.04.2018
13:12:25
А ещё, с sql стоит проверять входящий текст.
Philipp
02.04.2018
13:12:33
Это да
Alex
02.04.2018
13:12:53
Philipp
02.04.2018
13:12:57
Это пример
Экранировать обратным слэшем
\
Кавычки – \" или \'
Но тебе, кажется, нужно SQL-экранирование, а не Луа
Вот такими кавычками: `
Alex
02.04.2018
13:14:49
нет, дело в том, что текст неизвестен какой будет. ковычку то я могу в тексте заэкраниповать
Google
Alex
02.04.2018
13:15:09
ковычка такая '
Их может быть несколько
Philipp
02.04.2018
13:16:11
Это экранирование SQL, не Луа тогда
Alex
02.04.2018
13:16:30
Текст разный бывает, вот пример - OCTATOK 111.85 p. Antivirus ot Tele2. Podklyuchit': *381*1# (7 dn. bespl.)
Philipp
02.04.2018
13:17:08
И?
Alex
02.04.2018
13:17:41
Так вот из-за этой одной ковычки и не пишется в базу
Andrey
02.04.2018
13:17:49
Я так понял что тут функцию реплейса реквестируют)
Philipp
02.04.2018
13:18:01
Повторю четвертый раз
Alex
02.04.2018
13:18:52
Это я знаю. Вот хотел узнать, средствами Lua это нужно делать или все же SQL
Snusmumriken
02.04.2018
13:19:24
body = body:gsub("'", "\\'")
Philipp
02.04.2018
13:19:37
Можешь вырезать кавычки из текста с помощью gsub. Например, на вариант с экранированием слэшами
Alex
02.04.2018
13:20:10
Спасибо, попробую
Snusmumriken
02.04.2018
13:20:26
И так - со всеми потенциально неправильными символами.
Alex
02.04.2018
13:29:42
Philipp
02.04.2018
13:30:01
body = body:gsub("'", "")
Ilya
02.04.2018
13:33:30
Admin
Alex
02.04.2018
13:34:01
Что значит чем?
Google
Ilya
02.04.2018
13:34:28
Каким модулем?
Alex
02.04.2018
13:34:54
luasql.postgres
Парни спасибо. Сработало)
Philipp
02.04.2018
13:37:27
Ilya
02.04.2018
13:37:53
Я просто думал, что квотирование аргументов есть на уровне интерфейса БД. Но видимо нет, судя по примерам: http://keplerproject.github.io/luasql/examples.html
А, нет, есть:
conn:escape(str)
Escape especial characters in the given string according to the connection's character set.
See also: Official documentation of function PQescapeStringConn
Returns: the escaped string.
Snusmumriken
02.04.2018
13:41:26
А как ты это планируешь делать автоматически, если запрос - простая строка "select bla_bla from bla_bla_bla where bla = 'bla-bla\'bla\' bla'"?
Ilya
02.04.2018
13:41:34
Вот это тебе и надо использовать, чтобы гарантировать, что никто не сделает тебе SQL injection.
Snusmumriken
02.04.2018
13:41:54
Ага. Типа body = conn:escape(body).
Ilya
02.04.2018
13:42:26
Только не для всего запроса, а для каждого аргумента по отдельности
Snusmumriken
02.04.2018
13:42:47
Ещё точнее: для того аргумента, который ДОЛЖЕН быть экранирован.
Ilya
02.04.2018
13:42:55
string.format("select bla_bla from bla_bla_bla where bla = %s", conn:escape(value))
Для безопасности лучше все экранировать ?
Snusmumriken
02.04.2018
13:43:46
Да, кстати как раз хотел форматирование предложить, потому что обилие конкатенации - это кошмарно по читабельности.
Ilya
02.04.2018
13:44:22
Или можно использовать luadbi: https://github.com/mwild1/luadbi - там используется подход с плейсхолдерами и экранирование присходит автоматически.
Боянчик в тему: https://xkcd.ru/327/
Дмитрий
03.04.2018
00:11:56
а если мы пишем вот так вот
table = { "x"}
мы объявляем поле со значением "x" и каким то индексом n ??
и как мне тогда объявить пустое поле с индексом "x"?
явно указывать начальное значение?
типа
table = { "x" = 0,} ?
Snusmumriken
03.04.2018
00:19:41
Ммм.
tbl = {"x"} ==>
tbl = {}
tbl[1] = "x"
tbl = {"x" = 10} => Error: '}' expected near '=', потому что строковые ключи так не указываются.
А указываются вот так:
tbl = {x = 10} или
tbl = {["x"] = 10}
Google
Дмитрий
03.04.2018
00:20:16
оооо
ну да, я просто глупый
спасибо)
путает немного эта неразбериха со строками-индексами
Snusmumriken
03.04.2018
00:22:23
tbl = {x = 10, 'yo', 'hai', y = 35} = это всё равно что =>
tbl = {}
tbl[1] = 'yo' -- потому что без ключей указывается массивная часть, где бы она ни была
tb[2] = 'hai'
tbl.x = 10
tbl["y"] = 35 -- для примера
Дмитрий
03.04.2018
00:23:01
так а
table = { x} тогда что объявляет?
Snusmumriken
03.04.2018
00:23:15
table = {}
table[1] = x