Вопрос № 130120: Здравствуйте!
Не могу дойти до одной, вроде бы, простой вещи. При вводе куска текста из формы HTML в базу данных MySQL съедается косая черта.
Поэтому код, который я использую, содержит две подряд функции addslashes:
proba.p...Вопрос № 130124: Здравстуйте!
Проблема у меня со слешами. Чтобы нормально ввести в БД их, требуется проаддслешить два раза, иначе съедаются и доходят в ячейку в неизменном виде, а назад - вообще без них. Пример в приложении. Что не так? Почему как по руковод...Вопрос № 130234: Здравие желаю товарсчи! как-то на RusFaq'e задавал о том, как можно увеличить картинку, приэтом н потеряв качества (без артефактов). Но так и не получилось :( Может кто щас поможет....Вопрос
№ 130256: Здравствуйте, уважаемые эксперты.
Имеется удаленная страница в интернете (не на моем сервере). Нужно открыть ее, затем записать в поле определенный текст, затем нажать на кнопку отправки. Это нужно повторять через определенный промежуток вре...Вопрос № 130288: Здравствуйте! Подскажите как в PHP прописывается код условия является ли браузер пользователя Microsoft Internet Explorer или Netscape Navigator или другой. Спасибо за ответ....
Вопрос № 130.120
Здравствуйте!
Не могу дойти до одной, вроде бы, простой вещи. При вводе куска текста из формы HTML в базу данных MySQL съедается косая черта.
Поэтому код, который я использую, содержит две подряд функции addslashes:
proba.php_____________________________________
<?php
include $_SERVER['DOCUMENT_ROOT']."/../my_data.php";
$db=new mysqli($host,$username,$password,$db);
$text=isset($_POST['text'])?$_POST['text']:"";
if ($text!="") {
if (!get_magic_quotes_gpc()) $text=addslashes(addslashes($text));
@$query="insert into proba set ID=NULL, text='".$text."'";
@$db->query($query);
}
$query="select * from proba";
$result=$db->query($query);
$num=$result->num_rows;
$text="<b>".$num." строк-записей</b><br/>";
for ($i=0; $i<$num; $i++):
$row=$result->fetch_assoc();
if (!get_magic_quotes_gpc()) $text.=nl2br(stripslashes($row['text']))."<hr/>";
else $text.=$row['text']."<hr/>";
endfor;
Кстати, обратил внимание, что на этом форуме часто бывают проблемы с правильной передачей слешей в форме приложения. Поэтому, для более правильной передачи кода ею сейчас не пользуюсь.
В чём моя ошибка? Делаю так, как написано в руководствах - в базу поступают кастированные слеши. Добавляются только при двойном использовании функции.
Отвечает: Иван Сергеевич
Здравствуйте, Прим Палвер!
Директива magic_quote_gpc экранирует спецсимволы (одиночную и двойную кавычки и обртный слэш), добавляя перед ними обратный слэш. Это действует только для данных в GET, POST, COOKIE (с чем собственно и связана аббревиатура gpc). Если она отключена, вручную экранируем данные ОДИН раз функцией addslashes().
В базе запишется введенная пользователем строка, т.к. "экранные" обратные слэши уберутся MYSQL'ем. Проблема только при запросе из php. Как мы уже знаем, magic_quote_gpc используется ТОЛЬКО для GET, POST, COOKIE. Поэтому бессмысленно ее проверять при обработке запроса к БД. Таким образом, убираем вызов stripslashes() и должно быть счастье :)
PS. Перед addslashes я бы порекомендовал использовать функцию htmlspecialchars($text, ENT_QUOTES), чтобы выводимые в дальнейшем другие спецсимволы (например, угловые скобки) воспринимались браузером как обычный текст.
Ответ отправил: Иван Сергеевич (статус: 6-ой класс)
Ответ отправлен: 02.04.2008, 09:16 Оценка за ответ: 5 Комментарий оценки: Спасибо.
Так всё-таки, следующая комбинация правильна?
Перед вставкой в БД:
$message=addslashes(htmlspecialchars(trim($message)));
if (!get_magic_quotes_gpc()) $message=addslashes($message);
Т.е., один раз слэш вставляется в любом случае, а второй - в зависимости от get_magic_quotes_gpc().
Вопрос № 130.124
Здравстуйте!
Проблема у меня со слешами. Чтобы нормально ввести в БД их, требуется проаддслешить два раза, иначе съедаются и доходят в ячейку в неизменном виде, а назад - вообще без них. Пример в приложении. Что не так? Почему как по руководствам не выходит один раз использовать addslashes?
Отвечает: PVS@Lviv
Здравствуйте, Прим Палвер!
Слэш - служебный символ mysql'я. Тоесть один раз stripslashes происходит при операции INSERT.
Ответ отправил: PVS@Lviv (статус: Специалист)
Ответ отправлен: 02.04.2008, 10:34 Оценка за ответ: 4 Комментарий оценки: Слишком лаконично.
Мой подход правилен или нет? - вот в чём вопрос. Т.е., вот так:
$message=addslashes(htmlspecialchars(trim($message)));
if (!get_magic_quotes_gpc()) $message=addslashes($message);
Вопрос № 130.234
Здравие желаю товарсчи! как-то на RusFaq'e задавал о том, как можно увеличить картинку, приэтом н потеряв качества (без артефактов). Но так и не получилось :( Может кто щас поможет.
Отвечает: Командин Константин Евгениевич
Здравствуйте, Khalafov Rashad!
Такая операция в принципе не возможно при использовании растровых изображений. Увеличение (маштабирование) без потери качества изображений, возможно только с векторными изображениями.
Имеется удаленная страница в интернете (не на моем сервере). Нужно открыть ее, затем записать в поле определенный текст, затем нажать на кнопку отправки. Это нужно повторять через определенный промежуток времени.
Помогите, пожалуйста, хотя бы с первой частью.
Заранее спасибо.
Отправлен: 02.04.2008, 19:24
Вопрос задала: Angel7 (статус: Специалист)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 4)
Отвечает: Чаднов Н
Здравствуйте, Angel7!
хм. Ну то что ты описал делаеться не так.
Как можно сделать в приложении.
$data это данные которые ты ложишь.
$put это путь к файлу.
$host это сервер
в fsockopen 1, адрес сервера. 2 порт, 3 ошибка номер, ошибка строка, время ожидания.
Приложение:
Ответ отправил: Чаднов Н (статус: 3-ий класс)
Ответ отправлен: 02.04.2008, 19:53 Оценка за ответ: 4 Комментарий оценки: Я прекрасно понимаю, что хочу сделать. Это Вы не до конца разобрались в вопросе. Мне нужно зайти на страницу, затем записать информацию (ее много) в поле. потом отправить на сервер. Но все равно спасибо за попытку.
Отвечает: Драк Георгий
Здравствуйте, Angel7!
Куда правильнее будет проследить куда с этой страницы отправляются данные и обращаться непосредственно по этому адресу. Если форма на удалённой странице передаёт данные методом get то всё совсем просто - смотрите адрес и названия переменных и эмулируете обращение. Пример 1 в приложение. Если же форма отправляет данные методом post, то стоит воспользоваться сокетами. Пример 2 в приложении.
Приложение:
--------- Sonic always help you, if he wish...
Ответ отправил: Драк Георгий (статус: 3-ий класс)
Ответ отправлен: 02.04.2008, 19:55
Отвечает: Командин Константин Евгениевич
Здравствуйте, Angel7!
В настоящее время чаще всего используют два метода отправки форм POST и GET, какой метод используется в вашем случае необходимо посмотреть исходный код того сайта. Также вам надо будет посмотреть какие поля там используются (input).
ну а далее если не обращатся к какимто сторонним программа можно написать локальную страничку и вставить в нее примерно такой код на JavaScript и HTML в приложении:
ЗЫ. еще нужно будет проверить путь в ACTION чтобы знать куда отправлять вашу форму.
ЗЗЫ: в данном примере данные формы будут отсылаться каждую секунду, чтобы скорректировать время смотри SetTimeOut, время задается вторым аргументом в тысячных секунды.
Здравствуйте! Подскажите как в PHP прописывается код условия является ли браузер пользователя Microsoft Internet Explorer или Netscape Navigator или другой. Спасибо за ответ.
Отправлен: 02.04.2008, 22:03
Вопрос задал: Dimanq (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 3)
Отвечает: Товарищ Бородин / Borodul
Здравствуйте, Dimanq! Информация о браузере пользователя содержится в массиве $_SERVER, ключ - 'HTTP_USER_AGENT'. Беда в том, что определить браузер простым сравнением переменной $_SERVER['HTTP_USER_AGENT'] с какой-либо строкой довольно непросто - сначала следует эту переменную прочитать с помощью какой-либо функции, которая точно определит браузер(то есть, вычленит его из строки, а она довольно длинная). Попробуйте сами - PHP определяет, например, IE как Mozilla-браузер, и только где-то в глубине строки
уже пишет, что программа называется Internet Explorer версии такой-то. Просто сервер определяет не только браузеры, но и любые пользовательские агенты, которые обращаются к серверу, например, качательные программы. С уважением, Товарищ Бородин / Borodul
--------- - Я вчера коньяк пил, 25 лет выдержки, вот это выдержка! - Ерунда! Вот я вчера выпил 5 литров пива и поехал от Сочи до Иваново на автобусе без остановок. Вот это выдержка...
Ответ отправил: Товарищ Бородин / Borodul (статус: Профессионал) Россия, Новосибирск Тел.: +7-923-245-3366 ICQ: 346988855 ---- Ответ отправлен: 02.04.2008, 22:13
Отвечает: M@gi$†e®
Здравствуйте, Dimanq!
Видел как-то класс "browser.class" от Paul Scott (если мне не изменяет память). Так вот, с помощью этого класса можно узнать браузер пользователя.
Поищите в гугле.
--------- Aquila non Capta Muscas
Ответ отправил: M@gi$†e® (статус: 10-ый класс)
Ответ отправлен: 03.04.2008, 00:49