Здравствуйте. Написал Cron файл. Для обновление информации о серверах в базе. Содержимое файла Код (Text): require_once "config.php"; require_once "include/rus_name_fix.php"; require_once "include/constants.php"; $link = dbconnect($db_host, $db_user, $db_pass, $db_name); require_once "include/function.php"; $servers = dbquery("SELECT * FROM ".DB_SERVERS); while($r=dbarray_fetch($servers)) { $serv=serverInfo("$r[server_ip]"); //Сбор информации о игроках $players_info=A2S_PLAYER("$r[server_ip]"); if (!$players_info) { echo '<br>Сервер недоступен.<br>'; }else{ $players_name = join("<br>",$players_info['Player Name']); $players_kills = join("<br>",$players_info['Kills']); $id_players_full = $players_info['Num Players']; $x=0; while ($x++<$id_players_full) $id_full .= "<br>".$x; } if($serv['players'] == 0){ $players_name = '0'; $players_kills = '0'; $id_full = '0'; }else{ } //Сбор информации о игроках if($serv['status']==''){ $result = dbquery("UPDATE amx_servers SET `server_name`='Server Is OFF Line', `server_status`='0', `server_map`='', `server_players`='0', `server_maxplayers`='0' WHERE server_id='".$r['server_id']."'"); continue;} $name = name_filtered($serv['name']); $result = dbquery(" UPDATE amx_servers SET players_kills = '".$players_kills."', players_name = '".$players_name."', players_id = '".$id_full."', server_name = '".$name."', server_map = '".$serv['map']."', server_windows = '".$serv['os']."', server_ping = '".$serv['ping']."', server_players = '".$serv['players']."', server_game='".$serv['version']."_".$serv['game']."', server_maxplayers = '".$serv['max_players']."', server_status = '1' WHERE server_id='".$r['server_id']."' "); if($result) {echo "<font color='green'>Даные сервера с порядковым ".$r['server_id']." внесены в базу данных</font>";} else {echo "<font color='red'><b>Ошибка</b>, данные сервера с порядковым ".$r['server_id']." не были внесены в БД</font>";} echo "<br>"; } $date_proverka = date("d-m-Y: G:i:s",time()); // запоминаем дату $result = dbquery("UPDATE amx_servers SET server_date_cron = '".$date_proverka."'"); // MySQL функции function dbquery($query) { $result = @mysql_query($query); if (!$result) { echo mysql_error(); return false; } else { return $result; } } function dbarray_fetch($query) { $result = @mysql_fetch_array($query); if (!$result) { echo mysql_error(); return false; } else { return $result; } } function dbconnect($db_host, $db_user, $db_pass, $db_name) { $db_connect = @mysql_connect($db_host, $db_user, $db_pass); $db_select = @mysql_select_db($db_name); if (!$db_connect) { die("<div style='font-family:Verdana;font-size:11px;text-align:center;'><b>Не могу подключиться к MySQL</b><br />".mysql_errno()." : ".mysql_error()."</div>"); } elseif (!$db_select) { die("<div style='font-family:Verdana;font-size:11px;text-align:center;'><b>НЕ могу подключиться к MySQL базе данных</b><br />".mysql_errno()." : ".mysql_error()."</div>"); } } mysql_close(); Все работало отлично. Решил добавить сбор информации о игроках сервера. Вот что добавил Код (Text): //Сбор информации о игроках $players_info=A2S_PLAYER("$r[server_ip]"); if (!$players_info) { echo '<br>Сервер недоступен.<br>'; }else{ $players_name = join("<br>",$players_info['Player Name']); $players_kills = join("<br>",$players_info['Kills']); $id_players_full = $players_info['Num Players']; $x=0; while ($x++<$id_players_full) $id_full .= "<br>".$x; } if($serv['players'] == 0){ $players_name = '0'; $players_kills = '0'; $id_full = '0'; }else{ } //Сбор информации о игроках Далее заношу информацию в базу. Код (Text): players_kills = '".$players_kills."', players_name = '".$players_name."', players_id = '".$id_full."', server_name = '".$name."', Обращаюсь к файлу по прямому адресу, после обновления выдает очень много ошибок. Код (Text): Warning: join() [function.join]: Invalid arguments passed in /home/wm5142/domains/gameamx.ru/public_html/host/cron.php on line 30 Даные сервера с порядковым 49 внесены в базу данных Даные сервера с порядковым 51 внесены в базу данных You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Na'Nik yaver 2pack CSM POMJkE^2h Sonic', players_id = '0 1 ' at line 4Ошибка, данные сервера с порядковым 52 не были внесены в БД You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'KApAmeLbkA 4To dud3 little mouse Real_Steel*[TM]>RubiLoVo #69# ZI' at line 4Ошибка, данные сервера с порядковым 53 не были внесены в БД Warning: join() [function.join]: Invalid arguments passed in /home/wm5142/domains/gameamx.ru/public_html/host/cron.php on line 29 Если сделать принт $players_info=A2S_PLAYER("$r[server_ip]"); Выводит Код (Text): Array ( [Type] => D [Num Players] => 26 [Index] => Array ( [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 0 [8] => 0 [9] => 0 [10] => 0 [11] => 0 [12] => 0 [13] => 0 [14] => 0 [15] => 0 [16] => 0 [17] => 0 [18] => 0 [19] => 0 [20] => 0 [21] => 0 [22] => 0 [23] => 0 [24] => 0 [25] => 0 [26] => 0 ) [Player Name] => Array ( [1] => NSK|89 REGION [2] => by*3a*6ok [3] => Amon [4] => DestroyeD [5] => NIKE [6] => NooB))ee^ [7] => fire-dance [8] => VGASU |Immortal [9] => AV`17# Falon /A/ [10] => 2112sd [11] => 8**BeTePuHaP**8 [12] => BELIY [13] => nova_Mys [14] => reakciya mangoosta [15] => LIITYRMON [16] => {KIPISH} [17] => [ANTIMAT]Nick deleted [18] => Penis Neposeda [19] => cTpouTeJIb [20] => unnamed [21] => .::V.L.A.D::. [22] => [No-MauS]BOBER;! [23] => SATAN [24] => Lambada [25] => max007 [26] => A1enkaaaaaaa ) [Kills] => Array ( [1] => 17 [2] => 4 [3] => 10 [4] => 0 [5] => 9 [6] => 1 [7] => 15 [8] => 14 [9] => 0 [10] => 3 [11] => 1 [12] => 1 [13] => 0 [14] => 0 [15] => 0 [16] => 3 [17] => 0 [18] => 0 [19] => 13 [20] => 8 [21] => 0 [22] => 0 [23] => 3 [24] => 4 [25] => 1 [26] => 0 ) [Time connected] => Array ( [1] => 2666.125 [2] => 287.65625 [3] => 3096.3828125 [4] => 744.140625 [5] => 677.359375 [6] => 94.5546875 [7] => 727.24609375 [8] => 1088.93359375 [9] => 94.37109375 [10] => 425.5234375 [11] => 250.5703125 [12] => 247.96875 [13] => 39.265625 [14] => 32.578125 [15] => 21.4296875 [16] => 138.5546875 [17] => 100.58203125 [18] => 631.0546875 [19] => 1162.04296875 [20] => 831.75 [21] => 20.55859375 [22] => 19.4375 [23] => 221.1328125 [24] => 445.625 [25] => 801.1640625 [26] => 454.77734375 ) ) Если сервер не доступен и от него не удается получить информацию, то на выходе получаем. Нечего. Пустое значение. Как правильно реализовать вывод из массива array и запись в базу.?? Подскажите пожалуйста.
Код (Text): Warning: join() [function.join]: Invalid arguments passed in /home/wm5142/domains/gameamx.ru/public_html/host/cron.php on line 30 join() - это псевдоним implode() и принимает первым параметром строку, вторым - массив(по сути не важна последовательность, обьяснение на php.net). А вы видимо посылаете 2 строки и результат который вы хотите получить в строке Код (Text): $players_name = join("<br>",$players_info['Player Name']) получается через обычную конкатенацию Код (Text): $players_name = "<br>".$players_info['Player Name'];) Код (Text): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Na'Nik Na'Nik - кавычка ломает вам запрос. Каждую вносимую строку нужно прогнать через addslashes(), каждое число через intval() - это всё например, вам нужно прочитать про безопасные mysql запросы.
Код (Text): $players_name = "<br>".$players_info['Player Name'];) Выводит только первое значение. Код (Text): [Player Name] => Array ( [1] => NSK|89 REGION на выходи получаю NSK|89 REGION А нужно все значения. То есть все ники игроков. 'Na'Nik Это ник игрока такой. Спасибо, прогоню. Не подумал.. Так как теперь вывести все из [Player Name] ?? А не один ник. $players_name = "<br>".$players_info['Player Name']; выводит только Array И все.
Ага, там всё-таки массив. Код (Text): $players_name = implode("<br>",$players_info['Player Name']); Попробуй это. Если ошибка не исчезнет, тогда так Код (Text): if(isset($players_info['Player Name'])){$players_name = implode("<br>",$players_info['Player Name']);}
Код (Text): $players_name = implode("<br>",$players_info['Player Name']); Аналогично моему методу Код (Text): $players_name = join("<br>",$players_info['Player Name']) А вот Код (Text): if(isset($players_info['Player Name'])){$players_name = implode("<br>",$players_info['Player Name']);} Ошибок не выдает если массив пустой. Сейчас перестрою код, посмотрю. Добавлено спустя 15 минут 3 секунды: Спасибо большое. Все данные внесены корректно. без единой ошибки.
Ну вы кинули дамп массива и я подумал что именно на этом дампе происходит ошибка. Да, если массив пустой или его вообще нет, то будет ошибка, так что перед использованием элемента массива нужно проверять его наличие если того требует логика кода. Всегда пожалуйста =)