Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вывод из базы всех. Но выводится только по 1
 
 автор: EvilScorpion   (03.01.2015 в 19:53)   письмо автору
 
 

Единственная проблема в том, что выводятся к Radiant b Dire по 1 человеку, хотя в игре 10.

   echo "<font color='#fff'>".$ssr['playername']." - " .$ssr['playerteam']."</font><br />  ";
    echo "<font color='#fff'>".$ssd['playername']." - " .$ssd['playerteam']."</font><br />  ";



Сам код:


<?php
    
include ('db.php');
 
     
$dbconnect mysql_connect ($dbhost$dbusername$dbpass); 
    if (!
$dbconnect) { echo ("Не могу подключиться к серверу базы данных!"); }
 
    if(@
mysql_select_db($dbname)) { /*echo "Подключение к базе $dbname установлено!"; */ }
    else die (
"Не могу подключиться к базе данных !");
    
$radiant "Radiant";
    
$dire "Dire";
    
$rowr = ("SELECT DISTINCT gameport  FROM anotherdb WHERE gameport"  );
    
$rs mysql_query($rowr) or die(mysql_error());
    
$ss mysql_fetch_array($rs);
 
    
$server '83.69.139.185'// &#6512;&#27725;
 
 
    // &#1395;&#60150;&#40928;&#416802;&#27744; 1
    
function GetServerInfo($server,$port) { 
         
$fp = @fsockopen("udp://".$server$port); 
         if (!
$fp) return false;
 
         @
fwrite($fp,"\xFF\xFF\xFF\xFF\x54\x53\x6F\x75\x72\x63\x65\x20\x45\x6E\x67\x69\x6E\x65\x20\x51\x75\x65\x72\x79\x00".chr(10)); 
         
$start=time(); 
         
socket_set_timeout($fp,1); 
         
$st=fread($fp,1); 
         
$r=socket_get_status($fp); 
         
$result['status'] = $r["timed_out"];
         
$r=$r["unread_bytes"]; 
         if (
$r == 0) { @fclose($fp); return false;} 
         
$st.=fread($fp,$r); 
         @
fclose($fp);
 
         
$st=substr($st,5); 
         
$address=SubStr($st,0,StrPos($st,chr(0))); 
         
$address=str_replace(chr(0),"|",$address); 
         
$st=SubStr($st,StrPos($st,chr(0))+1); 
         
$name=SubStr($st,0,StrPos($st,chr(0))); 
         
$st=SubStr($st,StrPos($st,chr(0))+1); 
         
$map=SubStr($st,0,StrPos($st,chr(0))); 
         
$st=SubStr($st,StrPos($st,chr(0))+1); 
         
$st=SubStr($st,StrPos($st,chr(0))+1); 
         
$st=SubStr($st,StrPos($st,chr(0))+3); 
         
$current=ord(SubStr($st,0,1)); 
         
$max=ord(SubStr($st,1,1));
 
         if (
$map == "") return false
         
$result['map'] = $map
         
$result['name']= $name
         
$result['current'] = $current
         
$result['max'] = $max;
 
         return 
$result
    }
 
 
    
// Radiant
 
    
$rowrr = ("SELECT DISTINCT playername,playerteam  FROM anotherdb WHERE playerteam='Radiant'"  );
    
$rsr mysql_query($rowrr) or die(mysql_error());
    
$ssr mysql_fetch_array($rsr);
 
    
// Dire
    
$rowrd = ("SELECT DISTINCT playername,playerteam FROM anotherdb WHERE playerteam='Dire' " );
    
$rsd mysql_query($rowrd) or die(mysql_error());
    
$ssd mysql_fetch_array($rsd);
 
 
    do {
    
$serv GetServerInfo($server,$ss['gameport']); // &#1189;&#141680; 1
 
 
 
    
echo '<b> <span class="w1">Port '.$ss['gameport'].'</span></b>';
    if (
$serv AND $ssd['playername'] AND $ssr['playername'] ) {
 
    echo 
'
    <span class="t1"><h1>All Pick:</h1> game.x64.uz:'
.$ss['gameport'].'
    </span>
    <span class="t1 "><h1>&#611;&#191150;&#11964;/h1>'
.$serv['current'].' / '.$serv['max'].'
    </span>
    <span class="t1 "><h1>&#1202;&#7411;&#503599;h1><font color="#00ff2a    ";>On-line</font>
 
    </span>'
;
 
 
    echo 
"<font color='#fff'>".$ssr['playername']." - " .$ssr['playerteam']."</font><br />  ";
    echo 
"<font color='#fff'>".$ssd['playername']." - " .$ssd['playerteam']."</font><br />  ";
 
 
 
    } else {
    echo 
'<span class="tt1 "><h1>&#1202;&#7411;&#503599;h1> <font color="red";>Off-line</font></span>';
    }
    echo 
'<div style="clear:both;"></div>';
    }
    while (
$ss mysql_fetch_array($rs) AND $ssd mysql_fetch_array($rsd) AND $ssr mysql_fetch_array($rsr));



Все работает правильно кроме вывода человек, как выше писал они выводятся по 1, а нужно всех т.е к примеру сейчас 3 порта запущено

выводится:
сервер 1
10игроков
online
Кто в игре:
rustamm93 - Radiant
Zikoi5 - Dire

Ники: "вот в них и загвоздка" за ту и ту команду выводятся по 1-у и должно быть по 5 на 1-ом сервере.
На вид вроде мелочи, но помогите разобраться.

помогите если можете.

  Ответить  
 
 автор: Лена   (03.01.2015 в 19:57)   письмо автору
 
   для: EvilScorpion   (03.01.2015 в 19:53)
 

1. Вместо do ... while надо использовать while {}

2. Так вы и выводите по одному результату здесь:

<?php    
$rowrr 
= ("SELECT DISTINCT playername,playerteam  FROM anotherdb WHERE playerteam='Radiant'"  );
    
$rsr mysql_query($rowrr) or die(mysql_error());
    
$ssr mysql_fetch_array($rsr);
 
    
// Dire
    
$rowrd = ("SELECT DISTINCT playername,playerteam FROM anotherdb WHERE playerteam='Dire' " );
    
$rsd mysql_query($rowrd) or die(mysql_error());
    
$ssd mysql_fetch_array($rsd);
?>

В $ssr - одна строка из базы, в $ssd - то же самое.

  Ответить  
 
 автор: EvilScorpion   (03.01.2015 в 20:02)   письмо автору
 
   для: Лена   (03.01.2015 в 19:57)
 

изменилось только 1, на данный момент 4 порта в действии, а в while цикле показывает 3 вместо 4. в do while нормально отображается. Мне здесь нужно ток сделать, что бы правильно выводило количество людей на сервере т.е их Имена.

  Ответить  
 
 автор: EvilScorpion   (03.01.2015 в 20:06)   письмо автору
 
   для: Лена   (03.01.2015 в 19:57)
 

Кстати есть еще 1 что я сделал, но тут понимаете просто вывод идет из базы в 2 типа, т.е в радиант и дайер


// Radiant

$rowr = ("SELECT DISTINCT playername,gameport  FROM anotherdb WHERE playerteam='Radiant'"  );
$rs = mysql_query($rowr) or die(mysql_error());
$ss = mysql_fetch_array($rs);
do
{
echo "".$ss['playername']." - " .$ss['gameport']."<br />    ";
}
while($ss = mysql_fetch_array($rs));
echo "<br />";
// Dire
$rowrd = ("SELECT DISTINCT playername,gameport  FROM anotherdb WHERE playerteam='Dire'" );
$rsd = mysql_query($rowrd) or die(mysql_error());
$ssd = mysql_fetch_array($rsd);
do
{
echo "".$ssd['playername']." - " .$ssd['gameport']."<br />    ";
}
while($ssd = mysql_fetch_array($rsd));



но у меня не получилось объединить. Этот код в принципи не имеет значения. Мне нужно реализовать первый пост код.

  Ответить  
 
 автор: confirm   (03.01.2015 в 21:00)   письмо автору
 
   для: EvilScorpion   (03.01.2015 в 20:06)
 

А зачем два раздельных запроса?

  Ответить  
 
 автор: EvilScorpion   (03.01.2015 в 21:09)   письмо автору
 
   для: confirm   (03.01.2015 в 21:00)
 

Затем что бы кто ни будь спросил. По теме....

  Ответить  
 
 автор: Valick   (03.01.2015 в 21:25)   письмо автору
 
   для: EvilScorpion   (03.01.2015 в 21:09)
 

Это как раз и есть вопрос по теме. А будете пальцы гнуть, будете ходить пешком...

  Ответить  
 
 автор: confirm   (03.01.2015 в 22:24)   письмо автору
 
   для: EvilScorpion   (03.01.2015 в 21:09)
 

Вот что я вам скажу, юноша:

1) do ... while - ну пора бы уже забыть о ней для данного контекста, это не смертельно конечно, но и необходимости в ней в данном случае совсем нет.

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

3) из вашего кода я ничего не понял, что там, зачем и для чего. Но я вижу, что два запроса - это запросы к одной и той же же таблице. Возникает вопрос - зачем? Это все можно получить и одним запросом, вопрос только в том, что это за данные, связаны ли они чем либо между собой или нужно получить два списка (почему и два запроса)?

Если вам лень отвечать на вопросы вам задаваемые или вы считаете это оскорблением, да за ради бога, я могу и заткнуться. Если же хотите исправить свои "костыли в коде", то уж будьте ласка, отвечайте на вопросы вам заданные, глядишь и решение кто-то предложит не аляпистое.

