Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: PHP, MySQL. Помогите составить условие (запрос в БД)

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (3): [1] 2 3 »   

> Без описания
vanya_sl
Отправлено: 15 Июля, 2013 - 00:59:21
Post Id



Частый гость


Покинул форум
Сообщений всего: 131
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)




Доброй ночи.
Нужно составить правелно запрос в БД.
Короч пользователь кликает купить, с его баланса списываются средства. Я составил, но работает немного не так. Само условие работает немного не так. Если например цена больше от баланса, то снимаются все средства (до 0) и записываются данные заказа. А нужно, если баланс меньше за цену, чтобы выводилось сообщение. Когда баланс пользователя больше цены - все ок.
Мой код:
PHP:
скопировать код в буфер обмена
  1.  
  2. if(isset($_POST['submit']))
  3.  
  4. {
  5.         $name = $_POST['name'];
  6.         $text = $_POST['text'];
  7.                 $explain = $_POST['explain'];
  8.                 $language = $_POST['language'];
  9.                 $price = $_POST['price'];
  10.                
  11.                
  12.                 @session_start();
  13.                 $loginid=$_SESSION['clientid'];
  14.        
  15.                 if (mysql_query("UPDATE client SET client_balance = client_balance - $price WHERE client_balance > $price OR  client_id = $loginid "))
  16.                 {
  17.                
  18.         mysql_query("SET character_set_results='utf8'");
  19.         mysql_query("SET NAMES 'utf8'");
  20.                 mysql_query("INSERT INTO `order2`(`order2_text`, `order2_price`, `order2_exp`, `order2_name`, `order2_loginid`, `order2_lan`) VALUES('$text', '$price', '$explain', '$name', '$loginid', '$language')  ");
  21.                 echo "Текст отправлено!";
  22.                 }
  23.                 else {
  24.                 echo "Нет денег!";
  25.                 }
  26.                
  27.                 }
  28.  
  29. ?>
  30.  

(Добавление)
Нужно, наверное, именно условие подкорректировать:
PHP:
скопировать код в буфер обмена
  1.  
  2. if (mysql_query("UPDATE client SET client_balance = client_balance - $price WHERE client_balance > $price OR  client_id = $loginid "))
  3.  
 
 Top
DeepVarvar Супермодератор
Отправлено: 15 Июля, 2013 - 01:23:56
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Нужно сперва сходить в БД и узнать сколько бобла у покупателя.
На этом основании вообще уже думать - давать купить или нет.
 
 Top
BesTime
Отправлено: 15 Июля, 2013 - 01:24:14
Post Id



Гость


Покинул форум
Сообщений всего: 82
Дата рег-ции: Февр. 2012  


Помог: 0 раз(а)

[+]


Не много не в тему но не проще сделать проверку баланса пользователя и цену товара с помощью джава скрипта. Зачем для этого обращаться в базу данных?

(Отредактировано автором: 15 Июля, 2013 - 01:24:46)

 
 Top
vanya_sl
Отправлено: 15 Июля, 2013 - 01:30:08
Post Id



Частый гость


Покинул форум
Сообщений всего: 131
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)




DeepVarvar пишет:
Нужно сперва сходить в БД и узнать сколько бобла у покупателя.
На этом основании вообще уже думать - давать купить или нет.

PHP:
скопировать код в буфер обмена
  1.  
  2. mysql_query("UPDATE client SET client_balance = client_balance - $price WHERE client_balance > $price OR  client_id = $loginid ")
  3.  

Разве здесь нет проверки бабла в БД? client_balance ?

(Отредактировано автором: 15 Июля, 2013 - 01:31:07)

 
 Top
VestCoastman
Отправлено: 15 Июля, 2013 - 01:32:45
Post Id



Посетитель


Покинул форум
Сообщений всего: 374
Дата рег-ции: Дек. 2010  


Помог: 3 раз(а)




vanya_sl
1. Тут не проверить запрос, пока не знаешь баланса покупателя, надо делать еще один запрос. Все, что идет до тега WHERE выполняется всегда, при условии, что нет ошибки.
2. Есть проверка на то, что баланс должен быть больше цены, но нет проверки на ее равенство (>=)
3. Нет проверки на sql инъекции
PHP:
скопировать код в буфер обмена
  1.         $name = mysql_real_escape_string($_POST['name']);
  2.         $text = mysql_real_escape_string($_POST['text']);
  3.         $explain = mysql_real_escape_string($_POST['explain']);
  4.         $language = mysql_real_escape_string($_POST['language']);
  5.         $price = mysql_real_escape_string($_POST['price']);


BesTime, ну а что вы будите делать, если запрос подменять?)

(Отредактировано автором: 15 Июля, 2013 - 01:35:57)

 
 Top
BesTime
Отправлено: 15 Июля, 2013 - 01:41:48
Post Id



Гость


Покинул форум
Сообщений всего: 82
Дата рег-ции: Февр. 2012  


Помог: 0 раз(а)

[+]


VestCoastman о каком запросе идет речь, и зачем его подменять?
 
 Top
vanya_sl
Отправлено: 15 Июля, 2013 - 01:41:52
Post Id



Частый гость


Покинул форум
Сообщений всего: 131
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)




VestCoastman
1.Не понимаю. Буду благодарен, если покажите как надо сделать кодом, или примером ...
2.
3. Ну мне бы сейчас условие правельно реализовать)
 
 Top
BesTime
Отправлено: 15 Июля, 2013 - 01:46:57
Post Id



Гость


Покинул форум
Сообщений всего: 82
Дата рег-ции: Февр. 2012  


Помог: 0 раз(а)

[+]


