Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: проблема с кавычками при занесении в базу?
 
 автор: xpom   (10.09.2008 в 10:54)   письмо автору
 
 

Заношу в базу данных в поле varchar из формы данные в виде текста с кавычками, а после базы данных, там где начинались кавычки ставиться \ а остальное обрезается??

   
 
 автор: Trianon   (10.09.2008 в 11:50)   письмо автору
 
   для: xpom   (10.09.2008 в 10:54)
 

Проблемы, вероятно, на трех шагах.
1.При получении из поля формы
2. При формировании запроса на помещение в таблицу
3. При выводе в HTML-поток.

Эти три проблемы нужно решать независимо.

   
 
 автор: xpom   (10.09.2008 в 12:19)   письмо автору
 
   для: Trianon   (10.09.2008 в 11:50)
 

получаю данные в форме:


<INPUT type="text" name="name" size="60" maxlength="200" value="">


передаю методом POST в файл для обработки. В этом файле принимаю
if (isset($_POST['name']))
        {
        $name=$_POST['name'];
        }else {
        $name="";
        }

и заношу в этом же файле в скрытое поле, для передачи в следующий рнр файл:

echo '<INPUT type="hidden" name="name" value="'.$name.'">';


а в следующем файле принимаю и заношу в таблицу:


if (isset($_POST['name']))
        {
        $name=$_POST['name'];
        }else {
        $name="";
        }

mysql_query("INSERT INTO Table (Name)
            VALUES
            ('$name')",$db);

попробовал поставить перед занесением в базу функцию mysql_real_escape_string();

$name=mysql_real_escape_string($name);
mysql_query("INSERT INTO Table (Name)
            VALUES
            ('$name')",$db);

но эта функция не помогла...

Просматриваю базу в MyAdmin так там уже заноситься без кавычек, а стоит обратный слэш.

Подскажите, где здесь ошибка?

   
 
 автор: Trianon   (10.09.2008 в 12:52)   письмо автору
 
   для: xpom   (10.09.2008 в 12:19)
 

>получаю данные в форме:
>передаю методом POST в файл для обработки. В этом файле принимаю
> $name=$_POST['name'];
1. Ошибка - не учитывается случай магических кавычек
функции get_magic_quotes_gpc() и spripslashes()

>и заношу в этом же файле в скрытое поле, для передачи в следующий рнр файл:
>echo '<INPUT type="hidden" name="name" value="'.$name.'">';
2. Ошибка - а) выбран неудачный тип кавычек для ограничения,
б) при помещении в html-поток не кодируются спецсимволы
функция htmlspecialchars()


