|
|
|
| Пытаюсь записать в БД значение Бренд\Original\ - т.е. именно со знаками \
Перед записью выводил данные - все передается, но в таблицу не записывается почему-то.
Чувствую, что это как раз из-за слешей - вопрос такой как все же это записать или же как записать только ту часть которая между слешами, т.е. в данном случае слово Original | |
|
|
|
|
|
|
|
для: Dizels
(17.03.2010 в 13:31)
| | попробуйте для начала надежно записать в БД (и затем прочитать из нее) один слэш.
Затем то же самое попробуйте сделать со строкой .
Именно с этими двумя словами, именно строчными буквами, и без пробелов. | |
|
|
|
|
|
|
|
для: Trianon
(17.03.2010 в 13:33)
| |
<?php
// Соединяемся с базой данных
require_once("config.php");
$tov_mat = "brand\noname";
// Преобразуем кодировку
$tov_mat = iconv("UTF-8", "windows-1251", $tov_mat);
// Экранируем слеш
addslashes($tov_mat);
$y = "INSERT INTO te VALUES (NULL,'$tov_mat')";
print $y;
if(mysql_query($y))
{
echo "Данные добавлены в БД<br>";
}
echo "<br><b>ЗАВЕРШЕНО!</b><br>";
echo "<a href='index.php'>назад к управлению каталогом</a>";
?>
|
По идее должно быть так, но почему-то не получается. Подскажите что я сделал не правильно. | |
|
|
|
|
|
|
|
для: Dizels
(17.03.2010 в 19:31)
| | неправильно у Вас сразу в двух местах.
Чтобы понять главную ошибку, которая с базой совсем не связана, попробуйте перед строкой
// Преобразуем кодировку
добавить строку echo $tov_mat;
и посмотреть на промежуточный вывод.
Второе место я подскажу, так как оно менее тривиально, и проявляется достаточно редко.
вместо addslashes следует испльзовать mysql_real_escape_string
Отдельным вопросом будет, зачем Вам вдруг понадобилось менять на переправе коней в середине скрипта кодировку текста. | |
|
|
|
|
|
|
|
для: Trianon
(17.03.2010 в 19:43)
| | brand\noname - то что здесь \n преобразуется в перенос строки - я понял, но я почему-то подумал, что как раз и должно убирать это преобразование.
По поводу смены кодировки - это перекочевало из самого скрипта в котором пытаюсь решить эту проблему.
Теперь по самому коду, видимо я вставляю куда-то не туда или не в той последовательности:
$tov_mat = "brand\noname";
mysql_real_escape_string($tov_mat);
echo $tov_mat;
|
выдает:
Т.е. экранирования не происходит, но как его тогда записать я чего-то совсем не пойму. | |
|
|
|
|
|
|
|
для: Dizels
(17.03.2010 в 19:50)
| | >brand\noname - то что здесь \n преобразуется в перенос строки - я понял,
Здесь ничего не преобразуется. Не было вызвано никакой функции, чтобы что-то преобразовывалось.
Здесь просто нет этих символов \ n . Есть символ перевода строки. Так что и преобразовывать нечего.
>но я почему-то подумал, что addslashes($tov_mat); как раз и должно убирать это преобразование.
Соответственно addslashes вызывается совсем не затем, чтобы что-то убрать.
Я сказал "поставить диагностический вывод " до этой функции, а не после.
Значит к этому моменту в переменной должно быть корректное значение.
Добивайтесь. | |
|
|
|
|
|
|
|
для: Dizels
(17.03.2010 в 19:31)
| | Тю, только Trianon'a в посте вспомнил, он уж вперед меня написал =) | |
|
|
|
|
|
|
|
для: neadekvat
(17.03.2010 в 19:45)
| | По обоим моментам.
Так можно писать.
Слегка неряшливо получается, но в принципе несмертельно.
NULL в автоинкрементном поле является признаком запроса на генерацию нового ключа.
А набор и порядок подразумеваемых полей соответсвует описанию таблицы в операторе CREATE TABLE.
А вот удалять значимый текст - мерзко. | |
|
|
|
|
|
|
|
для: Trianon
(17.03.2010 в 19:49)
| | Ну, когда я пишу запросы - то стараюсь избегать этих null, чтобы в коде было только нужное. Хоть и работаю только с mysql, но наверняка другие субд сгенерироруют новый ключ в любом случаи.
> А вот удалять значимый текст - мерзко.
Сначала показалось, что у меня получилось то же, что и у вас. Что может быть глупее, чем та же мысль следом. | |
|
|
|
|
|
|
|
для: neadekvat
(17.03.2010 в 19:54)
| | neadekvat и Trianon - толи часть ваших сообщений потерлась, то ли я уже ничего не понимаю:)) | |
|
|
|
|
|
|
|
для: Dizels
(17.03.2010 в 19:55)
| | А Вы не отвлекайтесь, этот диалог к проблеме отношения не имеет. | |
|
|
|
|
|
|
|
для: Trianon
(17.03.2010 в 19:57)
| | Вот мое последнее сообщение автор: Dizels (17.03.2010 в 19:50) там как бы изложил текущее состояние дел) | |
|
|
|
|
|
|
|
для: Dizels
(17.03.2010 в 19:58)
| | Вот мой ответ автор: Trianon (17.03.2010 в 19:55)
там как бы показал, что с php-строками у Вас плохо безо всякой базы.
И я не понимаю, как такое может быть. | |
|
|
|
|
|
|
|
для: neadekvat
(17.03.2010 в 19:54)
| | >Сначала показалось, что у меня получилось то же, что и у вас.
>Что может быть глупее, чем та же мысль следом.
На прочтение время тратися, на обдумывание, на изложение мысли.
Так что равные ответы - вовсе не повод для расстройства, а скорее подтверждение правильности логики.
На самом деле все ж понимают, что ответы пишутся не мгновенно.
А те, кто не понимает... Неужели мнение такого человека Вас как-то трогает? | |
|
|
|
|
|
|
|
для: Trianon
(17.03.2010 в 20:01)
| | И не поспоришь =)
Впредь зарекаюсь удалять информативную часть поста. | |
|
|
|
|
|
|
|
для: neadekvat
(17.03.2010 в 20:06)
| | Вот как я понимаю логику данного кода:
$tov_mat = "brand\noname";
mysql_real_escape_string($tov_mat);
echo $tov_mat;
|
1 строчка - присваиваем переменной значение.
2 строчка - экранируем переменную
3 строчка - выводим ее.
Как я понимаю - проблема в том, что во время исполнения 1 строки уже происходит преобразование \n в перенос строки, т.е. во второй строке уже просто нечего экранировать. Но вот как правильно это записать - не могу понять. | |
|
|
|
|
|
|
|
для: Dizels
(17.03.2010 в 20:11)
| | Вам же уже посоветовали использовать mysql_real_escape_string(). | |
|
|
|
|
|
|
|
для: neadekvat
(17.03.2010 в 20:18)
| | Понял в чем проблема, вот как надо (для тех кто тоже столкнулся с такой проблемой):
$tov_mat = "brand\noname";
$zz=mysql_real_escape_string($tov_mat);
echo $zz;
|
| |
|
|
|
|
|
|
|
для: Dizels
(17.03.2010 в 20:23)
| | Собственно обрадовался я рано, в приведенном выше коде выводится все как надо, однако при добавлении в БД все равно записывается
Вот код на текущий момент:
<?php
// Соединяемся с базой данных
require_once("config.php");
$tov_mat = "brand\noname";
$zz=mysql_real_escape_string($tov_mat);
echo $zz;
$y = "INSERT INTO te VALUES (NULL,'$zz')";
print $y;
if(mysql_query($y))
{
echo "Данные добавлены в БД<br>";
}
echo "<br><b>ЗАВЕРШЕНО!</b><br>";
?>
|
Ткните носом что не так? | |
|
|
|
|
|
|
|
для: Dizels
(17.03.2010 в 20:29)
| | последовательность символов \n является частью языка, а вы этого до сих пор не знаете | |
|
|
|
|
|
|
|
для: Рома
(17.03.2010 в 20:43)
| | >последовательность символов \n является частью языка, а вы этого до сих пор не знаете
я это уже понял, но разве
$zz=mysql_real_escape_string($tov_mat);
|
не исправляет эту ситуацию? | |
|
|
|
|
|
|
|
для: Dizels
(17.03.2010 в 20:48)
| | Сейчас вот написал ответ и сам понял, что собственно \n так и остается, поэтому в БД так и записывается.
Но вопрос от этого актуальность не потерял, как все таки обработать переменную, чтобы можно было внести эти значения в базу данных? | |
|
|
|
|
|
|
|
для: Dizels
(17.03.2010 в 20:49)
| | >я это уже понял, но разве
>$zz=mysql_real_escape_string($tov_mat);
>не исправляет эту ситуацию?
нет. эта функция совсем для другого предназначена. в мануале же написано за чем она нужна.
>Но вопрос от этого актуальность не потерял, как все таки обработать переменную, чтобы можно
>было внести эти значения в базу данных?
можно.
присваивая строку переменной объясните скрипту, что в данной ситуации \n не является символом перевода строки, а является простой последовательностью символов. | |
|
|
|
|
|
|
|
для: Рома
(17.03.2010 в 21:06)
| | Дайте человеку подумать. | |
|
|
|