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



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

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

#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

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85
Советую обратить внимание на следующее:
  1. Динамическое обновление
  2. Реализация добавления поля формы без перезагрузки
  3. Задачи на PHP для начинающих
  4. РЕШЕНИЯ задач на PHP для начинающих
  5. Нужна помощь. Есть ли такой модуль или компонент?

#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