@ProLua

Страница 267 из 307
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
Бот?)
Ну да, а чё нет, при входе ни здрасти, сразу ссылку на хренпоймикуды, очень напоминает поведение бота

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
Скажи спасибо, что не трейдеры с доходностью 50% в неделю
А чё нет-то пусть расскажут как роботов кодить на площадках

Sergey
02.04.2018
13:10:38
Если запилишь свой, расшарь плиз на гитхабе

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
print("text with \"quotes\"")
А если на вход приходит строка, в которой есть кавычки?

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
print("text with \"quotes\"")
Спасибо. Но к чему мне print выодить?

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. Например, на вариант с экранированием слэшами

body = body:gsub("'", "\\'")
Во, вот так

Alex
02.04.2018
13:20:10
Спасибо, попробую

Snusmumriken
02.04.2018
13:20:26
И так - со всеми потенциально неправильными символами.

Alex
02.04.2018
13:29:42
Можешь вырезать кавычки из текста с помощью gsub. Например, на вариант с экранированием слэшами
Попробовал. Этот вариант ставит слеш перед ковычкой. - V aprel\' bez avtoshtrafov! А как вырезать?

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

Страница 267 из 307