Вопрос цикла и выдачи подарков всем разом.

Тема в разделе "Игровые движки", создана пользователем linpc, 22 фев 2013.

  1. linpc

    linpc

    Регистр.:
    6 апр 2012
    Сообщения:
    178
    Симпатии:
    52
    1-ый вопрос:
    PHP:
    if($_POST['post_id']==53){
    $items=mysql_fetch_array(mysql_query("SELECT * FROM `hpr` WHERE `present`='".$_POST['fid']."' LIMIT 1;"));
                if(
    $items['items_id']!=0){
                
    $item=explode("|",$items['items_id']);
                    foreach(
    $item as $val){
                        if(
    $val!=''){
                                
    $itemsql=mysql_fetch_array(mysql_query("SELECT * FROM `items` WHERE `id`='".$val."' LIMIT 1;"));
                                
    $par=explode("|",$itemsql['param']);
                                foreach (
    $par as $value) {
                                    
    $stat=explode("@",$value);
                                    switch(
    $stat[0]){case 2$dolg=$stat[1];break;}
                                }
                                if(
    $items['eff_id']>0){
                        
    mysql_query("INSERT INTO `effects` (`userid`,`time`,`eff_id`,`f_params`,`s_time`,`s_params`) VALUES ('".$player['id']."','".(time()+$items['eff_time'])."','11','".$items['f_params']."','0','');");
    }
                                if(
    mysql_query("INSERT INTO `invent` (`ItemName`,`img`,`protype`,`pl_id`,`dolg`,`price`,`dprice`,`i_param`,`i_need`,`death`,`gift`) VALUES ('".$itemsql['name']."','".$itemsql['gif']."','".$itemsql['id']."','".$player['id']."','".$dolg."','".$itemsql['price']."','".$itemsql['dprice']."','".$itemsql['param']."','".$itemsql['need']."','".(time()+$items['eff_time'])."','Подарок от "Мастер Создатель"');")){
                                
    mysql_query("INSERT INTO `chat` (`time`,`login`,`dlya`,`msg`) VALUES ('".time()."','sys','<".$player['login'].">','".addslashes("top.frames['chmain'].add_msg('<font class=chattime>&nbsp;".date("H:i:s")."&nbsp;</font><font color=000000><font color=#cc0000><b>Системная информация!</b></font> Праздничные бонусы Сила: + 15 Ловкость: +15 Удача: + 15 HP: +100. Действует до ".date("d.m.y H:i",time()+$items['eff_time'])."<BR>'+'');")."');");
                                
    mysql_query("INSERT INTO `chat` (`time`,`login`,`dlya`,`msg`) VALUES ('".time()."','sys','<".$player['login'].">','".addslashes("top.frames['chmain'].add_msg('<font class=chattime>&nbsp;".date("H:i:s")."&nbsp;</font><font color=000000><font color=#cc0000><b>Системная информация!</b></font> В инвентарь добавлена вещь <b>«".$itemsql['name']." [".$dolg."/".$dolg."]»</b>. <BR>'+'');")."');");       
                                                            }
                        }
                    }
                }       
    }
    Как вы уже поняли, запрос:
    PHP:
    if($items['items_id']!=0){
                
    $item=explode("|",$items['items_id']);
                    foreach(
    $item as $val){
                        if(
    $val!=''){
                                
    $itemsql=mysql_fetch_array(mysql_query("SELECT * FROM `items` WHERE `id`='".$val."' LIMIT 1;"));
                                
    $par=explode("|",$itemsql['param']);
                                foreach (
    $par as $value) {
                                    
    $stat=explode("@",$value);
                                    switch(
    $stat[0]){case 2$dolg=$stat[1];break;}
                                }
    имеет ввиду, что в 1 подарке может быть до нескольких вещей которые перечисляются так: Меч|Доспех|Нож. Затем происходит системное сообщение что в инвентарь добавлена вещь такая то: Но все вещи в одну строчку. Как мне сделать,чтоб все вещи выданные с подарка писались с новой строчки,что вещь добавлена.

    2-ой вопрос:
    Имеется 3 таблицы:
    user-хранение ников и так далее
    presents - хранение подаренных подарков.

    Нужно выдать подарки одним запросов всем игрокам мужского пола. Помогите реализовать.
     
  2. Шумадан

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.728
    Симпатии:
    2.105
    1ый вопрос: не совсем понял что и куда там выводить? каждая строка выводится в новой итерации или есть массив и нужно вывести с новой строки каждый пункт, если второе то имплод и <br> или \r\n в помощь
    2ой вопрос: выдать в смысле выбрать?
     
    linpc нравится это.
  3. linpc

    linpc

    Регистр.:
    6 апр 2012
    Сообщения:
    178
    Симпатии:
    52
    Мне поулчается надо считать как то в поле user все ID которые есть именно мужские и занести их таблицу presents.
    Вот в игре играют люди в определенным ID и полом. Мне нужно всем им добавить в базе данных в отдельную таблицу presents добавить подарки.
    Структура presents:
    uid - ID персонажа
    present - ID подарка из таблицы hpr
    time - время жизни подарка
    text - подпись подарка
    from - логин отправителя
    open - открывается подарок или нет. 1 - Да 0 - Нет
     
  4. Шумадан

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.728
    Симпатии:
    2.105
    ну так в чём проблема?
    INSERT INTO presents (uid, present, open, поля по вкусу)
    SELECT uid, айди презента, 1, значения по вкусу FROM user WHERE чото там
     
    linpc нравится это.
  5. linpc

    linpc

    Регистр.:
    6 апр 2012
    Сообщения:
    178
    Симпатии:
    52
    честно не понимаю как это сделать.... Особенно как считать это понятно..А вот как ID чтоб он автоматически добавлял в таблицу presents не пойму
     
  6. linpc

    linpc

    Регистр.:
    6 апр 2012
    Сообщения:
    178
    Симпатии:
    52
    PHP:
    $UserWin mysql_fetch_assoc(mysql_query("SELECT `id` FROM `user` WHERE `id`>'10000' AND `block`='' AND `sex`='male';"));
     
    mysql_query("INSERT INTO `presents` (`uid`, `presents`, `time`, `test`,`from`,`open`) VALUES ('".$UserWin['id']."', '2300', '".((15*86400)+time())."', 'C Днем победы','Администрация','1');");    
    Правильно тебя понял? но я не понял как он будет создавать пока читает user
     
  7. Шумадан

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.728
    Симпатии:
    2.105
    почти, сам INSERT неверно построен, так как в результате SELECT в $UserWin будет 0..n пользователей, нужно второй mysql_query поместить в блок проверки "а есть ли вообще пользователя" и блок итерации по значениям $UserWin массива, где в каждой из итераций будет использоваться лишь один идентификатор пользователя, логичнее б было соединить оба пункта в что-то типа:
    Код:
    $query =
    "INSERT INTO `presents` (`uid`, `presents`, `time`, `test`,`from`,`open`) ".
    "SELECT `id`, '2300', '".((15*86400)+time())."', 'C Днем победы','Администрация','1' FROM `user` WHERE `id`>'10000' AND `block`='' AND `sex`='male'";
    mysql_query($query);
    тогда сам php будет задействован по минимуму и всё будет исполнятся на стороне базы, в таком случае можно избежать ненужных итераций и проверок. не совсем уверен, но возможно SELECT нужно будет заключить в (), почитайте mysql документации касательно правильной структуры INSERT INTO ... SELECT FROM
     
  8. linpc

    linpc

    Регистр.:
    6 апр 2012
    Сообщения:
    178
    Симпатии:
    52
    Честно даже половины не понял)
     
  9. Шумадан

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.728
    Симпатии:
    2.105
    ну, на самом деле всё просто, предлагаю два вызова совместить в один, ну и заодно ознакомиться с базовыми принципами постороения запросов, в любом случае нужно будет.
     
    linpc нравится это.