>а в следующем файле принимаю
Грубейшая ошибка в понимании Эпринимаю и заношу" - РАЗНЫЕ ШАГИ!
Итак:
>а в следующем файле принимаю
> $name=$_POST['name'];
3. Ошибка аналогична 1.
>и заношу в таблицу:
>mysql_query("INSERT INTO Table (Name)
> VALUES
> ('$name')",$db);
4. Ошибка в формировании литеральной текстовой константы.
функция mysql_escape_string()

>попробовал поставить перед занесением в базу функцию mysql_real_escape_string();
>$name=mysql_real_escape_string($name);
>mysql_query("INSERT INTO Table (Name) VALUES ('$name')",$db);
>но эта функция не помогла...
Значит четвертую ошибку исправили. Осталось добить остальные.

>Просматриваю базу в MyAdmin так там уже заноситься без кавычек, а стоит обратный слэш.
>Подскажите, где здесь ошибка?
Подсказал.

Где читать описания функций - знаете?

   
 
 автор: xpom   (10.09.2008 в 14:23)   письмо автору
 
   для: Trianon   (10.09.2008 в 12:52)
 

Спасибо большое за подсказки!

>Где читать описания функций - знаете?
да, здесь на сайте читаю http://www.softtime.ru/bookphp/gl5_1.php

функция get_magic_quotes_gpc() возвращает 1. значит при использовании функции htmlspecialchars() автоматически преобразует специальные символы в HTML.

Сейчас буду пробовать, с такими несложными действиями добавляются даже лишние слэши, такие можно удалять функцией stripslashes()

А если при использовании htmlspecialchars() автоматически экранируются кавычки, то использовать функцию mysql_real_escape_string() не нужно? Или все же лучше применить, перед этим поудаляв слэши функцией stripslashes()?

Скажите, а есть функция, которая удаляет не только экранирование кавычек, но и все преобразования, которые ставит функция htmlspecialchars()?

   
 
 автор: Trianon   (10.09.2008 в 15:10)   письмо автору
 
   для: xpom   (10.09.2008 в 14:23)
 

>Спасибо большое за подсказки!
>
>>Где читать описания функций - знаете?
>да, здесь на сайте читаю http://www.softtime.ru/bookphp/gl5_1.php
>
Нет. Не здесь. А вот где: http://www.php.net/manual/ru/indexes.php
>. значит при использовании ф...
Дальше написан сплошной бред.

   
 
 автор: xpom   (10.09.2008 в 15:48)   письмо автору
 
   для: Trianon   (10.09.2008 в 15:10)
 

>Нет. Не здесь. А вот где...
Спасибо, очен. удобно, много функций.

>Дальше написан сплошной бред.
Но как ни странно, этот бред работает нормально.

   
 
 автор: Valick   (10.09.2008 в 15:51)   письмо автору
 
   для: xpom   (10.09.2008 в 15:48)
 

htmlspecialchars() - нужно использовать при выводе (а не при сохранении в базу или в файл) данных полученных извне "несмотря ни на что и вопреки всему". т.е. постоянно.

   
 
 автор: xpom   (10.09.2008 в 16:22)   письмо автору
 
   для: Valick   (10.09.2008 в 15:51)
 

При вводе данных в базу я использую функцию mysql_real_escape_string() перед этим удалив экранированные слэши кавычек, функцией stripslashes()

А при перенесении данных скрытой строкой, в другой файл, какую функцию использовать? Я использую htmlspecialchars() :

echo "<INPUT type='hidden' name='name' value='".htmlspecialchars($name)."'>";

   
 
 автор: BinLaden   (10.09.2008 в 16:31)   письмо автору
 
   для: xpom   (10.09.2008 в 16:22)
 

<?php
echo "<INPUT type='hidden' name='name' value='".htmlspecialchars($nameENT_QUOTES)."'>";
?>

   
 
 автор: xpom   (10.09.2008 в 16:40)   письмо автору
 
   для: BinLaden   (10.09.2008 в 16:31)
 

А может лучше оставить без изменений? Чтобы потом не убирать экранирование stripslashes()

<?php
echo "<INPUT type='hidden' name='name' value='".htmlspecialchars($nameENT_NOQUOTES)."'>";
?> 

   
 
 автор: BinLaden   (10.09.2008 в 17:10)   письмо автору
 
   для: xpom   (10.09.2008 в 16:40)
 

Нельзя применять ENT_NOQUOTES в данном случае, иначе если в $name будет апостроф, то разметка станет неверной (или, как говорят, "невалидной").

htmlspecialchars() c mode "ENT_QUOTES" экранирует помимо всего прочего и апостроф, который учавствует в формировании значения атрибута "value". Это то же самое, что не применять экранирования апострофа при формировании SQL-запроса:

<?php
$s 
" ' ";
$query "SELECT * FROM `tbl` WHERE `s` = '$s';";
?>


<?php
$s 
" ' ";
echo 
"<input type='text' value='$s' />";
?>

   
 
 автор: xpom   (10.09.2008 в 17:43)   письмо автору
 
   для: BinLaden   (10.09.2008 в 17:10)
 

Ясно, спасибо большое!

   
 
 автор: valera380   (11.09.2008 в 13:17)   письмо автору
 
   для: xpom   (10.09.2008 в 17:43)
 

была такая жэ проблема. решил моментально.
кстати на сервере в компе нет проблемы. а на хостенге появлялась.
решение.
вставь этот код при обработке данных из формы
$meil = substr($HTTP_POST_VARS["meil"],0,32);
$meil = htmlspecialchars(stripslashes($meil));
это есть в учебнике по PHP на этом сайте.
помогло!!!

   
 
 автор: valera380   (11.09.2008 в 13:19)   письмо автору
 
   для: valera380   (11.09.2008 в 13:17)
 

http://www.softtime.ru/bookphp/gl10_1.php
здесь всё описно. удачи.

   
 
 автор: Root   (11.09.2008 в 15:01)   письмо автору
 
   для: valera380   (11.09.2008 в 13:17)
 

вы тему хоть читали? Выше четко указано где применять htmlspecialchars().
UPD.
не говоря уже о $HTTP_POST_VARS...

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования