
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

Alex
02.04.2018
13:34:01
Что значит чем?

Ilya
02.04.2018
13:34:28
Каким модулем?

Google

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}

Дмитрий
03.04.2018
00:20:16
оооо
ну да, я просто глупый
спасибо)

Google

Дмитрий
03.04.2018
00:20:44
путает немного эта неразбериха со строками-индексами

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