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 :: MySQL и удаление определеной вещи по id номеру

 PHP.SU

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


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

> Без описания
CTAPu4OK
Отправлено: 06 Июня, 2009 - 05:26:12
Post Id



Гость


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


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




Всем привет, помогите разобраться =(

Вот код

PHP:
скопировать код в буфер обмена
  1. <?
  2.  
  3.      $decoct_info = explode ('@', $use_decoct);
  4.      $use_decoct = $decoct_info[0];
  5. if (substr_count($pers["decocts"],'|')>=9):
  6.      $error = 'Больше зелий пить нельзя!';
  7. else:
  8.      switch (@$use_decoct):
  9.           case 'bokal':
  10. say_to_chat ("s","Поздравляем!!! вы изготовили <b>Эликсир силы</b>","1",$pers["user"],$pers["location"],date("H:i:s"));
  11. mysql_query ("UPDATE users SET inv=CONCAT(inv,'111014=0=|') WHERE `uid`='".$pers["uid"]."'");
  12.  
  13.  break;
  14.      endswitch;    
  15.  $decoct_acted=1;      
  16. endif;
  17.  
  18. ?>


т.е. функция скрипта такая: При нажатии на свиток "Использовать" он удаляет ингридиенты с ID номерами: 1000 и 1001 и добавляет зелье с id номером 111014

Делаю запрос в таблицу users и добавляю в инвентарь inv вещь с ID номером 111014 в колличестве 1.
PHP:
скопировать код в буфер обмена
  1. mysql_query ("UPDATE users SET inv=CONCAT(inv,'111014=1=|') WHERE `uid`='".$pers["uid"]."'");
  2.  

Вещь он добавляет, но как сделать что бы он еще удалял ? =)

Попробовал вот так:
PHP:
скопировать код в буфер обмена
  1. mysql_query("DELETE FROM users WHERE `uid`='".$pers["uid"]." IN (inv,'1000=0=|')");

Не получилось =((((
Если поможет то в таблице users в inv запись идет вот так
bokal=0=|1000=0=|
Бокал это сам свиток, 1000 ингредиент

(Отредактировано автором: 06 Июня, 2009 - 06:58:52)

 
 Top
Champion Супермодератор
Отправлено: 06 Июня, 2009 - 08:09:55
Post Id



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


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


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




CTAPu4OK пишет:
WHERE `uid`='".$pers["uid"]." IN (inv,'1000=0=|')");
А что это обознаает?
 
 Top
CTAPu4OK
Отправлено: 06 Июня, 2009 - 08:17:09
Post Id



Гость


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


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




Champion пишет:
CTAPu4OK пишет:
WHERE `uid`='".$pers["uid"]." IN (inv,'1000=0=|')");
А что это обознаает?


Мне аж стыдно стало)) с MySQL я практически не работал,

`uid`='".$pers["uid"]. ид номер персонажа у которого удаляем вещь
(inv,'1000=0=|') inv это столбик в таблице users в нем хранятся записи bokal=0=|1000=0=|итд мне надо было удалить 1000=0= вот я и попытася, не получилось =))

Приведите хотя бы пример как удалить определеную запись в столбике =)
 
 Top
Champion Супермодератор
Отправлено: 06 Июня, 2009 - 08:54:17
Post Id



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


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


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




во-первых, перед IN надо кавычку закрыть.
IN (inv,'1000=0=|') - конструкция странная, IN для других целей используется.
Если у тебя прям вот так "bokal=0=|1000=0=|итд" хранится в одной ячейке, то:
-перепроектируй БД, чтоб такого не было. Сделай 2 таблицы, связанных 1-ко-многим.
-если 1й вариант не нравится, средствами PHP делаешь селект, удаляешь не нужную вещи из строки, делаешь update.
 
 Top
CTAPu4OK
Отправлено: 06 Июня, 2009 - 15:24:44
Post Id



Гость


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


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




Champion пишет:
во-первых, перед IN надо кавычку закрыть.
IN (inv,'1000=0=|') - конструкция странная, IN для других целей используется.
Если у тебя прям вот так "bokal=0=|1000=0=|итд" хранится в одной ячейке, то:
-перепроектируй БД, чтоб такого не было. Сделай 2 таблицы, связанных 1-ко-многим.
-если 1й вариант не нравится, средствами PHP делаешь селект, удаляешь не нужную вещи из строки, делаешь update.


Ясно))) первый вариант мне не подходит, это придется все функции переписывать)
Второй чесно говооря я вообще не представляю себе как реализовать, так как не разу с этим не сталкивался, ведь надо удалить уже имеющиясю строку и при этом не задеть другие)))

А так проблему решил, пришлось заного перечитывать док по пхп =)))
Спасибо =)


PHP:
скопировать код в буфер обмена
  1. $pers["inv"] = str_replace ("1000=0=|","|",$pers["inv"]);

(Добавление)
Ну вот, и тут беда....

PHP:
скопировать код в буфер обмена
  1. <?
  2.  
  3.      $decoct_info = explode ('@', $use_decoct);
  4.      $use_decoct = $decoct_info[0];
  5. if (substr_count($pers["decocts"],'|')>=9):
  6.      $error = 'Больше зелий пить нельзя!';
  7. else:
  8.      switch (@$use_decoct):
  9.           case 'bokal':
  10. $result = mysql_query("SELECT * FROM users WHERE inv=(inv,'1000=0=|')");
  11. if ($result == true)
  12. {
  13. mysql_query("UPDATE users SET inv=CONCAT(inv,'111014=0=|') WHERE `uid`='".$pers["uid"]."'");
  14. say_to_chat ("s","Поздравляем!!! вы изготовили <b>Эликсир силы</b>","1",$pers["user"],$pers["location"],date("H:i:s"));
  15. $pers["inv"] = str_replace ("1000=0=|","|",$pers["inv"]);
  16. }
  17. else
  18. {
  19. say_to_chat ("s","Ошибка, не достаточно ингредиентов для <b>Эликсир силы</b>","1",$pers["user"],$pers["location"],date("H:i:s"));
  20. }
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  break;
  28.      endswitch;    
  29.  $decoct_acted=1;      
  30. endif;
  31.  
  32. ?>