PHP:
скопировать код в буфер обмена
  1. $query = "select `client_balance` from `client` WHERE `client_id`='$loginid'";
  2.   $result = mysql_query($query, $link);
  3.   $client_balance = mysql_result($result, 0);
  4.  
  5. mysql_query("UPDATE `client` SET `client_balance` = '$client_balance - $price' WHERE  `client_id` = '$loginid' ");
  6.  


писал на скору руку. Тема такая запрашиваем сначало баланс пользователя из базы, потом обновляем это значения вычитая стоимость продукта
(Добавление)

это кстате из кода выкинул потому что не понял сначало для чего это. А щас пересмотрел так что если нужно добавьте только вот так

(Отредактировано автором: 15 Июля, 2013 - 01:55:17)

 
 Top
soleg
Отправлено: 15 Июля, 2013 - 02:03:14
Post Id


Гость


Покинул форум
Сообщений всего: 71
Дата рег-ции: Окт. 2011  


Помог: 3 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. if(isset($_POST['submit']))
  3. {
  4.         $name           = mysql_real_escape_string($_POST['name']);
  5.         $text           = mysql_real_escape_string($_POST['text']);
  6.         $explain        = mysql_real_escape_string($_POST['explain']);
  7.         $language       = mysql_real_escape_string($_POST['language']);
  8.         $price          = floatval($_POST['price']);
  9.          
  10.         @session_start();
  11.        
  12.         if(isset($_SESSION['clientid']))
  13.         {  
  14.                 $loginid = $_SESSION['clientid'];
  15.                
  16.                 if (mysql_query("UPDATE client SET client_balance = client_balance - $price WHERE client_balance >= $price AND  client_id = $loginid "))
  17.                 {      
  18.                         mysql_query("SET character_set_results='utf8'");
  19.                         mysql_query("SET NAMES 'utf8'");
  20.                         mysql_query("INSERT INTO `order2`(`order2_text`, `order2_price`, `order2_exp`, `order2_name`, `order2_loginid`, `order2_lan`) VALUES('$text', '$price', '$explain', '$name', '$loginid', '$language')  ");
  21.                         echo "Текст отправлено!";
  22.                 }
  23.                 else
  24.                 {
  25.                         echo "Нет денег!";
  26.                 }
  27.         }
  28.         else
  29.         {
  30.                 echo 'Требуется авторизация';
  31.         }            
  32. }
  33.  
 
 Top
VestCoastman
Отправлено: 15 Июля, 2013 - 02:05:35
Post Id



Посетитель


Покинул форум
Сообщений всего: 374
Дата рег-ции: Дек. 2010  


Помог: 3 раз(а)





^ Он спер мою аватарку

vanya_sl, Примерно так(подкорректировать под себя):
Спойлер (Отобразить)

(Отредактировано автором: 15 Июля, 2013 - 02:09:28)

 
 Top
BesTime
Отправлено: 15 Июля, 2013 - 02:05:54
Post Id



Гость


Покинул форум
Сообщений всего: 82
Дата рег-ции: Февр. 2012  


Помог: 0 раз(а)

[+]


У тебя в sql запросел баланс пользователя остался как текст а не переменная со значением как должно быть

(Отредактировано автором: 15 Июля, 2013 - 02:08:13)

 
 Top
vanya_sl
Отправлено: 15 Июля, 2013 - 11:29:50
Post Id



Частый гость


Покинул форум
Сообщений всего: 131
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)




Большое спасибо!
Но ни один из примеров не работает ... Корректировал но опять возвращаемся к моему варианту (те же действия скрипта) ...
На счет переменной баланс. В моем коде она видна. И нормально работает списывания суммы ..
Вот толко когда баланс ниже цены, возникает ошибка. Списывается баланс до 0 и отсылаются данные. А нужно что бы выводилось сообщение "Нет денег" ...
А то так пользователь сможет купить то, что стоит 100$ за 2$ Огорчение
 
 Top
BesTime
Отправлено: 15 Июля, 2013 - 11:46:32
Post Id



Гость


Покинул форум
Сообщений всего: 82
Дата рег-ции: Февр. 2012  


Помог: 0 раз(а)

[+]


Где в коде котором ты выложил переменная баланс и где она в обращении к бд?
 
 Top
vanya_sl
Отправлено: 15 Июля, 2013 - 12:05:32
Post Id



Частый гость


Покинул форум
Сообщений всего: 131
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)




BesTime
PHP:
скопировать код в буфер обмена
  1.  
  2. UPDATE client SET client_balance = client_balance - $price WHERE client_balance > $price OR  client_id = $loginid
  3.  


Не понял

Баланс клиента - цена только тогда WHERE client_balance > $price
Здесь же есть обращение к полю баланс ... Или я что-то не так понимаю?
(Добавление)
BesTime
А ваш код вызывает таую ошибку:

Notice: Undefined variable: link in C:\xampp\htdocs\auth2\client\admin.php on line 97

Warning: mysql_query() expects parameter 2 to be resource, null given in C:\xampp\htdocs\auth2\client\admin.php on line 97

Warning: mysql_result() expects parameter 1 to be resource, null given in C:\xampp\htdocs\auth2\client\admin.php on line 98
 
 Top
VenZell
Отправлено: 15 Июля, 2013 - 12:18:50
Post Id


Частый гость


Покинул форум
Сообщений всего: 237
Дата рег-ции: Июнь 2013  


Помог: 12 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1. client_balance > $price OR  client_id = $loginid

Где баланс пользователя больше цены на товар ИЛИ id клиента = id пользователя.
Теперь понимаете, где ошибка?
 
 Top
Страниц (3): [1] 2 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB