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
Форумы портала PHP.SU :: Версия для печати :: PHP, MySQL. Помогите составить условие (запрос в БД)
Форумы портала PHP.SU » » Вопросы новичков » PHP, MySQL. Помогите составить условие (запрос в БД)

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

1. vanya_sl - 15 Июля, 2013 - 00:59:21 - перейти к сообщению
Доброй ночи.
Нужно составить правелно запрос в БД.
Короч пользователь кликает купить, с его баланса списываются средства. Я составил, но работает немного не так. Само условие работает немного не так. Если например цена больше от баланса, то снимаются все средства (до 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.  
2. DeepVarvar - 15 Июля, 2013 - 01:23:56 - перейти к сообщению
Нужно сперва сходить в БД и узнать сколько бобла у покупателя.
На этом основании вообще уже думать - давать купить или нет.
3. BesTime - 15 Июля, 2013 - 01:24:14 - перейти к сообщению
Не много не в тему но не проще сделать проверку баланса пользователя и цену товара с помощью джава скрипта. Зачем для этого обращаться в базу данных?
4. vanya_sl - 15 Июля, 2013 - 01:30:08 - перейти к сообщению
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 ?
5. VestCoastman - 15 Июля, 2013 - 01:32:45 - перейти к сообщению
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, ну а что вы будите делать, если запрос подменять?)
6. BesTime - 15 Июля, 2013 - 01:41:48 - перейти к сообщению
VestCoastman о каком запросе идет речь, и зачем его подменять?
7. vanya_sl - 15 Июля, 2013 - 01:41:52 - перейти к сообщению
VestCoastman
1.Не понимаю. Буду благодарен, если покажите как надо сделать кодом, или примером ...
2.
3. Ну мне бы сейчас условие правельно реализовать)
8. BesTime - 15 Июля, 2013 - 01:46:57 - перейти к сообщению
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.  


писал на скору руку. Тема такая запрашиваем сначало баланс пользователя из базы, потом обновляем это значения вычитая стоимость продукта
(Добавление)
PHP:
скопировать код в буфер обмена
  1. WHERE client_balance > $price

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

PHP:
скопировать код в буфер обмена
  1. WHERE $client_balance > $price
9. soleg - 15 Июля, 2013 - 02:03:14 - перейти к сообщению
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.  
10. VestCoastman - 15 Июля, 2013 - 02:05:35 - перейти к сообщению

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

vanya_sl, Примерно так(подкорректировать под себя):
Спойлер (Отобразить)
11. BesTime - 15 Июля, 2013 - 02:05:54 - перейти к сообщению
У тебя в sql запросел баланс пользователя остался как текст а не переменная со значением как должно быть
12. vanya_sl - 15 Июля, 2013 - 11:29:50 - перейти к сообщению
Большое спасибо!
Но ни один из примеров не работает ... Корректировал но опять возвращаемся к моему варианту (те же действия скрипта) ...
На счет переменной баланс. В моем коде она видна. И нормально работает списывания суммы ..
Вот толко когда баланс ниже цены, возникает ошибка. Списывается баланс до 0 и отсылаются данные. А нужно что бы выводилось сообщение "Нет денег" ...
А то так пользователь сможет купить то, что стоит 100$ за 2$ Огорчение
13. BesTime - 15 Июля, 2013 - 11:46:32 - перейти к сообщению
Где в коде котором ты выложил переменная баланс и где она в обращении к бд?
14. vanya_sl - 15 Июля, 2013 - 12:05:32 - перейти к сообщению
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
15. VenZell - 15 Июля, 2013 - 12:18:50 - перейти к сообщению
CODE (SQL):
скопировать код в буфер обмена
  1. client_balance > $price OR  client_id = $loginid

Где баланс пользователя больше цены на товар ИЛИ id клиента = id пользователя.
Теперь понимаете, где ошибка?

 

Powered by ExBB FM 1.0 RC1