Решил написать проверку....
PHP:
скопировать код в буфер обмена
  1. $result = mysql_query("SELECT * FROM users WHERE inv=(inv,'1000=0=|')");
проверяем id номер вещи в UERS - inv

PHP:
скопировать код в буфер обмена
  1. if ($result == true)
  2. {
  3. mysql_query("UPDATE users SET inv=CONCAT(inv,'111014=0=|') WHERE `uid`='".$pers["uid"]."'");
  4. say_to_chat ("s","Поздравляем!!! вы изготовили <b>Эликсир силы</b>","1",$pers["user"],$pers["location"],date("H:i:s"));
  5. $pers["inv"] = str_replace ("1000=0=|","|",$pers["inv"]);
  6. }

Если присудствует вещь в инвинтаре то выполняем скрипт и пишем в чат

PHP:
скопировать код в буфер обмена
  1. else
  2. {
  3. say_to_chat ("s","Ошибка, не достаточно ингредиентов для <b>Эликсир силы</b>","1",$pers["user"],$pers["location"],date("H:i:s"));
  4. }

Если нет то нечего не делаем а просто выводим сообщение об ошибке...

Но тут беда в том что хоть есть, хоть нету в инвинтаре вещи он все равно выполнит
PHP:
скопировать код в буфер обмена
  1. else
  2. {
  3. say_to_chat ("s","Ошибка, не достаточно ингредиентов для <b>Эликсир силы</b>","1",$pers["user"],$pers["location"],date("H:i:s"));
  4. }


Где я намудрил ? подскажите плиз =)
 
 Top
Champion Супермодератор
Отправлено: 06 Июня, 2009 - 17:35:16
Post Id



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


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


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




CTAPu4OK пишет:
if ($result == true)
Здесь. mysql_query не возвращает true. Он либо ресурс, либо false в случае неудачи возвращает. Ты селект выполнял
 
 Top
CTAPu4OK
Отправлено: 07 Июня, 2009 - 06:21:49
Post Id



Гость


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


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




Champion пишет:
CTAPu4OK пишет:
if ($result == true)
Здесь. mysql_query не возвращает true. Он либо ресурс, либо false в случае неудачи возвращает


Немного не понял) моожно подробнее ? или маленький примерчик ? =)
 
 Top
Champion Супермодератор
Отправлено: 07 Июня, 2009 - 08:56:00
Post Id



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


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


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




Поподробнее и маленький примерчик:
http://www.php.su/functions/?mysql-query
(Добавление)
http://www.php.su/functions/?mysql-fetch-array тут тоже примерчик
 
 Top
CTAPu4OK
Отправлено: 07 Июня, 2009 - 09:27:36
Post Id



Гость


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


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




Champion пишет:
Поподробнее и маленький примерчик:
http://www.php.su/functions/?mysql-query
(Добавление)
http://www.php.su/functions/?mysql-fetch-array тут тоже примерчик


Спасибо, вроде понял)
 
 Top
CTAPu4OK
Отправлено: 07 Июня, 2009 - 16:03:11
Post Id



Гость


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


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




Старое стер!!! разобрался с проверкой =)
Но тут еще одна проблемка

PHP:
скопировать код в буфер обмена
  1. <?
  2.      $decoct_info = explode ('@', $use_decoct);
  3.      $use_decoct = $decoct_info[0];
  4.      
  5. if (substr_count($pers["inv"],'1000=0=|')<1):
  6. say_to_chat ("s","Ошибка, не достаточно ингредиентов для Эликсир силы","1",$pers["user"],$pers["location"],date("H:i:s"));
  7. else:
  8.      switch (@$use_decoct):
  9.  case 'bokal':
  10.  mysql_query("UPDATE users SET inv=CONCAT(inv,'111014=0=|') WHERE `uid`='".$pers["uid"]."'");
  11.     $pers["inv"] = str_replace ("1000=0=|","|",$pers["inv"]);
  12.     say_to_chat ("s","Поздравляем!!! вы изготовили <b>Эликсир силы</b>","1",$pers["user"],$pers["location"],date("H:i:s"));
  13.      endswitch;    
  14.  $decoct_acted=1;      
  15. endif;
  16. ?>

Он не выполняет
PHP:
скопировать код в буфер обмена
  1.  mysql_query("UPDATE users SET inv=CONCAT(inv,'111014=0=|') WHERE `uid`='".$pers["uid"]."'");

+ ко всему в обоих случаях выполняет по 2 раза
PHP:
скопировать код в буфер обмена
  1. say_to_chat ("s","Поздравляем!!! вы изготовили <b>Эликсир силы</b>","1",$pers["user"],$pers["location"],date("H:i:s"));

(Добавление)
Все, спасибо =) понял как оно работает =))))

(Отредактировано автором: 07 Июня, 2009 - 16:44:40)

 
 Top
scray
Отправлено: 20 Июня, 2009 - 13:51:45
Post Id


Гость


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


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




'111014=0=|' , а как это понять?
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB