ugrás a tartalomhoz

A while lefut csak az első futs értékeit használja

Anonymous · 2006. Jún. 28. (Sze), 22.47
ÜDv!

Az a bajom hogy a while anyiszor lefut ugye ahény sor van(3), de minenhova az első értékeit
adja le...

miért?
  1. <?php  
  2.   
  3. $server_query = mysql_query("SELECT server_id, server_status_adress, server_status_port, server_status_xml FROM servers");  
  4.   
  5. while ($server_extract = mysql_fetch_assoc($server_query)) {  
  6.   
  7. $server_id = $server_extract['server_id'];  
  8.   
  9. $server_status_adress = $server_extract['server_status_adress'];  
  10. $server_status_port = $server_extract['server_status_port'];  
  11. $server_status_xml = $server_extract['server_status_xml'];  
  12.   
  13. $server_adress = $server_status_adress;  
  14. $server_port = $server_status_port;  
  15.   
  16. $f = @fsockopen($server_adress$server_port$errno$errstr, 2);  
  17.   
  18. if (!f) {  
  19. $server_online = 0;  
  20. }  
  21.   
  22. if ($f) {  
  23. $server_online = 1;  
  24. $query = "GET /$server_status_xml\r\n";  
  25. $query .= "Host: sylvanas.kani.hu\r\n\r\n";  
  26.   
  27. function xml_extract() {  
  28. global $f;  
  29. global $xml_site;  
  30. $rows = 0;  
  31.   
  32. while ($xml_rows = fgets($f, 4048)) {  
  33.   
  34. if ($rows > 5) {  
  35. $xml_site .= $xml_rows;  
  36. }  
  37.   
  38. $rows++;  
  39.   
  40. }  
  41.   
  42. }  
  43.   
  44. fwrite($f$query);  
  45.   
  46. xml_extract();  
  47.   
  48. $parser = xml_parser_create();  
  49.   
  50. xml_set_element_handler($parser"start_tag""end_tag");  
  51. xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);  
  52.   
  53. $xml = $xml_site;  
  54.   
  55. $xml = utf8_decode($xml);  
  56.   
  57.   
  58. function start_tag($parser$tag$type) {  
  59. global $player_count;  
  60.   
  61. if ($tag == "player") {  
  62. $player_count++;  
  63. }  
  64.   
  65. }  
  66.   
  67. function end_tag($parser$tag) {  
  68.   
  69. }  
  70.   
  71. function chd_tag($parser$tag) {  
  72.   
  73. }  
  74.   
  75. xml_parse($parser$xml);  
  76.   
  77. xml_parser_free($parser);  
  78.   
  79. if ($f) {  
  80.   
  81. if (isset($player_count)) {  
  82. $server_online_users = $player_count;  
  83. }  
  84.   
  85. elseif (!isset($player_count)) {  
  86. $server_online_users = 0;  
  87. }  
  88.   
  89. }  
  90.   
  91. }  
  92.   
  93. if ($server_online == 0) {  
  94. $server_online_users = '0';  
  95. }  
  96.   
  97. mysql_query("UPDATE servers SET server_online='$server_online', server_online_users='$server_online_users' WHERE server_id='$server_id'");  
  98.   
  99. }  
  100.   
  101.   
  102. ?>  
Előre is köszönöm.
 
1

csak néhány tanács

breakline · 2006. Jún. 29. (Cs), 03.41
Szia

Bár a problémára a megoldást nem (biztos hogy) tudom, azt nem igazán értem, miért deklarálsz függvényeket egy cikluson belül. Erre hibaüzeneteket kéne kapnod (hacsak nem lőtted ki), mert most egy hasonlót gyorsan leírva:
  1. <?php  
  2. $i=0;  
  3. while ($i<5)   
  4.  {  
  5. function do_this ()   
  6.  {  
  7. echo "functions well";  
  8. }  
  9. }  
  10. ?>  
ezt kapom:
Fatal error: Cannot redeclare do_that() (previously declared in C:\Main\Webdev\xampp\htdocs\webdev\phptest\while.php:8) in C:\Main\Webdev\xampp\htdocs\webdev\phptest\while.php on line 6

Mivel te fent annyiszor létrehozol egy függvényt (vagy többet), ahány sort visszaad a lekérdezés, ezért neked is valami hasonlót kéne kapnod. Függvényt egyszer kell deklarálni.
Másik:

Ha függvényt írsz, ehelyett:
function xml_extract() {
global $f;
global $xml_site;
}

inkább így (csak kényelmi és átláthatóság miatt, meg hogy ne legyen kavarodás):
function xml_extract($f,$xml_site) {
}


Az if ($f) kétszer is előfordul, egymásba ágyazva:
  1. if ($f) {  
  2. $server_online = 1;  
  3. $query = "GET /$server_status_xml\r\n";  
  4. $query .= "Host: sylvanas.kani.hu\r\n\r\n";  
  5. //.........  
  6. if ($f) {  
  7. if (isset($player_count))  
  8. //........  
  9. }  
  10. }  
üdv
BL
2

ok, köszi

Anonymous · 2006. Jún. 30. (P), 00.14
ok....

kössz...

igazad van, télleg nem szabad ciklusban függvényt kreálni...

kössz még1x, de sajnos a problémámat nem oldotta meg, de nem baj azért kössz és a tanácsokat is...