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

linpc

Гуру форума
Регистрация
6 Апр 2012
Сообщения
178
Реакции
55
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 - хранение подаренных подарков.

Нужно выдать подарки одним запросов всем игрокам мужского пола. Помогите реализовать.
 
1ый вопрос: не совсем понял что и куда там выводить? каждая строка выводится в новой итерации или есть массив и нужно вывести с новой строки каждый пункт, если второе то имплод и <br> или \r\n в помощь
2ой вопрос: выдать в смысле выбрать?
SELECT * FROM presents WHERE user_id IN (SELECT DISTINCT user_id FROM user WHERE 'sex' = 'male')
 
1ый вопрос: не совсем понял что и куда там выводить? каждая строка выводится в новой итерации или есть массив и нужно вывести с новой строки каждый пункт, если второе то имплод и <br> или \r\n в помощь
2ой вопрос: выдать в смысле выбрать?
Мне поулчается надо считать как то в поле user все ID которые есть именно мужские и занести их таблицу presents.
Вот в игре играют люди в определенным ID и полом. Мне нужно всем им добавить в базе данных в отдельную таблицу Для просмотра ссылки Войди или Зарегистрируйся добавить подарки.
Структура Для просмотра ссылки Войди или Зарегистрируйся:
uid - ID персонажа
present - ID подарка из таблицы hpr
time - время жизни подарка
text - подпись подарка
from - логин отправителя
open - открывается подарок или нет. 1 - Да 0 - Нет
 
ну так в чём проблема?
INSERT INTO presents (uid, present, open, поля по вкусу)
SELECT uid, айди презента, 1, значения по вкусу FROM user WHERE чото там
 
ну так в чём проблема?
INSERT INTO presents (uid, present, open, поля по вкусу)
SELECT uid, айди презента, 1, значения по вкусу FROM user WHERE чото там
честно не понимаю как это сделать.... Особенно как считать это понятно..А вот как ID чтоб он автоматически добавлял в таблицу presents не пойму
 
ну так в чём проблема?
INSERT INTO presents (uid, present, open, поля по вкусу)
SELECT uid, айди презента, 1, значения по вкусу FROM user WHERE чото там

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
 
почти, сам 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
 
почти, сам 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
Честно даже половины не понял)
 
Честно даже половины не понял)
ну, на самом деле всё просто, предлагаю два вызова совместить в один, ну и заодно ознакомиться с базовыми принципами постороения запросов, в любом случае нужно будет.
 
Назад
Сверху