Некоторое время я боролся с небольшой проблемой. Он был там годами, но это была просто раздражающая проблема, а не серьезная, и я только что обошелся. Но теперь я хочу узнать, может ли кто-нибудь помочь мне. Я сделал некоторые google'ing, но не успел.
Если я делаю сообщение формы из html textarea в php-файле, например:
<form action="http://action.com" method="post"> <textarea name="text"><a href="http://google.com">google's site</a></textarea> </form>
и, конечно, есть кнопка отправки и так далее.
Значение представляет собой проблему: <a href="http://google.com">google's site</a>
В значении текстового поля есть как («Котировочная метка»), так и «(Apostrophe).
Чтобы сохранить это в mysql_database, я делаю это:
$result = mysql_query("INSERT INTO `table` (`row1`) VALUES ('".$_POST['text']."') ") or die(mysql_error());
И теперь я получаю ошибку mysql:
У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с сайтом '' в строке 1
Ваша строка sql будет:
INSERT INTO `table` (`row1`) VALUES ('google's site')
Это не действительный оператор. Как писал Нанн, избегайте строки, по крайней мере, с помощью mysql_real_escape_string: http://php.net/manual/en/function.mysql-real-escape-string.php
И читайте о SQL-инъекции http://en.wikipedia.org/wiki/SQL_injection
Подумайте немного: если кто-то пишет это: $_POST['text']
со значением: ');delete from table;....
Вы можете прощаться с вашими данными 🙂
Всегда фильтровать / убирать вход!
EDIT: Начиная с PHP 5.5.0 mysql_real_escape_string и расширение mysql устарели. Вместо этого используйте mysqli extension и mysqli :: escape_string
Всегда используйте mysql_real_escape_string при добавлении значений, предоставленных пользователем, в базу данных. Вы должны изучить параметры привязки или mysqli, чтобы ваш запрос стал следующим:
INSERT INTO `table` (`row1`) VALUES (?)
А также ? будет заменено фактическим значением после дезинфекции входа.
В вашем случае используйте:
$result = mysql_query("INSERT INTO `table` (`row1`) VALUES ('".mysql_real_escape_string($_POST['text'])."') ") or die(mysql_error());
Читайте на SQL Injection. Стоит делать правильно как можно скорее!
Исключить строку: D
http://php.net/manual/en/function.mysql-real-escape-string.php
вы можете использовать функцию addslashes (). Это строка Quote с косой чертой. поэтому, это будет очень полезно для вас, когда вы добавляете какой-либо апостроф в свою область.
$result = mysql_query("INSERT INTO `table` (`row1`) VALUES ('".addslashes($_POST['text'])."') ") or die(mysql_error());
вместо использования старых функций mysql *, используйте PDO и записывайте параметризованные запросы – http://php.net/pdo
Я также искал символы, когда обновлял данные в mysql.
Но я, наконец, пришел к лучшему ответу: вот:
$lastname = "$_POST["lastname"]"; //lastname is : O'Brian, Bran'storm
И когда вы собираетесь обновлять свою базу данных, система не будет обновлять ее, если вы не используете MySQL REAL Escape String. Вот:
$lastname = mysql_real_escape_string($_POST["lastname"]); // This Works Always.
Тогда ваш запрос обязательно обновится.
Example: mysql_query("UPDATE client SET lastname = '$lastname' where clientID = '%"); //This will update your data and provide you with security.
Для получения дополнительной информации, пожалуйста, проверьте MYSQL_REAL_ESCAPE_STRING
Надеюсь это поможет