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?

<?php

$server_query = mysql_query("SELECT server_id, server_status_adress, server_status_port, server_status_xml FROM servers");

while ($server_extract = mysql_fetch_assoc($server_query)) {

$server_id = $server_extract['server_id'];

$server_status_adress = $server_extract['server_status_adress'];
$server_status_port = $server_extract['server_status_port'];
$server_status_xml = $server_extract['server_status_xml'];

$server_adress = $server_status_adress;
$server_port = $server_status_port;

$f = @fsockopen($server_adress, $server_port, $errno, $errstr, 2);

if (!f) {
$server_online = 0;
}

if ($f) {
$server_online = 1;
$query = "GET /$server_status_xml\r\n";
$query .= "Host: sylvanas.kani.hu\r\n\r\n";

function xml_extract() {
global $f;
global $xml_site;
$rows = 0;

while ($xml_rows = fgets($f, 4048)) {

if ($rows > 5) {
$xml_site .= $xml_rows;
}

$rows++;

}

}

fwrite($f, $query);

xml_extract();

$parser = xml_parser_create();

xml_set_element_handler($parser, "start_tag", "end_tag");
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);

$xml = $xml_site;

$xml = utf8_decode($xml);


function start_tag($parser, $tag, $type) {
global $player_count;

if ($tag == "player") {
$player_count++;
}

}

function end_tag($parser, $tag) {

}

function chd_tag($parser, $tag) {

}

xml_parse($parser, $xml);

xml_parser_free($parser);

if ($f) {

if (isset($player_count)) {
$server_online_users = $player_count;
}

elseif (!isset($player_count)) {
$server_online_users = 0;
}

}

}

if ($server_online == 0) {
$server_online_users = '0';
}

mysql_query("UPDATE servers SET server_online='$server_online', server_online_users='$server_online_users' WHERE server_id='$server_id'");

}


?>
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:

<?php
$i=0;
while ($i<5) 
 {
function do_this () 
 {
echo "functions well";
}
}
?>
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:

if ($f) {
$server_online = 1;
$query = "GET /$server_status_xml\r\n";
$query .= "Host: sylvanas.kani.hu\r\n\r\n";
//.........
if ($f) {
if (isset($player_count))
//........
}
}
ü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...