Отвыкните от привычки трактовать вопросы к вам как пику в бок, это лишь вопросы уточняющие и в них нет сарказма, а то тут развелось "обидчивых по собственному желанию" пруд пруди.

  Ответить  
 
 автор: EvilScorpion   (04.01.2015 в 00:50)   письмо автору
 
   для: confirm   (03.01.2015 в 22:24)
 

Таблица генерируется автоматически. Теперь ясно?

  Ответить  
 
 автор: confirm   (04.01.2015 в 01:00)   письмо автору
 
   для: EvilScorpion   (04.01.2015 в 00:50)
 

Даже и не знаешь как комментировать такие ответы.

  Ответить  
 
 автор: Trianon   (04.01.2015 в 02:57)   письмо автору
 
   для: confirm   (04.01.2015 в 01:00)
 

вот этот самый евгивановский do while - для меня маркер.
Корм будет не в коня.

  Ответить  
 
 автор: confirm   (04.01.2015 в 05:24)   письмо автору
 
   для: Trianon   (04.01.2015 в 02:57)
 

Да слов уже нет ни каких, приходят с вопросами, а с гонором, считают себя гениями, если я дурак не могу понять, что же это означает, и не дай боже спросить - посягательство на неприкосновенность, не меньше.

  Ответить  
 
 автор: EvilScorpion   (04.01.2015 в 09:40)   письмо автору
 
   для: confirm   (04.01.2015 в 05:24)
 

Почему надо сразу помидорами закидывать ? или задавать такие вопросы "почему ты сделал так?" так можно было бы ответить нормально, к примеру "сделай лучше так" из всех ваших слов помощи я так и не увидел.

  Ответить  
 
 автор: Valick   (04.01.2015 в 09:53)   письмо автору
 
   для: EvilScorpion   (04.01.2015 в 09:40)
 

Потому, что на форуме взрослые люди и нам некогда возиться с детскими истериками, комплексами и максимализмом.

  Ответить  
 
 автор: confirm   (04.01.2015 в 10:08)   письмо автору
 
   для: EvilScorpion   (04.01.2015 в 09:40)
 

А вы думаете, что "Таблица генерируется автоматически. Теперь ясно?" максимально объемное разъяснение?

Еще раз:

а) у вас два запроса к одной и той же таблице, то что таблица генерируется автоматически, или это временно создаваемая таблица, совсем не означает, что в ней нельзя делать вложенных запросов, объединять запросы и многое другое чего позволительно в рамках MySQL.

б) мне playerteam='Radiant' и playerteam='Dire' ни о чем не говорит, я лишь знаю, что это параметры запроса. А вот почему каждый в свои "двери" лезет, я не понимаю, потому как знаю, что они спокойно бы вошли в одну дверь. Единственное оправдание такого поступка, это второй запрос спустя время, но этого то ведь нет.

А чтобы сказать "сделай лучше так", хорошо бы кроме кода знать в общих чертах суть задачи им описываемой. Может действительно зря придираюсь, так как в этом есть нечто такое, чего не видно из представленного.

  Ответить  
 
 автор: EvilScorpion   (04.01.2015 в 10:18)   письмо автору
 
   для: confirm   (04.01.2015 в 10:08)
 

1й запрос в эту таблицу идет к значению Radiant 2й Dire

пошаманил чутка, сделал так:



   echo "<div class='usertable'><p>Radiant</p>";
while($ssr = mysql_fetch_array($rsr) ) {

    
      echo "<font color='green'>".$ssr['playername']." </font><br />  ";

      }
      
       echo "</div>";
       
          echo "<div class='usertable'><p>Dire</p>";
      while($ssd = mysql_fetch_array($rsd) ) {
    echo "<font color='red'>".$ssd['playername']." </font><br />  ";
   }
   echo "</div>";


странно, теперь выводится не по 1, а по 4. Хотя в таблицы 10 человек

  Ответить  
 
 автор: EvilScorpion   (04.01.2015 в 10:24)   письмо автору
 
   для: EvilScorpion   (04.01.2015 в 10:18)
 

Разобраться убрал ранее $ssr = mysql_fetch_array($rsr); $ssd = mysql_fetch_array($rsd);

  Ответить  
 
 автор: confirm   (04.01.2015 в 13:23)   письмо автору
 
   для: EvilScorpion   (04.01.2015 в 10:18)
 

>1й запрос в эту таблицу идет к значению Radiant 2й Dire

И чем это обусловлено? Динамическим созданием таблицы? Это не довод. Что надо - получить на текущий момент состояние (?), параметры (?), ххххх (?) этих двух персонажей? Они как-то связаны или каждый из них сам по себе?

  Ответить  
 
 автор: EvilScorpion   (04.01.2015 в 16:22)   письмо автору
 
   для: confirm   (04.01.2015 в 13:23)
 

Все уже... спасибо... Реализовал через while и запросы местами поменял.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования