За последние 24 часа нас посетили 59372 программиста и 1835 роботов. Сейчас ищут 950 программистов ...

Ошибки при добавлении в базу.

Тема в разделе "PHP и базы данных", создана пользователем 715kg, 2 мар 2013.

  1. 715kg

    715kg Активный пользователь

    С нами с:
    2 мар 2013
    Сообщения:
    147
    Симпатии:
    0
    Здравствуйте. Написал Cron файл. Для обновление информации о серверах в базе.
    Содержимое файла

    Код (Text):
    1. require_once "config.php";
    2. require_once "include/rus_name_fix.php";
    3. require_once "include/constants.php";
    4. $link = dbconnect($db_host, $db_user, $db_pass, $db_name);
    5. require_once "include/function.php";
    6. $servers = dbquery("SELECT * FROM ".DB_SERVERS);
    7. while($r=dbarray_fetch($servers)) {
    8. $serv=serverInfo("$r[server_ip]");
    9.  
    10. //Сбор информации о игроках
    11. $players_info=A2S_PLAYER("$r[server_ip]");
    12. if (!$players_info) {
    13.     echo '<br>Сервер недоступен.<br>';
    14. }else{
    15. $players_name = join("<br>",$players_info['Player Name']);
    16. $players_kills = join("<br>",$players_info['Kills']);  
    17. $id_players_full = $players_info['Num Players'];
    18. $x=0;
    19. while ($x++<$id_players_full) $id_full .= "<br>".$x;
    20. }
    21. if($serv['players'] == 0){
    22. $players_name = '0';
    23. $players_kills = '0';
    24. $id_full = '0';
    25. }else{
    26. }
    27. //Сбор информации о игроках
    28.  
    29. if($serv['status']==''){
    30. $result = dbquery("UPDATE amx_servers
    31.     SET
    32.         `server_name`='Server Is OFF Line',
    33.         `server_status`='0',
    34.                 `server_map`='',               
    35.         `server_players`='0',
    36.         `server_maxplayers`='0'
    37.     WHERE server_id='".$r['server_id']."'");
    38. continue;}
    39. $name = name_filtered($serv['name']);
    40. $result = dbquery("
    41. UPDATE amx_servers
    42.   SET
    43. players_kills = '".$players_kills."',
    44. players_name = '".$players_name."',
    45. players_id = '".$id_full."',
    46. server_name = '".$name."',
    47.     server_map = '".$serv['map']."',
    48.     server_windows = '".$serv['os']."',
    49.     server_ping = '".$serv['ping']."',
    50.     server_players = '".$serv['players']."',
    51.     server_game='".$serv['version']."_".$serv['game']."',
    52.     server_maxplayers = '".$serv['max_players']."',
    53.     server_status = '1'
    54.    WHERE server_id='".$r['server_id']."'
    55. ");
    56. if($result) {echo "<font color='green'>Даные сервера с порядковым ".$r['server_id']." внесены в базу данных</font>";} else {echo "<font color='red'><b>Ошибка</b>, данные сервера с порядковым ".$r['server_id']." не были внесены в БД</font>";}
    57. echo "<br>";
    58. }
    59. $date_proverka = date("d-m-Y: G:i:s",time()); // запоминаем дату
    60. $result = dbquery("UPDATE amx_servers SET server_date_cron = '".$date_proverka."'");
    61.  
    62. // MySQL функции
    63. function dbquery($query) {
    64.     $result = @mysql_query($query);
    65.     if (!$result) {
    66.         echo mysql_error();
    67.         return false;
    68.     } else {
    69.         return $result;
    70.     }
    71. }
    72. function dbarray_fetch($query) {
    73.     $result = @mysql_fetch_array($query);
    74.     if (!$result) {
    75.         echo mysql_error();
    76.         return false;
    77.     } else {
    78.         return $result;
    79.     }
    80. }
    81. function dbconnect($db_host, $db_user, $db_pass, $db_name) {
    82.     $db_connect = @mysql_connect($db_host, $db_user, $db_pass);
    83.     $db_select = @mysql_select_db($db_name);
    84.     if (!$db_connect) {
    85.         die("<div style='font-family:Verdana;font-size:11px;text-align:center;'><b>Не могу подключиться к MySQL</b><br />".mysql_errno()." : ".mysql_error()."</div>");
    86.     } elseif (!$db_select) {
    87.         die("<div style='font-family:Verdana;font-size:11px;text-align:center;'><b>НЕ могу подключиться к MySQL базе данных</b><br />".mysql_errno()." : ".mysql_error()."</div>");
    88.     }
    89. }
    90.  
    91. mysql_close();
    Все работало отлично. Решил добавить сбор информации о игроках сервера.

    Вот что добавил

    Код (Text):
    1. //Сбор информации о игроках
    2. $players_info=A2S_PLAYER("$r[server_ip]");
    3. if (!$players_info) {
    4.     echo '<br>Сервер недоступен.<br>';
    5. }else{
    6. $players_name = join("<br>",$players_info['Player Name']);
    7. $players_kills = join("<br>",$players_info['Kills']);  
    8. $id_players_full = $players_info['Num Players'];
    9. $x=0;
    10. while ($x++<$id_players_full) $id_full .= "<br>".$x;
    11. }
    12. if($serv['players'] == 0){
    13. $players_name = '0';
    14. $players_kills = '0';
    15. $id_full = '0';
    16. }else{
    17. }
    18. //Сбор информации о игроках
    Далее заношу информацию в базу.

    Код (Text):
    1. players_kills = '".$players_kills."',
    2. players_name = '".$players_name."',
    3. players_id = '".$id_full."',
    4. server_name = '".$name."',
    Обращаюсь к файлу по прямому адресу, после обновления выдает очень много ошибок.

    Код (Text):
    1. Warning: join() [function.join]: Invalid arguments passed in /home/wm5142/domains/gameamx.ru/public_html/host/cron.php on line 30
    2. Даные сервера с порядковым 49 внесены в базу данных
    3. Даные сервера с порядковым 51 внесены в базу данных
    4. 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
    5. yaver
    6. 2pack
    7. CSM
    8. POMJkE^2h
    9. Sonic', players_id = '0
    10. 1
    11. ' at line 4Ошибка, данные сервера с порядковым 52 не были внесены в БД
    12. 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
    13. 4To
    14. dud3
    15. little mouse
    16. Real_Steel*[TM]>RubiLoVo #69#
    17. ZI' at line 4Ошибка, данные сервера с порядковым 53 не были внесены в БД
    18.  
    19. 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):
    1. Array
    2. (
    3.     [Type] => D
    4.     [Num Players] => 26
    5.     [Index] => Array
    6.         (
    7.             [1] => 0
    8.             [2] => 0
    9.             [3] => 0
    10.             [4] => 0
    11.             [5] => 0
    12.             [6] => 0
    13.             [7] => 0
    14.             [8] => 0
    15.             [9] => 0
    16.             [10] => 0
    17.             [11] => 0
    18.             [12] => 0
    19.             [13] => 0
    20.             [14] => 0
    21.             [15] => 0
    22.             [16] => 0
    23.             [17] => 0
    24.             [18] => 0
    25.             [19] => 0
    26.             [20] => 0
    27.             [21] => 0
    28.             [22] => 0
    29.             [23] => 0
    30.             [24] => 0
    31.             [25] => 0
    32.             [26] => 0
    33.         )
    34.  
    35.     [Player Name] => Array
    36.         (
    37.             [1] => NSK|89 REGION
    38.             [2] => by*3a*6ok
    39.             [3] => Amon
    40.             [4] => DestroyeD
    41.             [5] => NIKE
    42.             [6] => NooB))ee^
    43.             [7] => fire-dance
    44.             [8] => VGASU |Immortal
    45.             [9] => AV`17# Falon /A/
    46.             [10] => 2112sd
    47.             [11] => 8**BeTePuHaP**8
    48.             [12] => BELIY
    49.             [13] => nova_Mys
    50.             [14] => reakciya mangoosta
    51.             [15] => LIITYRMON
    52.             [16] => {KIPISH}
    53.             [17] => [ANTIMAT]Nick deleted
    54.             [18] => Penis Neposeda
    55.             [19] => cTpouTeJIb
    56.             [20] => unnamed
    57.             [21] => .::V.L.A.D::.
    58.             [22] => [No-MauS]BOBER;!
    59.             [23] => SATAN
    60.             [24] => Lambada
    61.             [25] => max007
    62.             [26] => A1enkaaaaaaa
    63.         )
    64.  
    65.     [Kills] => Array
    66.         (
    67.             [1] => 17
    68.             [2] => 4
    69.             [3] => 10
    70.             [4] => 0
    71.             [5] => 9
    72.             [6] => 1
    73.             [7] => 15
    74.             [8] => 14
    75.             [9] => 0
    76.             [10] => 3
    77.             [11] => 1
    78.             [12] => 1
    79.             [13] => 0
    80.             [14] => 0
    81.             [15] => 0
    82.             [16] => 3
    83.             [17] => 0
    84.             [18] => 0
    85.             [19] => 13
    86.             [20] => 8
    87.             [21] => 0
    88.             [22] => 0
    89.             [23] => 3
    90.             [24] => 4
    91.             [25] => 1
    92.             [26] => 0
    93.         )
    94.  
    95.     [Time connected] => Array
    96.         (
    97.             [1] => 2666.125
    98.             [2] => 287.65625
    99.             [3] => 3096.3828125
    100.             [4] => 744.140625
    101.             [5] => 677.359375
    102.             [6] => 94.5546875
    103.             [7] => 727.24609375
    104.             [8] => 1088.93359375
    105.             [9] => 94.37109375
    106.             [10] => 425.5234375
    107.             [11] => 250.5703125
    108.             [12] => 247.96875
    109.             [13] => 39.265625
    110.             [14] => 32.578125
    111.             [15] => 21.4296875
    112.             [16] => 138.5546875
    113.             [17] => 100.58203125
    114.             [18] => 631.0546875
    115.             [19] => 1162.04296875
    116.             [20] => 831.75
    117.             [21] => 20.55859375
    118.             [22] => 19.4375
    119.             [23] => 221.1328125
    120.             [24] => 445.625
    121.             [25] => 801.1640625
    122.             [26] => 454.77734375
    123.         )
    124.  
    125. )
    Если сервер не доступен и от него не удается получить информацию, то на выходе получаем. Нечего. Пустое значение. Как правильно реализовать вывод из массива array и запись в базу.?? Подскажите пожалуйста.
     
  2. siiXth

    siiXth Активный пользователь

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    Код (Text):
    1. 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):
    1. $players_name = join("<br>",$players_info['Player Name'])
    получается через обычную конкатенацию
    Код (Text):
    1. $players_name = "<br>".$players_info['Player Name'];)
    Код (Text):
    1. 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 запросы.
     
  3. 715kg

    715kg Активный пользователь

    С нами с:
    2 мар 2013
    Сообщения:
    147
    Симпатии:
    0
    Код (Text):
    1. $players_name = "<br>".$players_info['Player Name'];)
    Выводит только первое значение.

    Код (Text):
    1. [Player Name] => Array
    2.         (
    3.             [1] => NSK|89 REGION
    на выходи получаю NSK|89 REGION
    А нужно все значения. То есть все ники игроков. 'Na'Nik Это ник игрока такой. Спасибо, прогоню. Не подумал..

    Так как теперь вывести все из [Player Name] ?? А не один ник.



    $players_name = "<br>".$players_info['Player Name']; выводит только Array И все.
     
  4. siiXth

    siiXth Активный пользователь

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    Ага, там всё-таки массив.
    Код (Text):
    1. $players_name = implode("<br>",$players_info['Player Name']);
    Попробуй это.

    Если ошибка не исчезнет, тогда так
    Код (Text):
    1. if(isset($players_info['Player Name'])){$players_name = implode("<br>",$players_info['Player Name']);}
     
  5. 715kg

    715kg Активный пользователь

    С нами с:
    2 мар 2013
    Сообщения:
    147
    Симпатии:
    0
    Код (Text):
    1. $players_name = implode("<br>",$players_info['Player Name']);
    Аналогично моему методу
    Код (Text):
    1. $players_name = join("<br>",$players_info['Player Name'])
    А вот
    Код (Text):
    1. if(isset($players_info['Player Name'])){$players_name = implode("<br>",$players_info['Player Name']);}
    Ошибок не выдает если массив пустой.

    Сейчас перестрою код, посмотрю.

    Добавлено спустя 15 минут 3 секунды:
    Спасибо большое. Все данные внесены корректно. без единой ошибки.
     
  6. siiXth

    siiXth Активный пользователь

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    Ну вы кинули дамп массива и я подумал что именно на этом дампе происходит ошибка. Да, если массив пустой или его вообще нет, то будет ошибка, так что перед использованием элемента массива нужно проверять его наличие если того требует логика кода.
    Всегда пожалуйста =)