Перейти к содержимому

Сервис обмена электронных валют


  • Закрытая тема Тема закрыта

Не обновляется поле с дробными числами

#1 lesli007

lesli007
  • Пользователь
  • 108 сообщений
  • Репутация: -4
0

Отправлено 11 Апрель 2011 - 23:41

Код:
$result4 = mysql_query ("SELECT * FROM users WHERE login ='$login'",$db);	
if (mysql_num_rows($result4) > 0)
{
$myrow4 = mysql_fetch_array($result4);
$add=100-$add;
$add = 1/$add;
$delta = 0.0000001;
$add = round($add + $delta, 2);
$add=$myrow4["add"]+$add;
echo $add;
}
else
{echo "неудачная надбавка";}

Запрос к базе
$result2 = mysql_query ("UPDATE users SET add='$add' WHERE login='$login'",$db);

По расчетам видно что я получаю число с плавающей точкой. На уровне echo я его получаю точно как надо. Но поле не обновляется. Тип данных задал FLOAT. Пробовал и децимел и дабл. Не знаю что еще нужно чтобы вы смогли мне помочь - если что скажите что еще сказать по настройкам и коду я скажу.

 

 

  • 0

#2 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 12 Апрель 2011 - 10:02

lesli007, какую размерность поля с типом FLOAT указали:
FLOAT (M, D)
M - количество символов для отображения всего числа, включая целую и дробную часть
D - размерность лишь дробной части числа

Так же, зачем вы числовые данные окружили одинарными кавычками. По сути, вы пытаетесь записать строковое значение в FLOAT, возможно преобразование не точное. Попробуйте убрать кавычки, они там не нужны.
  • 0

#3 lesli007

lesli007
    Topic Starter
  • Пользователь
  • 108 сообщений
  • Репутация: -4

Отправлено 12 Апрель 2011 - 13:34

ZiTosS,вы имеете ввиду длины и значения? пока не указывал. Как правильно указать? мне нужно иметь число с 2 знаками после запятой.
$result2 = mysql_query ("UPDATE users SET add='$add' WHERE login='$login'",$db);
исправил на
$result2 = mysql_query ("UPDATE users SET add=$add WHERE login='$login'",$db);

  • 0

#4 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 12 Апрель 2011 - 14:57

lesli007,

ZiTosS,вы имеете ввиду длины и значения?

Я имел ввиду, когда вы создавали поле в БД, вы помимо типа данных FLOAT должны были указать размерность числа (общее число знаков, дробная часть). Как же вы тогда создали поле типа FLOAT без указания размерности?
Пример создания таблицы с полем типа FLOAT:
CREATE TABLE `table` (
`id` INT( 11 ) NOT NULL AUTO_INCREMENT ,
`test` FLOAT( 13, 2 ) NOT NULL ,
PRIMARY KEY ( `id` )
);
Как видно, указано 13 общих знаков и 2 знака для дробной части. Какие размерности указывать, дело ваше.

По коду, что вы привели, разобраться в проблеме нельзя, т.к. не видно остальной обработки, может у вас проблема между приведенными частями.
  • 0

#5 lesli007

lesli007
    Topic Starter
  • Пользователь
  • 108 сообщений
  • Репутация: -4

Отправлено 12 Апрель 2011 - 17:40

код
  • 0

#6 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 12 Апрель 2011 - 18:33

lesli007,
1) Недочетов по коду конечно много. Такие, например, как создание переменной $login только при наличии $_POST['login'], а затем её использование (хотя её может и не существовать)
2) слово ADD в MySQL зарезервировано, потому при использовании его в имени столбца нужно заключать его в обратные кавычки, т.е. так:
mysql_query ("UPDATE users SET `add`=$add WHERE login='$login'",$db);

Для исключения подобных ошибок в будующем обязательно советую заключать в обратные кавычки имена всех столбцов и таблиц (это по стандартам).
А чтобы увидеть ошибку, возникающую в запросе, распечатывайте её с помощью функции mysql_error();

И почитайте: Придирчив ли MySQL к зарезервированным словам?
  • 0

#7 lesli007

lesli007
    Topic Starter
  • Пользователь
  • 108 сообщений
  • Репутация: -4

Отправлено 13 Апрель 2011 - 12:57

Большое спасибо, ZiTosS! Проблема и правда была в зарезервированных словах. А насчет логина - формой отправки могут воспользоваться только авторизованные пользователи. То есть на кнопку нажмет только человек с логином. Поэтому его не проверяю. Тема закрыта по ключевому вопросу.
  • 0


Оформление форума – IPBSkins.ru