За последние 24 часа нас посетили 17799 программистов и 1280 роботов. Сейчас ищут 1442 программиста ...

update

Тема в разделе "PHP и базы данных", создана пользователем Pasha, 16 сен 2006.

  1. Pasha

    Pasha Активный пользователь

    С нами с:
    8 мар 2006
    Сообщения:
    154
    Симпатии:
    0
    Адрес:
    Зеленодольск
    Всем привет, у мя такая проблема, может кто подскажет как разрешить?
    Пишу следующее:
    PHP:
    1.  
    2. <?php
    3. $sql="update `chics_text` set `razdel`='$_POST[razdel]', `ru_pod_razdel`='$_POST[ru_pod_razdel]', `en_pod_razdel`='$_POST[en_pod_razdel]', `url`='$_POST[url]', `text`='$_POST[text]' where `id` = '$_POST[id]'";
    4. mysql_query($sql,$conn) or die('Какой же я ___: ['.$sql.'] - '.mysql_error());
    5. ?>
    6.  
    при обработке выводит ошибку:
    Код (Text):
    1.  
    2. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near
    Таблица в БД следующая
    Код (Text):
    1.  
    2.   `id` int(11) NOT NULL auto_increment,
    3.   `razdel` varchar(255) default NULL,
    4.   `ru_pod_razdel` varchar(255) default NULL,
    5.   `en_pod_razdel` varchar(255) default NULL,
    6.   `dopoln` varchar(255) default NULL,
    7.   `url` varchar(255) default NULL,
    8.   `text` text,
    9.   PRIMARY KEY  (`id`)
    В $_POST[text] у меня содержится HTML код веб-страници, может у меня из-за этого какие-то проблемы?
    Умные головы, подскажите ктонить…? Заранее благодарен!!!
     
  2. Mavir

    Mavir Guest

    Для строковых переменных нужно использовать функцию mysql_escape_string
    Например,
    .....`razdel`='".mysql_escape_string($_POST['razdel'])."'.....
     
  3. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    PHP:
    1. echo $sql;
     
  4. Anonymous

    Anonymous Guest

    кросс-постинг.
     
  5. Pasha

    Pasha Активный пользователь

    С нами с:
    8 мар 2006
    Сообщения:
    154
    Симпатии:
    0
    Адрес:
    Зеленодольск
    Mavir
    Спасибо...работает, Премного благодарен!!! :roll:
     
  6. Pasha

    Pasha Активный пользователь

    С нами с:
    8 мар 2006
    Сообщения:
    154
    Симпатии:
    0
    Адрес:
    Зеленодольск
    Всё нормально тока теперь он перед каждым знаком ' и " ставит \ что делать?
     
  7. Mavir

    Mavir Guest

    Экранировать с помощью mysql_escape_string
     
  8. Pasha

    Pasha Активный пользователь

    С нами с:
    8 мар 2006
    Сообщения:
    154
    Симпатии:
    0
    Адрес:
    Зеленодольск
    Mavir
    что-то я не понял что ты имееш в виду?
     
  9. Mavir

    Mavir Guest

    А ты что хотел?
    Как собираешься вставить такую строку в запрос?
    Это строка ' содержит кавычку

    Без экранирования будет такой запрос
    txt='Это строка ' содержит кавычку'

    Поэтому нужно экранировать кавычки
    txt='Это строка \' содержит кавычку'
     
  10. Mavir

    Mavir Guest

    Понял, у тебя вставляется именно символы \'

    Это получается, потому что PHP сам экранирует символы. Надо в php.ini посмотреть параметры magic_quotes_runtime и magic_quotes_gpc и отключить их.
     
  11. svk

    svk Активный пользователь

    С нами с:
    7 авг 2006
    Сообщения:
    506
    Симпатии:
    0
    Адрес:
    NetByNet
    stripslashes() убирает эти слешЫ
     
  12. Pasha

    Pasha Активный пользователь

    С нами с:
    8 мар 2006
    Сообщения:
    154
    Симпатии:
    0
    Адрес:
    Зеленодольск
    Mavir
    То есть по этому у меня и получается, что когда я что-то делаю на домашнем сервере у мя всё нормально работает, а на сервере в Интернете у меня такой глюк, значит в Интернете он сам экранирует их, ты к этому ведешь? вот его инфа, и теперь как мне тогда сделать так чтобы у меня и на домашнем компе и в инете работало всё одинаково?
     
  13. simpson

    simpson Активный пользователь

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Pasha
    отслеживать, включена ли опция magic_quotes_gpc в php, и, в зависимости от этого, экранировать или не экранировать кавычки.
     
  14. Pasha

    Pasha Активный пользователь

    С нами с:
    8 мар 2006
    Сообщения:
    154
    Симпатии:
    0
    Адрес:
    Зеленодольск
    simpson
    спс вроде понял, значит так?
    PHP:
    1.  
    2. <?php
    3. $sql="update `chics_text` set  `text`='".mysql_escape_string($_POST['text'])."' where `id` = '$_POST[id]'";
    4. $sql1="update `chics_text` set  `text`='$_POST[text]' where `id` = '$_POST[id]'";
    5. {
    6. mysql_query($sql1,$conn) or die('во блин ['.$sql1.'] - '.mysql_error());
    7. }else{
    8. mysql_query($sql,$conn) or die('во блин ['.$sql.'] - '.mysql_error());
    9. }
    10. ?>
    11.  
     
  15. simpson

    simpson Активный пользователь

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Pasha
    идею ты понял, но лучше бы это все упростить.
    например, так:
    PHP:
    1. <?php
    2. function escape($string) {
    3.    if (1 == get_magic_quotes_gpc()) return $string;
    4.    return mysql_escape_string($string);
    5. }
    6. $sql = 'update `chics_text` set  `text`="' . escape($_POST['text']) . '" where `id`="' . escape($_POST['id']) . '"';
    7. ?>
     
  16. Pasha

    Pasha Активный пользователь

    С нами с:
    8 мар 2006
    Сообщения:
    154
    Симпатии:
    0
    Адрес:
    Зеленодольск
    simpson
    спс.
    PHP:
    1.  
    2. <?php
    3. function escape($string) {
    4.    if (1 == get_magic_quotes_gpc()) {return $string;}else{
    5.    return mysql_escape_string($string); }
    6. }
    7. $sql = 'update `chics_text` set  `text`="' . escape($_POST['text']) . '" where `id`="' . escape($_POST['id']) . '"';
    8. mysql_query($sql);
    9. ?>
    :roll:
    блин, откуда вы стока инфы знаете? или просто по опыту сами с такими вещами сталкивались? где можно путную литературу почитать по настройкам? чтобы в другой раз проще было?
     
  17. Anonymous

    Anonymous Guest

    Хы.. мне кажется, тут многие по этим граблям проходили... =) я в том числе.
    PS - Когда надоело плодить свои функции для каждой БД, прикрутил плейсхолдеры...[/php]
     
  18. Pasha

    Pasha Активный пользователь

    С нами с:
    8 мар 2006
    Сообщения:
    154
    Симпатии:
    0
    Адрес:
    Зеленодольск
    Интерестная фишка получается, есть строка формы:
    PHP:
    1. <?
    2. echo $langua['stat_nam'].'<br/><input type="text" name="name" maxlength="255" value="'.$row['name'].'"><br/>';
    3. ?>
    $row['name'] =занчения из базы данных типа fjkjklf"sdsds'sdfsd но он выводит тока fjkjklf
    что делать?
     
  19. "он" - это кто?
     
  20. Pasha

    Pasha Активный пользователь

    С нами с:
    8 мар 2006
    Сообщения:
    154
    Симпатии:
    0
    Адрес:
    Зеленодольск
    Сервер
     
  21. Неправда.
    Сервер выдаёт всё, что ты написал в скрипте, ничего не утаивая.
     
  22. Mavir

    Mavir Guest

    Все правильно у тебя выводится, посмотри исходный код
    И вот что там увидишь
    Код (Text):
    1. <input type="text" name="name" maxlength="255" value="fjkjklf"sdsds'sdfsd">
    Ошибка ясна?
     
  23. а для решения первой проблемы, на самом деле, надо было не код с if-ами делать, а поместить в корень сайта .htaccess со строчкой
    php_flag magic_quotes_gpc 0
     
  24. Pasha

    Pasha Активный пользователь

    С нами с:
    8 мар 2006
    Сообщения:
    154
    Симпатии:
    0
    Адрес:
    Зеленодольск
    Так что мне с этим то делать?
    Код (Text):
    1. <input type="text" name="name" maxlength="255" value="fjkjklf"sdsds'sdfsd">
     
  25. лично я узнал вот отсюда: http://phpfaq.ru/slashes
    там и по последней проблеме тоже написано