Не могу экранировать кавычки
Экранировать кавычки
Здравствуйте, подскажите как экранировать кавычки, я прочитал что нужно использовать addslashes для.
Не могу экранировать html код В php
Dreamveawer говорит что ошибка в экранировании (<<<HERE HERE; ). Сразу говорю весь html код.
Как обернуть кавычки в кавычки
Здравствуйте! Пробую обернуть кавычки в кавычки но пока оборачивается весь текст: .
нужно тут экранировать?
$_GET=isset($_GET)?intval($_GET):’first’; $_GET нужно тут экранировать так? .
$password = "\'asfdafsdafsdf"; // echo $password = addslashes(stripslashes($password)); mysql_query("INSERT INTO users (login,password) VALUES($login,$password)") or die(mysql_error());
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ‘\’asfdafsdafsdf)’ at line 1
mysql_query("INSERT INTO users (login,password) VALUES('".$login."','".$password."')") or die(mysql_error());
Сообщение от UchihaSV
mysql_query(«INSERT INTO users (login,password) VALUES(‘».$login.»‘,'».$password.»‘)») or die(mysql_error());
Тоже хотел так написать, но автор ведь жаловался на кавычку?
Сообщение от ProstoMad
Сообщение от ProstoMad
И не будет. Вам надо понять разницу между одинарными и двойными кавычками. И экранирование кавычек.
Сообщение от ISerg1986
У меня одинарные кавычки — вы же поставили двойные.
Ну а проще, как уже сказали, так
Сообщение от UchihaSV
mysql_query(«INSERT INTO users (login,password) VALUES(‘».$login.»‘,'».$password.»‘)») or die(mysql_error());
Или так — кавычек поменьше. Здесь двойные не нужны.
mysql_query(‘INSERT INTO users (login,password) VALUES(‘.$login.’,’.$password.’)’) or die(mysql_error());
Как экранировать переменные?
ребят подскажите как за экранировать переменные? mysql_query("insert into log set.
Как экранировать кавычки?
Подскажите пожалуйста как в vb в строке экранировать кавычки?)) "Моя строка " с кавычкой" пытался.
Как экранировать кавычки?
Есть запрос вида: this->SQLQuery->SQL->Add("UPDATE `main`.`conf` SET.
Как экранировать кавычки?
Совсем недавно начала изучать Oracle. Есть такой кусок кода: EXCEPTION WHEN l_date_old.
Почему функция addslashes () не работает в моем массиве в php?
У меня есть серия переменных сеанса в массиве. Когда я использую кавычки в одной из моих строковых переменных, я стараюсь добавлять символы, чтобы в конечном итоге вставить их в БД, но функция addslashes () не работает. Вот пример.
В поле комментариев я пишу это:
Я понимаю, что это проблема, поэтому я добавил функцию, прежде чем вводить ее в базу данных, которая проходит через серию переменных Session, включая переменную комментариев.
$strip_fields = array($_SESSION['comments'],$_SESSION['employee_id'],$_SESSION['approved_by'],$_SESSION['delivery_email'],$_SESSION['full_name'],$_SESSION['first_name'],$_SESSION['last_name']); foreach($strip_fields as $key => $value)
После запуска этой функции я попытаюсь выставить переменную комментариев $ _SESSION [‘comments’]
Поэтому я вижу, что функция addlashes каким-то образом не работает так, как я ее использую. Почему функция addlashes не работает так, как я ее использую?
ЭТО МОЕ РЕШЕНИЕ (я немного использовал оба предложения)
$strip_fields = array( 'employee_id', 'approved_by', 'delivery_email', 'full_name', 'first_name', 'last_name', 'title', 'title_2', 'dept_div', 'dept_div_2', 'email', 'comments', 'special_instructions' ); foreach($strip_fields as $key) < $_SESSION[$key] = $conn->real_escape_string($_SESSION[$key]); >
- Cookie не работает с системой входа в систему CodeIgniter
- Невозможно ограничить действия пользователя после успешного входа в codeigniter
- Не удается получить данные flash для работы на странице после регистрации
- PHP: как проверить, был ли пользователь уже зарегистрирован и иным образом перенаправлен на страницу входа в систему
- Проблема с функцией session_start () (работает медленно)
- Советы по подписанию файлов cookie вместо сеансов
- Обнаружение сайта выхода пользователя
- Часто изменяются переменные PHP $ _SSIONSION?
- Безопасные и гибкие междоменные сеансы
- Убедитесь, что сеанс php получает тот же сеанс оракула при использовании oci_pconnect
- Как изменить тайм-аут сеанса в PHP?
- Тайм-аут сеанса PHP PEAR
Блог
Главная — Вопросы по программированию — Почему функция addslashes () не работает с моим массивом в php?
Почему функция addslashes () не работает с моим массивом в php?
#php #arrays #session #escaping
#php #массивы #сессия #экранирование
Вопрос:
У меня есть ряд переменных сеанса в массиве. Когда я использую кавычки в одной из моих строковых переменных, я пытаюсь добавить косые черты, чтобы в конечном итоге вставить их в базу данных, но функция addslashes () не работает. Вот пример.
В поле комментариев я пишу это:
Я понимаю, что это проблема, поэтому я добавил функцию, прежде чем вводить ее в базу данных, которая выполняется через ряд переменных сеанса, включая переменную comments.
$strip_fields = array($_SESSION['comments'],$_SESSION['employee_id'],$_SESSION['approved_by'],$_SESSION['delivery_email'],$_SESSION['full_name'],$_SESSION['first_name'],$_SESSION['last_name']); foreach($strip_fields as $key => $value) < $key = addslashes($key); >
После запуска этой функции я пытаюсь отобразить переменную комментариев $_SESSION[‘comments’]
Итак, я вижу, что функция addslashes почему-то работает не так, как я ее использую. Почему функция addslashes работает не так, как я ее использую?
ЭТО МОЕ РЕШЕНИЕ (я использовал немного из обоих предложений)
$strip_fields = array( 'employee_id', 'approved_by', 'delivery_email', 'full_name', 'first_name', 'last_name', 'title', 'title_2', 'dept_div', 'dept_div_2', 'email', 'comments', 'special_instructions' ); foreach($strip_fields as $key) < $_SESSION[$key] = $conn->real_escape_string($_SESSION[$key]); >
Ответ №1:
Ваш вопрос подразумевает, что вы на самом деле хотите изменить содержимое вашей $_SESSION переменной, но это не кажется хорошей идеей, поскольку в конечном итоге вы просто будете добавлять косые черты снова и снова при каждом вызове скрипта (просто наблюдение без просмотра всего вашего кода).
Кроме того, вы не должны использовать addslashes для экранирования базы данных, поскольку каждая база данных (или уровень абстракции базы данных) имеет свой собственный способ экранирования данных (например, mysql_real_escape_string или подготовленные инструкции PDO).
Кроме того, $_SESSION и база данных — это разные способы сохранения данных, и вполне может быть, что их смешивание — плохой выбор дизайна.
РЕДАКТИРОВАТЬ ПОСЛЕ КОММЕНТАРИЯ…
Если вы хотите поместить все эти переменные в базу данных, а до этого они были в $_SESSION (что, как указывалось ранее, может быть не лучшей идеей), и вы используете модуль mysql php, тогда вы могли бы сделать что-то вроде:
$db_names=array( "comments", "employee_id", "approved_by", "full_name", "first_name", "last_name" ); $clean=array(); foreach($db_names as $name) $clean[$name]=mysql_real_escape_string($_SESSION[$db_name]); mysql_query(" INSERT INTO comments_table ( comments, employee_id, approved_by, full_name, first_name, last_name ) VALUES ( ' ', ' ', ' ', ' ', ' ', ' ' ) ");
Однако лучше не использовать модуль mysql, а вместо этого использовать mysqli или PDO. У каждого есть разные (и лучшие, по ряду причин) способы экранирования строк.
Комментарии:
1. 1 за то, что я единственный, кто упомянул, что это addslashes никогда не подходит для подготовки данных для вставки SQL .
2. Согласен. Иногда ответ на заданный вопрос не является правильным ответом. 🙂
3. Я ценю ваш вклад, но на самом деле это не решает мою проблему. Итак, как мне решить эту проблему. Без addslashes я все еще получаю ошибку MySQL при попытке добавить ее в DB, поскольку она содержит кавычки. Вы рекомендуете мне просто использовать mysql_real_escape_string вместо addslashes? Будет ли это работать в созданном мной массиве?
Ответ №2:
Здесь есть несколько ошибок:
- Вы копируете значения в $_SESSION в новые переменные.
- Вы передаете ключи в addslashes() , но вы поместили значения в значения массива.
- foreach() копирует значения из массива в $key и $value , таким образом, вы работаете с копией копии.
Вы должны иметь возможность использовать ссылки для этого, но я думаю, что пропуская их, будет понятнее.
$strip_fields = array( 'comments', 'employee_id', 'approved_by', 'delivery_email', 'full_name', 'first_name', 'last_name'] ); foreach($strip_fields as $key) < $_SESSION[$key] = addslashes($_SESSION[$key]); >
Комментарии:
1. Спасибо за вашу помощь. Я опубликовал то, что сделал выше.
Ответ №3:
НЕ ИСПОЛЬЗУЙТЕ addslashes() ДЛЯ ЭКРАНИРОВАНИЯ ЗНАЧЕНИЙ ДЛЯ SQL-ЗАПРОСА! (извините за крик)
В случае MySQL ваш выбор mysql_real_escape_string() но у других движков есть свои собственные escape-функции. addslashes() удивительно легко «обмануть», если вы пытаетесь выполнить атаку с использованием SQL-инъекции.
Лучшее, что вы могли бы сделать, это не экранировать $_SESSION саму себя, а создать копию и использовать array_map() вместе с mysql_real_escape_string() . Таким образом, вы также можете сохранить исходную версию без экранирования.
$escaped_SESSION=array_map('mysql_real_escape_string', $_SESSION);
Другие уже объясняли, почему foreach это не лучший выбор для манипулирования вашим массивом. Она работает с копией массива, на котором вы ее запускаете. array_map() применит обратный вызов ко всем элементам вашего массива и вернет результирующий массив.
Ответ №4:
$array = array('comment' => $_SESSION['comment'], 'employee_id' => $_SESSION['employee_id']); // other keys of session foreach(array_keys($array) as $value)< $array[$value] = addslashes($array[$value]); >
используйте $array вместо использования $ _SESSION.
Комментарии:
1. Она по-прежнему работает с копиями исходных значений из $_SESSION .
2. Используйте foreach ($array as $key => $value) вместо создания нового массива, содержащего ключи с помощью array_keys() . Или используйте ссылку с foreach ($array as amp;$value) $value = addslashes($value); .
Ответ №5:
Вам нужно сохранить результирующее значение обратно в значение, которое вы повторяете
$strip_fields = array($_SESSION['comments'],$_SESSION['employee_id'],$_SESSION['approved_by'],$_SESSION['delivery_email'],$_SESSION['full_name'],$_SESSION['first_name'],$_SESSION['last_name']); foreach($strip_fields as $key => $value) < $strip_fields[$key] = addslashes($value); // Store it back into the strip_fields var >
Также, как отметил @Gaurav, вы хотите очистить данные массива, а не индекс / ключ.
Комментарии:
1. Это перезапишет 0-е, 1-е, 2-е и т.д. значения из, $_SESSION поскольку $strip_fields они не содержат соответствующих ключей.
2. Я редактировал свой ответ, когда вы отвечали. Я обновил свой код после понимания его структуры массива. Я понимаю, что это не обновляет SESSION var, но я использовал то, что он написал, думая, что он может использовать это в другом месте. Решение Дэвида корректно изменяет SESSION var
3. Это не сработает. Вы не можете изменить $strip_fields из foreach .
4. @bazmegakapa Уверен, что вы можете. Хотя $value это явно копия (а не ссылка), вы не можете обновить значение и повлиять на него в оригинале. Однако, явно обновляя фактический массив по заданному индексу, это приведет к принудительному обновлению. Если бы вы хотели сделать это ссылкой, вы могли бы включить amp; , но я не хотел делать это более техническим. foreach($strip_fields as $key => amp;$value)
5. Да, вы правы. Тем не менее, то, что вы написали в своем ответе, неверно, потому что это не работает. Таким образом, это не ответ на этот вопрос. Пожалуйста, отредактируйте и «сделайте это техническим» настолько, насколько это необходимо, чтобы дать рабочий ответ :).