в общем проблема такая: получаю ошибку: Field 'accesslogs' doesn't have a default value. поле в базе данных такое: accesslogs BLOB NOT NULL. функция такая: Код (Text): function write_useraccesslog($username,$password) { global $tables; $logmess="Дата доступа - ".date("Y-m-d H:i:s")."|Пароль доступа - $password|Запрос - ".$_SERVER[REQUEST_METHOD]."|IP - ".$_SERVER[REMOTE_ADDR]."|Тип браузера - ".$_SERVER[HTTP_USER_AGENT]."|Машина - ".$_SERVER[REMOTE_HOST]."\n"; list($exlogs)=@mysql_fetch_row(@mysql_query("SELECT accesslogs FROM $tables[t_users] WHERE username='$username'")); $acclog=$exlogs.$logmess; $result=@mysql_query("UPDATE $tables[t_users] SET accesslogs='$acclog' WHERE username='$username'"); if ($result) { return true; } else { return false; } } к требованиям к скрипту указан php нениже 4.0.6, а у меня php-5.1.5, неподскажете в чем проблема, и как исправить?
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, может что-то нетак с установками сервера? Потомучто все должно работать, покрайней мере человек отдавший мне скрипт так утверждает.
Что произойдет, если в переменной $acclog встретится одинарная кавычка? P.S. Тип BLOB тут совсем не нужен, достаточно TEXT.
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'
Плохо что не знаешь. Тогда сайт не защищен от SQL-injection. Допустим значение $password будет qwe'rty Тогда запрос (для простоты его сокращу) ... SET accesslogs='$password' WHERE ... будет такой ... SET accesslogs='qwe'rty' WHERE ... Видишь лишнюю кавычку?
Вижу, тоесть получается, что человек, который введет такой пароль, на сайт уже невойдет? Или может произойти что-то намного хуже? Кстати защита от этого есть в скрипте регистрации.
а зачем защита при регистрации, если введя пароль как в примере я войду вообще без пароля? под именем любого пользователя?
Это значит, что запрос не правильный. А где может быть ошибка, точно не могу сказать. Может в $_SERVER[HTTP_USER_AGENT]