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...