1

Не могу вырезать или записать в бд текст с кавычками.

Перепробовал и экраны и вырезки. Записывается в базу всё до первых кавычек, остальное нет.

<select name="ololo">
<option value="Контора "Рога и котыпа"">1</option>
<option value="Контора 'Рога и котыпа'">2</option>
</select> 

отправляю это всё на обработку через ПОСТ

Ловлю:

$ololo = $_POST['ololo'];

Записываю:

$result = $коннект_с_БД->exec("INSERT INTO таблица (ololo) VALUES ('$ololo')");
Kromster
  • 13,809
Vladik
  • 131
  • а если по-человечески через подготовленные выражения вставлять, то тоже ничего? – Алексей Шиманский Oct 08 '17 at 14:32
  • тоже ничего.... – Vladik Oct 08 '17 at 14:35
  • @Vladislav_Carley, идите читайте https://ru.stackoverflow.com/q/568971/186083 https://ru.stackoverflow.com/q/637185/186083 про htmlspecialchars() и подготовленные выражения. – Visman Oct 08 '17 at 14:39

3 Answers3

0

ладно, если по-феншую делать лень - то в качестве "абы как" пусть будет:

$mysqli = mysqli_connect(..........);
$result = $коннект_с_БД->exec("INSERT INTO таблица (ololo) VALUES ('".mysqli_real_escape_string($mysqli, $ololo)."')");
AlexandrX
  • 584
  • 2
  • 11
0
$sql = sprintf(
    "INSERT INTO таблица (ololo) VALUES (%s)",
    $коннект_с_БД->quote($ololo)
);
$result = $коннект_с_БД->exec($sql);
sh1da9440
  • 326
  • Режет всё после кавычек – Vladik Oct 08 '17 at 15:13
  • 1
    У вас наверное через форму значения не пересылаются полностью. – sh1da9440 Oct 08 '17 at 15:18
  • Можно подробнее немного – Vladik Oct 08 '17 at 15:23
  • 1
    Кавычки должны быть заэкранированы. Для экранирования используйте функцию htmlspecialchars. – sh1da9440 Oct 08 '17 at 15:28
  • СПАСИБО ОГРОМНОЕ!!! Сделал в опшене и работает!!!! value="'.htmlspecialchars($blabla).'" – Vladik Oct 08 '17 at 15:39
0

Первое, хоть и не по порядку как они в коде идут, но глаз жутко режет. Да, это очень удобно делать запрос "одной строчкой", но это противоречит схеме работы с PDO.

$stmt = $коннект_с_БД->prepare("INSERT INTO таблица (ololo) VALUES (?);");
$stmt->execute([$ololo]);
$result = $stmt->fetchAll();

Если очень нравится делать это в одну строчку - сделайте специальную функцию/класс для этого.

Второе, у вас в первом option идёт "Контора "Рога и копыта"" - оно и будет заносить в базу только "Контора " - потому что значение атрибута на этом и заканчивается. Нужно писать внутри атрибутов вместо двойных кавычек: &quot;

Если вставляете значения для value в php части - то можно делать вместо подстановки переменной "как есть" вот так:

str_replace('"','&quot;',htmlspecialchars($a))