Понедельник, 25 Ноября 2024, 20:14

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Помогите в создании боя [PHP]
FusixДата: Вторник, 27 Июля 2010, 11:37 | Сообщение # 1
был не раз
Сейчас нет на сайте
Итак, у меня есть JS скрипт боя, который получает данные с PHP - обработчика и по ним рисует игроков на карте. С этим и проблема.
Мне необходимо сделать, чтобы для каждого игрока PHP скрипт создавал вот такой текст:

Code
'331256': //  - Это ID игрока
{'hp':'482','hp_max':'575','class_id':'110','race':'0','model':'1','login':'Ополченец','level':'9','rating':'295',
'army':'1','acti ve  ':'1','fishka_type':'11','complete':'1','pid':'331256','x':'1','y':'2','x1':'1','y1':'2','killed':'0'}, // - Это данные

И записывался в переменную.

Сообщение отредактировал Fusix - Вторник, 27 Июля 2010, 11:40
lvovandДата: Вторник, 27 Июля 2010, 12:57 | Сообщение # 2
старожил
Сейчас нет на сайте
Fusix, в чем конкретно проблема? если правильно понял, в PHP это будет примерно так

Code

<?php

//получаем данные из таблицы по id
$sql = "SELECT * FROM `users` WHERE `id` = '331256' LIMIT 1";
$res = mysql_query($sql);
$row = mysql_fetch_array($res);

$person= "{'hp' : '".$row['hp']."','hp_max' : '".$row['hp_max']."' }"; // ну и так далее по всем полям
?>

в переменной на джаваскрипте текст можешь присвоить

Code

<script type='text/javascript'>var person = <? echo $person;?> </script>


Разработка и продвижение сайтов. Дизайн
FusixДата: Вторник, 27 Июля 2010, 13:18 | Сообщение # 3
был не раз
Сейчас нет на сайте
Quote (lvovand)

Fusix, в чем конкретно проблема? если правильно понял, в PHP это будет примерно так

Просто мне нужно выполнять
Code

$sql = "SELECT * FROM `users` WHERE `id` = '331256' LIMIT 1";  
$res = mysql_query($sql);  
$row = mysql_fetch_array($res);  

$person= "{'hp' : '".$row['hp']."','hp_max' : '".$row['hp_max']."' }"; // ну и так далее по всем полям

Для каждого участника боя. Они у меня указаны в виде ID в таблице battles:

Code
    id    int(100)                    Нет  auto_increment              
  pl1    varchar(100)    cp1251_general_ci  Да    NULL                
  pl2    varchar(100)    cp1251_general_ci  Да    NULL                
  pl3    varchar(100)    cp1251_general_ci  Да    NULL                
  pl4    varchar(100)    cp1251_general_ci  Да    NULL                
  pl5    varchar(100)    cp1251_general_ci  Да    NULL                
  pl6    varchar(100)    cp1251_general_ci  Да    NULL                
  pl7    varchar(100)    cp1251_general_ci  Да    NULL                
  pl8    varchar(100)    cp1251_general_ci  Да    NULL                
  pl9    varchar(100)    cp1251_general_ci  Да    NULL                
  pl10    varchar(100)    cp1251_general_ci  Да    NULL                
  pl11    varchar(100)    cp1251_general_ci  Да    NULL                
  pl12    varchar(100)    cp1251_general_ci  Да    NULL                
  pl13    varchar(100)    cp1251_general_ci  Да    NULL                
  pl14    varchar(100)    cp1251_general_ci  Да    NULL                
  pl15    varchar(100)    cp1251_general_ci  Да    NULL                
  pl16    varchar(100)    cp1251_general_ci  Да    NULL                
  pl17    varchar(100)    cp1251_general_ci  Да    NULL                
  pl18    varchar(100)    cp1251_general_ci  Да    NULL                
  pl19    varchar(100)    cp1251_general_ci  Да    NULL                
  pl20    varchar(100)    cp1251_general_ci  Да    NULL                
  pl21    varchar(100)    cp1251_general_ci  Да    NULL                
  pl22    varchar(100)    cp1251_general_ci  Да    NULL                
  pl23    varchar(100)    cp1251_general_ci  Да    NULL                
  pl24    varchar(100)    cp1251_general_ci  Да    NULL                
  pl25    varchar(100)    cp1251_general_ci  Да    NULL    

Нужно пройтись по всем pl и получить для них данные.
Цикл для этого подойдет?
lvovandДата: Вторник, 27 Июля 2010, 13:30 | Сообщение # 4
старожил
Сейчас нет на сайте
если по всем то в php делаешь так
Code

$sql = "SELECT * FROM `users` WHERE 1";  //пробегает по всем игрокам, отфильтруй если нужно тех кто в бою участвует
$res = mysql_query($sql);   
while($row = mysql_fetch_array($res)){
  $person[]= "{'hp' : '".$row['hp']."','hp_max' : '".$row['hp_max']."' }"; // ну и так далее по всем полям
}   

тогда $person - будет массив с отобранными игроками


Разработка и продвижение сайтов. Дизайн
FusixДата: Вторник, 27 Июля 2010, 13:44 | Сообщение # 5
был не раз
Сейчас нет на сайте
Quote (lvovand)
если по всем то в php делаешь так
Code

$sql = "SELECT * FROM `users` WHERE 1";  //пробегает по всем игрокам, отфильтруй если нужно тех кто в бою участвует
$res = mysql_query($sql);   
while($row = mysql_fetch_array($res)){
  $person[]= "{'hp' : '".$row['hp']."','hp_max' : '".$row['hp_max']."' }"; // ну и так далее по всем полям
}   
тогда $person - будет массив с отобранными игроками


Ууу это долго... база огромная ведь...
Может мне циклом?
Пробегать по строке боя в таблице бетл и циклом выполнять получение данных до того момента, как цикл выполнится столько раз, сколько игроков в той битве.
lvovandДата: Вторник, 27 Июля 2010, 13:51 | Сообщение # 6
старожил
Сейчас нет на сайте
так все равно придется запросы к базе выполнять, просто циклом будешь по одному запросу базу дергать дергать,
а можно сразу данные получить. Чтобы не по всей базе бежал а только по игрокам в бою

$sql = "SELECT * FROM `users` WHERE 1 AND `id` IN (SELECT `id` FROM `battles`) "; //пробежит по игрокам, которые есть в таблице battles
$res = mysql_query($sql);
while($row = mysql_fetch_array($res)){
$person[]= "{'hp' : '".$row['hp']."','hp_max' : '".$row['hp_max']."' }"; // ну и так далее по всем полям
}


Разработка и продвижение сайтов. Дизайн
FusixДата: Вторник, 27 Июля 2010, 14:10 | Сообщение # 7
был не раз
Сейчас нет на сайте
Quote
так все равно придется запросы к базе выполнять, просто циклом будешь по одному запросу базу дергать дергать,
а можно сразу данные получить. Чтобы не по всей базе бежал а только по игрокам в бою
$sql = "SELECT * FROM `users` WHERE 1 AND `id` IN (SELECT `id` FROM `battles`) "; //пробежит по игрокам, которые есть в таблице battles
$res = mysql_query($sql);
while($row = mysql_fetch_array($res)){
$person[]= "{'hp' : '".$row['hp']."','hp_max' : '".$row['hp_max']."' }"; // ну и так далее по всем полям
}

А скажи, как мне вывести $person?
lvovandДата: Вторник, 27 Июля 2010, 14:18 | Сообщение # 8
старожил
Сейчас нет на сайте
если по последнему посту, то $person у тебя массив из строк,
в php можешь обратиться к нему

echo $person[0]; //вывод первой строки
echo $person[1]; //вывод второй строки
ну и т.д.
если все значения вывести, то можно циклом
for($i=0; $i<count($person); $i++){
echo $person[$i];
}

если вывести массив просто для дебага, то
var_dump($person); //выведет полную инфу о массиве

но ты вроде хотел в javascript это дело выводить или уже не требуется?


Разработка и продвижение сайтов. Дизайн
FusixДата: Вторник, 27 Июля 2010, 14:22 | Сообщение # 9
был не раз
Сейчас нет на сайте
Quote (lvovand)
если по последнему посту, то $person у тебя массив из строк,
в php можешь обратиться к нему
echo $person[0]; //вывод первой строки
echo $person[1]; //вывод второй строки
ну и т.д.
если все значения вывести, то можно циклом
for($i=0; $i<count($person); $i++){
echo $person[$i];
}

если вывести массив просто для дебага, то
var_dump($person); //выведет полную инфу о массиве

но ты вроде хотел в javascript это дело выводить или уже не требуется?


я передаю данные в дж по другому... с помощью
Code
req.init('POST', 'battle_parser.php', true, 'gameBattle');

Парсер надо сделать...

lvovandДата: Вторник, 27 Июля 2010, 14:38 | Сообщение # 10
старожил
Сейчас нет на сайте
я правильно понял, что аяксом вызываешь battle_parser.php?

тогда в battle_parser.php //обработку ошибок и обращение к базе пропускаю

for($i=0; $i<count($person); $i++){
echo $person[$i].";"; //";" добавил для разделения строк
}

а в javascript есть аналоги explode и implode
предположим загрузил данные в переменную text, тогда
text.split(';');
//даст тебе массив из строк $person


Разработка и продвижение сайтов. Дизайн
LocksleyДата: Среда, 22 Июня 2011, 13:22 | Сообщение # 11
почетный гость
Сейчас нет на сайте
я что то подобное реализовывал, пиши в лс, скину код

умных ответов счетное множество, глупых вопросов - континуум
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг