A while lefut csak az első futs értékeit használja
Ü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?Előre is köszönöm.
■ 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'");
}
?>
csak néhány tanács
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:
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:
BL
ok, köszi
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...