[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с апострофом в БД
WhiteKnight
У меня такая вот проблема.
При добавлении текста в котором встречается апостроф в БД Он не добавляется

$name = "комп'ютерні науки";
$query = "UPDATE `pages` SET `name`='$name' WHERE `id`='1'";
$result = mysql_query($query);


Как решить эту проблему ? слешами не думаю что выход в тексте то много может быть таких апострофов.




Спустя 5 минут, 40 секунд (22.12.2009 - 16:01) Gabriel написал(а):
mysql_real_escape_string()?

Спустя 8 минут, 8 секунд (22.12.2009 - 16:09) WhiteKnight написал(а):
mysql_real_escape_string($name) ?
а куда добавятся слеши ? сами там где надо чтоли ?

Спустя 1 минута, 52 секунды (22.12.2009 - 16:11) sergeiss написал(а):
WhiteKnight - а ты проверять не пробовал? wink.gif

Спустя 2 минуты, 1 секунда (22.12.2009 - 16:13) Gabriel написал(а):
sergeiss
опередил меня smile.gif
WhiteKnight
в тексте никаких слешей не будет

Спустя 12 минут, 18 секунд (22.12.2009 - 16:25) sergeiss написал(а):
WhiteKnight - поясняю. "Лишние" слэши являются "управляющими". Т.е., на момент записи данных они сообщают дополнительную информацию.
Это (отчасти) подобно использованию форматов в функции printf. Пишем %s - на выходе получаем строку, и никакого процента с буквой; пишем %d - получаем число.
Так и тут: добавляется слэш, но в итоговой строке (которая будет записана) его не будет.

Спустя 6 минут, 9 секунд (22.12.2009 - 16:32) WhiteKnight написал(а):
пробую...

вот код аддейта странички

    // редактировать страницы
function cms_page_edit($id_edit,$name_to_update,$content_to_update) {
$query = "UPDATE `cms_pages` SET `name`='$name_to_update' WHERE `id`='$id_edit'";
$result = mysql_query($query);
$query = "UPDATE `cms_pages` SET `content`='$content_to_update' WHERE `id`='$id_edit'";
$result = mysql_query($query);
}


вывод содержимого для страницы
   // контент странички
function cms_page_content($id) {
// это умная такая проверка вывести или первую страницу или ту что надо
if ($id == NULL) {
$query = "SELECT * FROM `cms_pages` ORDER BY `id` ASC limit 1 ";
} else {
$query = "SELECT * FROM `cms_pages` WHERE `id`='{$id}'";
}
$result = mysql_query($query);
while ($row = cms_db_rows($result)) {
return mysql_real_escape_string($row['content']);
}
}


не хочет вообще обновляться в бд запись если контент который я хочу добавить вот такой: комп'ютерні


Спустя 3 минуты, 6 секунд (22.12.2009 - 16:35) WhiteKnight написал(а):
все решил smile.gif

    // контент странички
function cms_page_content($id) {
if ($id == NULL) {
$query = "SELECT * FROM `cms_pages` ORDER BY `id` ASC limit 1 ";
} else {
$query = "SELECT * FROM `cms_pages` WHERE `id`='{$id}'";
}
$result = mysql_query($query);
while ($row = cms_db_rows($result)) {
return $row['content'];
}
}



// редактировать страницы
function cms_page_edit($id_edit,$name_to_update,$content_to_update) {
$query = "UPDATE `cms_pages` SET `name`='$name_to_update' WHERE `id`='$id_edit'";
$result = mysql_query($query);
$content_to_update = mysql_real_escape_string($content_to_update);
$query = "UPDATE `cms_pages` SET `content`='$content_to_update' WHERE `id`='$id_edit'";
$result = mysql_query($query);
}


если есть какая то критика по поводу этого кода, критикуйте )

Спустя 7 минут, 8 секунд (22.12.2009 - 16:42) Michael написал(а):
$query = "UPDATE `cms_pages` SET `name`='$name_to_update' WHERE `id`='$id_edit'";
$result = mysql_query($query);
$content_to_update = mysql_real_escape_string($content_to_update);
$query = "UPDATE `cms_pages` SET `content`='$content_to_update' WHERE `id`='$id_edit'";
$result = mysql_query($query);

Измени на:

$content_to_update = mysql_real_escape_string($content_to_update);
$query = "UPDATE `cms_pages` SET name`='$name_to_update',`content`='$content_to_update' WHERE `id`='$id_edit'";
$result = mysql_query($query);


Спустя 3 часа, 36 минут, 51 секунда (22.12.2009 - 20:19) VolCh написал(а):
$name_to_update = mysql_real_escape_string($name_to_update);


Тоже по хорошему надо добавить, мало ли

Спустя 9 минут, 5 секунд (22.12.2009 - 20:28) Gabriel написал(а):
ну тогда и я впихну мои 5ть копеек
$name_to_update = mysql_real_escape_string( $name_to_update );
$content_to_update = mysql_real_escape_string( $content_to_update );
$id_edit = intval( $id_edit );
$query = "UPDATE `cms_pages` SET name`='" . $name_to_update . "',`content`='" . $content_to_update . "' WHERE `id`='" . $id_edit . "'";

Спустя 2 часа, 18 минут, 43 секунды (22.12.2009 - 22:46) WhiteKnight написал(а):
мистика какая то. незнаю что делать
на компе все норм! кавычки и апострофы нормально добавляются!
залил все на хостинг (дамп БД) отображается отлично(выгружается с бд и показывает мне на страничке)

Как только в админке редактирую страницу: function cms_page_edit
То все портится и возле каждой кавычки стоят слеши.
если еще раз делаю редактирование страницы и сохраняю в БД (НА ХОСТИНГЕ) то добавляется еще один слеш и так далее и выходит вот такое

комп///////'ютерні науки

Спустя 6 минут, 12 секунд (22.12.2009 - 22:53) VolCh написал(а):
отключи magic_quotes на сервере

Спустя 41 минута, 34 секунды (22.12.2009 - 23:34) phz написал(а):
Или можно не отключать:

function quote_smart($value)
{
// если magic_quotes_gpc включена - используем stripslashes
if (get_magic_quotes_gpc()) {
$value = stripslashes($value);
$value = strip_tags($value);
}
// Если переменная - число, то экранировать её не нужно
// если нет - то окружем её кавычками, и экранируем

if (!is_numeric($value)) {
$value = strip_tags($value);
$value = mysql_real_escape_string($value);
}
return $value;
}

Спустя 9 минут, 35 секунд (22.12.2009 - 23:44) FatCat написал(а):
Цитата (phz @ 23.12.2009 - 00:34)
    if (!is_numeric($value)) {
$value = strip_tags($value);
        $value = mysql_real_escape_string($value);
    }

Лучше я думаю будет:
    if (intval($value) == $value)$value = intval($value);
else $value = mysql_real_escape_string($value);


А зачем strip_tags? Чтобы джаваскрипт не подпихнули? Так в этом случае и все форматирование убьётся...

Спустя 13 часов, 32 минуты, 21 секунда (23.12.2009 - 13:16) Gabriel написал(а):
WhiteKnight
а версия пыхи какая на хосте?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.