За последние 24 часа нас посетил 17191 программист и 1303 робота. Сейчас ищут 1568 программистов ...

php+mysql

Тема в разделе "MySQL", создана пользователем zxcvbop, 16 сен 2006.

  1. zxcvbop

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

    С нами с:
    30 авг 2006
    Сообщения:
    26
    Симпатии:
    0
    Адрес:
    Латвия, Рига.
    в общем проблема такая:
    получаю ошибку: Field 'accesslogs' doesn't have a default value.
    поле в базе данных такое: accesslogs BLOB NOT NULL.
    функция такая:

    Код (Text):
    1.  
    2. function write_useraccesslog($username,$password)
    3.  {
    4.   global $tables;
    5.   $logmess="Дата доступа - ".date("Y-m-d H:i:s")."|Пароль доступа - $password|Запрос - ".$_SERVER[REQUEST_METHOD]."|IP - ".$_SERVER[REMOTE_ADDR]."|Тип браузера - ".$_SERVER[HTTP_USER_AGENT]."|Машина - ".$_SERVER[REMOTE_HOST]."\n";
    6.   list($exlogs)=@mysql_fetch_row(@mysql_query("SELECT accesslogs FROM $tables[t_users] WHERE username='$username'"));
    7.   $acclog=$exlogs.$logmess;
    8.   $result=@mysql_query("UPDATE $tables[t_users] SET accesslogs='$acclog' WHERE username='$username'");
    9.   if ($result)
    10.    {
    11.     return true;
    12.    }
    13.   else
    14.    {
    15.     return false;
    16.    }
    17.  }
    к требованиям к скрипту указан php нениже 4.0.6, а у меня php-5.1.5, неподскажете в чем проблема, и как исправить?
     
  2. simpson

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

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Код (Text):
    1. `accesslogs` BLOB NOT NULL DEFAULT 'значение по умолчанию'
     
  3. zxcvbop

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

    С нами с:
    30 авг 2006
    Сообщения:
    26
    Симпатии:
    0
    Адрес:
    Латвия, Рига.
    2 simpson попробовал, теперь я получаю синтаксическую ошибку, где раньше все работало:
    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 ' coments BLOB NOT NULL, username varchar(50) NOT NULL, referer varchar(' at line 9
    правда ругается он на другую строку, на следующую.

    accesslogs BLOB NOT NULL DEFAULT,
    coments BLOB NOT NULL,

    может что-то нетак с установками сервера? Потомучто все должно работать, покрайней мере человек отдавший мне скрипт так утверждает.
     
  4. Mavir

    Mavir Guest

    Что произойдет, если в переменной $acclog встретится одинарная кавычка?

    P.S. Тип BLOB тут совсем не нужен, достаточно TEXT.
     
  5. simpson

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

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    zxcvbop
    сравни:
    и
    найди отличия...
     
  6. zxcvbop

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

    С нами с:
    30 авг 2006
    Сообщения:
    26
    Симпатии:
    0
    Адрес:
    Латвия, Рига.
    2 Mavir незнаю я что произойдет, проверю, потом напишу.

    2 simpson всеравно синтаксическая ошибка:
    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 ''accesslogs' BLOB NOT NULL DEFAULT, coments BLOB NOT NULL, username varcha' at line 9

    кстати а дефолтное значение разве ненадо указывать?
    accesslogs BLOB NOT NULL DEFAULT 'x3'
     
  7. Mavir

    Mavir Guest

    Плохо что не знаешь. Тогда сайт не защищен от SQL-injection.

    Допустим значение $password будет qwe'rty
    Тогда запрос (для простоты его сокращу)
    ... SET accesslogs='$password' WHERE ...
    будет такой

    ... SET accesslogs='qwe'rty' WHERE ...

    Видишь лишнюю кавычку?
     
  8. Anonymous

    Anonymous Guest

    а еще лучше, если пароль будет ' OR 1=1
    ))))
     
  9. zxcvbop

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

    С нами с:
    30 авг 2006
    Сообщения:
    26
    Симпатии:
    0
    Адрес:
    Латвия, Рига.
    Вижу, тоесть получается, что человек, который введет такой пароль, на сайт уже невойдет? Или может произойти что-то намного хуже?
    Кстати защита от этого есть в скрипте регистрации.
     
  10. Anonymous

    Anonymous Guest

    а зачем защита при регистрации, если введя пароль как в примере я войду вообще без пароля? под именем любого пользователя?
     
  11. Mavir

    Mavir Guest

    Это значит, что запрос не правильный. А где может быть ошибка, точно не могу сказать. Может в $_SERVER[HTTP_USER_AGENT]