За последние 24 часа нас посетили 60904 программиста и 1744 робота. Сейчас ищут 1554 программиста ...

Из .txt в mysql

Тема в разделе "PHP для новичков", создана пользователем 6stPROD, 7 фев 2013.

  1. 6stPROD

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

    С нами с:
    6 фев 2013
    Сообщения:
    124
    Симпатии:
    0
    Адрес:
    Тутаев, Ярославская область. Российская Федерация
    Мне нужно импортировать мой текстовый файл с расширением .txt в mysql напрямую или через php. В текстовом файле в каждой строке текст. Как посоветуете решить это задачу?

    Функцию чтения я реализовал

    Код (Text):
    1. <?php
    2.     $f = fopen("C:\Games\Counter-Strike 1.6\cstrike\addons\amxmodx\logs\allinfo_players.txt", "r");
    3.     // Читать построчно до конца файла
    4.     while(!feof($f)) {
    5.         echo fgets($f) . "<br />";
    6.     }
    7.     fclose($f);
    8.     ?>
    нужно чтобы этот файл попал в базу, а от туда я буду брать информацию в шаблон сайта для вывода данных об игроках

    * Дополняю вопрос:

    Возможно ли постоянно очищать программно текстовый файл, или записи mysql при выключении сервера, или же читать данные по игрокам за последнее время?

    Код (Text):
    1.  
    2. L 02/07/2013 - 19:17:51: KaPaHgaLLI | STEAMID: BOT | IP: 127.0.0.1
    3.  
    4. L 02/07/2013 - 19:17:52: Devil | STEAMID: BOT | IP: 127.0.0.1
    5.  
    6. L 02/07/2013 - 19:17:52: BlackJ@CK | STEAMID: BOT | IP: 127.0.0.1
    сам файл выглядит вот так

    Добавлено спустя 43 минуты 23 секунды:
    Код (Text):
    1. <?php
    2. // читаем файл в массив
    3. $fopen=@file("id.txt");
    4. // номер строки (напоминаем, что php считает с 0,
    5. //т.е. данный скрипт выведет вторую строку)
    6. $need="1";  
    7. print $fopen[$need];
    8.  
    9. // или сразу
    10. print "$fopen[1]";
    11. ?>
    Как вывести несколько последних строк после (L 02/07/2013 - 19:17:51:) ??
     
  2. Swapf

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

    С нами с:
    8 окт 2012
    Сообщения:
    82
    Симпатии:
    0
    Адрес:
    Россия, Самарская обл, Сызрань
    Не вижу никаких проблем. Сначала каждую строку разбиваешь на массив строк, где признаком разделения является символ '|' , затем для каждого элемента такого массива array('L 02/07/2013 - 19:17:51: KaPaHgaLLI', 'STEAMID: BOT ', 'IP: 127.0.0.1') делаешь тоже разбиения только по другим критериям, таким как ':' для 2 и 3 элемента и для 1 элемента чуть-чуть сложнее. Дату со временем можешь преобразовать в unix-формат или datetime. Таким образом ты вычленишь нужные данные из строки, такие как дата и время, логин, стимид и айпи. И с этим уже можешь формировать строку для одного большого инсерта всех записей в mysql. На счет доп. вопроса - можешь отбирать и сортировать, например, по дате.
     
  3. 6stPROD

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

    С нами с:
    6 фев 2013
    Сообщения:
    124
    Симпатии:
    0
    Адрес:
    Тутаев, Ярославская область. Российская Федерация
    Если честно я новичек в этом деле, поэтому для меня как раз это и есть проблемка) я даже не знаю как это реализовать

    Добавлено спустя 15 минут 5 секунд:
    Код (Text):
    1. <?php
    2. $fp = 'C:\Games\Counter-Strike 1.6\cstrike\addons\amxmodx\logs\allinfo_players.txt';
    3. $file = array_reverse(file($fp));
    4. for($i=0; $i<25; $i++)
    5. {
    6.     echo $file[$i];
    7. }
    8.  
    9. ?>
    сделал так, но выводит не по списку через <br> а все подряд, помогите переписать

    Добавлено спустя 44 минуты 37 секунд:
    Или хотябы подсказать как выводить строку, убрезая на несколько символов вначале?
     
  4. Swapf

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

    С нами с:
    8 окт 2012
    Сообщения:
    82
    Симпатии:
    0
    Адрес:
    Россия, Самарская обл, Сызрань
    ОК. Лови решение. Проверил - работает.

    SQL:
    Код (Text):
    1. CREATE TABLE `tbl_logs` (
    2.   `id` int(11) NOT NULL AUTO_INCREMENT,
    3.   `log_date` int(20) NOT NULL,        
    4.   `username` varchar(50),
    5.   `steamid` varchar(50),
    6.   `hostname` int(16),
    7.   PRIMARY KEY (`id`)
    8. ) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
    PHP:
    Код (Text):
    1. <?php
    2. mysql_connect("localhost", "root", "");
    3. mysql_select_db("one");
    4.  
    5. $f = fopen('log.txt', 'r');
    6.  
    7. $sql = array();
    8. while(!feof($f))
    9. {
    10.     $row = fgets($f);
    11.     $data = explode("|", $row);
    12.    
    13.     $date_time_and_username_src = $data[0];
    14.     $date_time = explode("-", $date_time_and_username_src);
    15.     $date = substr($date_time[0], 2);
    16.     $time_username = $date_time[1];
    17.     $time_username = explode(":", $time_username);
    18.     $h = trim($time_username[0]);
    19.     $m = trim($time_username[1]);
    20.     $s = trim($time_username[2]);
    21.     $username = trim($time_username[3]);
    22.     $date = explode("/", $date);
    23.     $y = trim($date[2]);
    24.     $month = trim($date[0]);
    25.     $d = trim($date[1]);
    26.     $sid = explode(":", $data[1]);
    27.     $ip = explode(":", $data[2]);
    28.     $sid = trim($sid[1]);
    29.     $ip = trim($ip[1]);
    30.    
    31.     echo "Год ".$y."<br>";
    32.     echo "Месяц ".$month."<br>";
    33.     echo "Число ".$d."<br>";
    34.     echo "Часов ".$h."<br>";
    35.     echo "Минут ".$m."<br>";
    36.     echo "Секунд ".$s."<br>";
    37.     echo "Пользователь ".$username."<br>";
    38.     echo "STEAMID ".$sid."<br>";
    39.     echo "IP ".$ip."<br>";
    40.     echo "<hr>";
    41.     //2010-02-06 19:30:13
    42.     $sql[] = '("'.$y.'-'.$month.'-'.$d.' '.h.':'.$m.':'.$s.'", "'.$username.'", "'.$sid.'", "'.$ip.'")';
    43.    
    44. }
    45. fclose($f);
    46. echo implode(',', $sql);
    47. mysql_query('INSERT INTO tbl_logs (log_date, username, steamid, hostname) VALUES'.implode(',', $sql));
    48.  
    49. ?>
    Проверь. Вроде все работает. Конечно, не самое элегантное решение, да и проверок наго навтыкать. А это так навскидку, за часок накидал. Доработаешь - и все будет ОК.

    выбрать все сегодняшние логи:
    Код (Text):
    1. select * from tbl_logs where DATE(log_date) = CURDATE()
     
  5. 6stPROD

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

    С нами с:
    6 фев 2013
    Сообщения:
    124
    Симпатии:
    0
    Адрес:
    Тутаев, Ярославская область. Российская Федерация
    Спасибо! Данные попадают в базу, но с ошибками и как то вообще странно, а при открытии файла с этим скриптом куча ошибок но тем не менее выводит

    Вот пример:
    Код (Text):
    1. Год 2013
    2. Месяц 02
    3. Число 06
    4. Часов 06
    5. Минут 11
    6. Секунд 31
    7. Пользователь Wol@nd
    8. STEAMID BOT
    9. IP 127.0.0.1
    10.  
    11. ( ! ) Notice: Use of undefined constant h - assumed 'h' in C:\wamp\www\sql_logs.php on line 42
    12. Call Stack
    13. #   Time    Memory  Function    Location
    14. 1   0.0006  391184  {main}( )   ..\sql_logs.php:0
    15.  
    16. ( ! ) Notice: Undefined offset: 1 in C:\wamp\www\sql_logs.php on line 16
    17. Call Stack
    18. #   Time    Memory  Function    Location
    19. 1   0.0006  391184  {main}( )   ..\sql_logs.php:0
    20.  
    21. ( ! ) Notice: Undefined offset: 1 in C:\wamp\www\sql_logs.php on line 19
    22. Call Stack
    23. #   Time    Memory  Function    Location
    24. 1   0.0006  391184  {main}( )   ..\sql_logs.php:0
    25.  
    26. ( ! ) Notice: Undefined offset: 2 in C:\wamp\www\sql_logs.php on line 20
    27. Call Stack
    28. #   Time    Memory  Function    Location
    29. 1   0.0006  391184  {main}( )   ..\sql_logs.php:0
    30.  
    31. ( ! ) Notice: Undefined offset: 3 in C:\wamp\www\sql_logs.php on line 21
    32. Call Stack
    33. #   Time    Memory  Function    Location
    34. 1   0.0006  391184  {main}( )   ..\sql_logs.php:0
    35.  
    36. ( ! ) Notice: Undefined offset: 2 in C:\wamp\www\sql_logs.php on line 23
    37. Call Stack
    38. #   Time    Memory  Function    Location
    39. 1   0.0006  391184  {main}( )   ..\sql_logs.php:0
    40.  
    41. ( ! ) Notice: Undefined offset: 1 in C:\wamp\www\sql_logs.php on line 25
    42. Call Stack
    43. #   Time    Memory  Function    Location
    44. 1   0.0006  391184  {main}( )   ..\sql_logs.php:0
    45.  
    46. ( ! ) Notice: Undefined offset: 1 in C:\wamp\www\sql_logs.php on line 26
    47. Call Stack
    48. #   Time    Memory  Function    Location
    49. 1   0.0006  391184  {main}( )   ..\sql_logs.php:0
    50.  
    51. ( ! ) Notice: Undefined offset: 2 in C:\wamp\www\sql_logs.php on line 27
    52. Call Stack
    53. #   Time    Memory  Function    Location
    54. 1   0.0006  391184  {main}( )   ..\sql_logs.php:0
    55.  
    56. ( ! ) Notice: Undefined offset: 1 in C:\wamp\www\sql_logs.php on line 28
    57. Call Stack
    58. #   Time    Memory  Function    Location
    59. 1   0.0006  391184  {main}( )   ..\sql_logs.php:0
    60.  
    61. ( ! ) Notice: Undefined offset: 1 in C:\wamp\www\sql_logs.php on line 29
    62. Call Stack
    63. #   Time    Memory  Function    Location
    64. 1   0.0006  391184  {main}( )   ..\sql_logs.php:0
    Добавлено спустя 2 минуты 24 секунды:
    А в добавок еще и пустых кучу строк создает ((
     
  6. Swapf

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

    С нами с:
    8 окт 2012
    Сообщения:
    82
    Симпатии:
    0
    Адрес:
    Россия, Самарская обл, Сызрань
    Наверное, дело пустых строках. Сбрось мне оригинальный лог-файл. Или на Swapf@mail.ru или сюда в личку(не знаю точно здесь можно файлы прикреплять?). Щас все поправим) Не переживай)

    Добавлено спустя 33 минуты 48 секунд:
    Да, дело в пустых строках. Сделаю - отпишусь

    Добавлено спустя 21 минуту 58 секунд:
    Код (Text):
    1. <?php
    2. mysql_connect("localhost", "root", "");
    3. mysql_select_db("one");
    4.  
    5. $f = fopen('allinfo_players.txt', 'r');
    6.  
    7. $sql = array();
    8. while(!feof($f))
    9. {
    10.     $row = fgets($f);
    11.     //var_dump($row);
    12.     if((strlen($row)==2)||!$row) continue;
    13.     $data = explode("|", $row);
    14.    
    15.     if(count($data)>3)
    16.     {
    17.         $data[0].="|".$data[1];
    18.         $data[1]=$data[2];
    19.         $data[2]=$data[3];
    20.     }
    21.  
    22.     $date_time_and_username_src = $data[0];
    23.     $date_time = explode("-", $date_time_and_username_src);
    24.     $date = substr($date_time[0], 2);
    25.     if(count($date_time)>2)
    26.     {
    27.         $date_time[1].="-".$date_time[2];
    28.     }
    29.     $time_username = $date_time[1];
    30.     $time_username = explode(":", $time_username);
    31.     $h = trim($time_username[0]);
    32.     $m = trim($time_username[1]);
    33.     $s = trim($time_username[2]);
    34.     $username = trim($time_username[3]);
    35.     $date = explode("/", $date);
    36.     $y = trim($date[2]);
    37.     $month = trim($date[0]);
    38.     $d = trim($date[1]);
    39.     $sid = explode(":", $data[1]);
    40.     $ip = explode(":", $data[2]);
    41.     $sid = trim($sid[1]);
    42.     $ip = trim($ip[1]);
    43.    
    44.     echo "Год ".$y."<br>";
    45.     echo "Месяц ".$month."<br>";
    46.     echo "Число ".$d."<br>";
    47.     echo "Часов ".$h."<br>";
    48.     echo "Минут ".$m."<br>";
    49.     echo "Секунд ".$s."<br>";
    50.     echo "Пользователь ".$username."<br>";
    51.     echo "STEAMID ".$sid."<br>";
    52.     echo "IP ".$ip."<br>";
    53.     echo "<hr>";
    54.     $sql[] = '("'.$y.'-'.$month.'-'.$d.' '.$h.':'.$m.':'.$s.'", "'.$username.'", "'.$sid.'", "'.$ip.'")';
    55.    
    56. }
    57. fclose($f);
    58. echo implode(',', $sql);
    59. mysql_query('INSERT INTO tbl_logs (log_date, username, steamid, hostname) VALUES'.implode(',', $sql));
    60.  
    61. ?>
    Добавлено спустя 7 минут 45 секунд:
    Добавил проверку на пустые строки, которые идут в лог-файле через каждую нормальную строку, к тому же у меня была опечатка в одном месте.
    Еще добавил нормальную вставку для пользователей у кого в нике по одному символу "|" или "-". Думаю этого достаточною. Возникнет нужда доработать - пиши.
     
  7. 6stPROD

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

    С нами с:
    6 фев 2013
    Сообщения:
    124
    Симпатии:
    0
    Адрес:
    Тутаев, Ярославская область. Российская Федерация
    Ай спасибо!!!!
    Вопрос - при каждом обращении к скрипту база будет пополняться?
    и какой функцией обеспечить вывод (например 15 последних) данных по типу
    НИК STEAMID IР ДАТА
    ололо 123231 127,0,0,1 дд мм гг
     
  8. Swapf

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

    С нами с:
    8 окт 2012
    Сообщения:
    82
    Симпатии:
    0
    Адрес:
    Россия, Самарская обл, Сызрань
    Да, при каждом обращении с скрипту база будет пополняться. Можно, конечно, с этим что-нибудь придумать, если надо.
    Чтобы выбрать последние 15 свежих записей, то вот:
    Код (Text):
    1. select log_date, username, steamid, hostname from tbl_logs
    2. order by log_date DESC
    3. limit 15
     
  9. 6stPROD

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

    С нами с:
    6 фев 2013
    Сообщения:
    124
    Симпатии:
    0
    Адрес:
    Тутаев, Ярославская область. Российская Федерация
    А пример php скрипта обращения к записям можно?
    Код (Text):
    1. select log_date, username, steamid, hostname from tbl_logs
    2. order by log_date DESC
    3. limit 15
    Это напоминает sql )

    А вот такой вариант - sql_log.php - это мой файл с этим скриптом, я создаю еще один например monitoring.php в него что нужно добавить чтобы monitoring.php обращался к sql_log.php ,который в свою очередь обращается и пополняет базу выдавая последние несколько значений?


    (Я наверное сильно заморочился, прощу прощения за это)
     
  10. Swapf

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

    С нами с:
    8 окт 2012
    Сообщения:
    82
    Симпатии:
    0
    Адрес:
    Россия, Самарская обл, Сызрань
    Это он и есть))
    В принципе ты можешь удалять все записи в таблице перед тем, как вставить новые, или удалять все, кроме тех, что были добавлены за определенный период, или чтобы всего записей было не больше 1000. Или можно сделать еще хитрее. Вообще тут вариантов тьма)
    Единственное ограничения - фантазия)
    А насчет запроса ты спрашивал - чтобы в самом скрипте выводилось?
     
  11. 6stPROD

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

    С нами с:
    6 фев 2013
    Сообщения:
    124
    Симпатии:
    0
    Адрес:
    Тутаев, Ярославская область. Российская Федерация
    http://109.197.254.86/sql_logs.php вот скрипт прощу обратить внимание в самый низ, там вообще бардак, я планирую этот скрипт инклудить к страничке сайта, чтобы он мне показывал часть пользователей, вот и думаю как это реализовать

    Добавлено спустя 2 минуты 40 секунд:
    В принципе я разобрался в выводе данных из txt
    Вот мой код

    Код (Text):
    1. <?php
    2. $strok = 30;
    3. $fp = 'C:\Games\Counter-Strike 1.6\cstrike\addons\amxmodx\logs\allinfo_players.txt';
    4. $array_string =(file($fp, FILE_IGNORE_NEW_LINES));
    5. $vsego = count($array_string) - $strok;
    6. $counter=0;
    7. foreach($array_string as $item){
    8. while($counter >= $vsego) {
    9. echo substr($item,24)."<br>";
    10. break;
    11. }
    12. $counter++;
    13. }
    14. ?>
    Он выводит 15 последних игроков ...а вот как реализовать сам этот скрипт

    Код (Text):
    1. <?php
    2. mysql_connect("localhost", "root", "");
    3. mysql_select_db("one");
    4.  
    5. $f = fopen('allinfo_players.txt', 'r');
    6.  
    7. $sql = array();
    8. while(!feof($f))
    9. {
    10.     $row = fgets($f);
    11.     //var_dump($row);
    12.     if((strlen($row)==2)||!$row) continue;
    13.     $data = explode("|", $row);
    14.    
    15.     if(count($data)>3)
    16.     {
    17.         $data[0].="|".$data[1];
    18.         $data[1]=$data[2];
    19.         $data[2]=$data[3];
    20.     }
    21.  
    22.     $date_time_and_username_src = $data[0];
    23.     $date_time = explode("-", $date_time_and_username_src);
    24.     $date = substr($date_time[0], 2);
    25.     if(count($date_time)>2)
    26.     {
    27.         $date_time[1].="-".$date_time[2];
    28.     }
    29.     $time_username = $date_time[1];
    30.     $time_username = explode(":", $time_username);
    31.     $h = trim($time_username[0]);
    32.     $m = trim($time_username[1]);
    33.     $s = trim($time_username[2]);
    34.     $username = trim($time_username[3]);
    35.     $date = explode("/", $date);
    36.     $y = trim($date[2]);
    37.     $month = trim($date[0]);
    38.     $d = trim($date[1]);
    39.     $sid = explode(":", $data[1]);
    40.     $ip = explode(":", $data[2]);
    41.     $sid = trim($sid[1]);
    42.     $ip = trim($ip[1]);
    43.    
    44.     echo "Год ".$y."<br>";
    45.     echo "Месяц ".$month."<br>";
    46.     echo "Число ".$d."<br>";
    47.     echo "Часов ".$h."<br>";
    48.     echo "Минут ".$m."<br>";
    49.     echo "Секунд ".$s."<br>";
    50.     echo "Пользователь ".$username."<br>";
    51.     echo "STEAMID ".$sid."<br>";
    52.     echo "IP ".$ip."<br>";
    53.     echo "<hr>";
    54.     $sql[] = '("'.$y.'-'.$month.'-'.$d.' '.$h.':'.$m.':'.$s.'", "'.$username.'", "'.$sid.'", "'.$ip.'")';
    55.    
    56. }
    57. fclose($f);
    58. echo implode(',', $sql);
    59. mysql_query('INSERT INTO tbl_logs (log_date, username, steamid, hostname) VALUES'.implode(',', $sql));
    60.  
    61. ?>
    чтобы при инклуде файла с этим скриптом у меня не было слишком много запросов
     
  12. Swapf

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

    С нами с:
    8 окт 2012
    Сообщения:
    82
    Симпатии:
    0
    Адрес:
    Россия, Самарская обл, Сызрань
    все, что в файле sql_log.php кроме тех участков, где идет коннект к mysql и выбирается БД ты можешь оформить в функцию, например, updatelog(). Затем в файле monitoring.php подключить к нему sql_log.php через require_once('sql_log.php'). И все в monitoring.php можешь вызывать функцию обновления логов, ну и в monitoring.php еще добавть
    Код (Text):
    1. $res = mysql_query('select log_date, username, steamid, hostname from tbl_logs
    2. order by log_date DESC
    3. limit 15')
    Думаю, с результатом выборки $res разберешься, что делать.
     
  13. 6stPROD

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

    С нами с:
    6 фев 2013
    Сообщения:
    124
    Симпатии:
    0
    Адрес:
    Тутаев, Ярославская область. Российская Федерация
    Я наверное не так понял
    это содержимое файла monitoring.php
    Код (Text):
    1. <?
    2.  
    3. require_once('sql_log.php')
    4.  
    5. $res = mysql_query('select log_date, username, steamid, hostname from tbl_logs
    6. order by log_date DESC
    7. limit 15')
    8.  
    9. ?>
    выдает чистый экран
     
  14. Swapf

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

    С нами с:
    8 окт 2012
    Сообщения:
    82
    Симпатии:
    0
    Адрес:
    Россия, Самарская обл, Сызрань
    Это не бардак, это рабочий беспорядок, нужная вещь. Если не нравится - закомментируй echo implode(',', $sql) вот так //echo implode(',', $sql); Это касается моего скрипта. А чтобы часто не вызывался - я уже отписал выше - оформи функцией, которая вызывается, если в УРЛе $_GET['update']=true&secure_key=знаешь_только_ты_и_скрипт.

    Добавлено спустя 2 минуты 19 секунд:
    У тебя шорт-теги или ты php в <? ?> забыл написать? Правильно ничего не выводит - результат запроса обработать еще нужно)
     
  15. 6stPROD

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

    С нами с:
    6 фев 2013
    Сообщения:
    124
    Симпатии:
    0
    Адрес:
    Тутаев, Ярославская область. Российская Федерация
    Закомментил, все ровно, все шикарно! а в базе небольшой беспорядок

    например столбец hostname вместо значения 127,0,0,1 выдает 1270
    стимид и лог_дата тоже неполное значение выдает

    Добавлено спустя 1 минуту 53 секунды:
    синтаксическая ошибка в строке
    Код (Text):
    1. $res = mysql_query('select log_date, username, steamid, hostname from tbl_logs
    Добавлено спустя 2 минуты 8 секунд:
    пожалуй лучше я прямиком из базы буду доставать значения))))

    Единственное что мешает это то что информация времени стимида и хостнейма поступает в урезанном виде (
     
  16. Swapf

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

    С нами с:
    8 окт 2012
    Сообщения:
    82
    Симпатии:
    0
    Адрес:
    Россия, Самарская обл, Сызрань
    точка с запятой в конце должна быть. У меня все ровно выдает. Не понял где у тебя проблема - в БД криво записывается или оттуда читается?
     
  17. 6stPROD

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

    С нами с:
    6 фев 2013
    Сообщения:
    124
    Симпатии:
    0
    Адрес:
    Тутаев, Ярославская область. Российская Федерация
    ага, например вместо 127,0,0,1 написано 1270 тоже самое касается даты - вместо полной даты просто 2013 написано... стимид тоже не полное значение имеет
     
  18. Swapf

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

    С нами с:
    8 окт 2012
    Сообщения:
    82
    Симпатии:
    0
    Адрес:
    Россия, Самарская обл, Сызрань
    скинь лог на почту
     
  19. 6stPROD

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

    С нами с:
    6 фев 2013
    Сообщения:
    124
    Симпатии:
    0
    Адрес:
    Тутаев, Ярославская область. Российская Федерация
  20. Swapf

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

    С нами с:
    8 окт 2012
    Сообщения:
    82
    Симпатии:
    0
    Адрес:
    Россия, Самарская обл, Сызрань
    Доработал кое-что. Теперь нет ограничений сколько у пользователя в имени символов '|' и '-'. Проверь сейчас.
    Код (Text):
    1. <?php
    2. mysql_connect("localhost", "root", "");
    3. mysql_select_db("one");
    4.  
    5. $f = fopen('allinfo_players.txt', 'r');
    6.  
    7. $sql = array();
    8. while(!feof($f))
    9. {
    10.     $row = fgets($f);
    11.     //var_dump($row);
    12.     if((strlen($row)==2)||!$row) continue;
    13.     $data = explode("|", $row);
    14.    
    15.     if(count($data)>3)
    16.     {
    17.         for($i=0; $i<count($data)-3; $i++)
    18.         {
    19.         $data[0].="|".$data[$i+1];
    20.         }
    21.         $data[1]=$data[count($data)-2];
    22.         $data[2]=$data[count($data)-1];
    23.     }
    24.    
    25.     $date_time_and_username_src = $data[0];
    26.     $date_time = explode("-", $date_time_and_username_src);
    27.     $date = substr($date_time[0], 2);
    28.     if(count($date_time)>2)
    29.     {
    30.         for($i=2; $i<count($date_time); $i++)
    31.         {
    32.         $date_time[1].="-".$date_time[$i];
    33.         }
    34.     }
    35.     $time_username = $date_time[1];
    36.     $time_username = explode(":", $time_username);
    37.     $h = trim($time_username[0]);
    38.     $m = trim($time_username[1]);
    39.     $s = trim($time_username[2]);
    40.     $username = trim($time_username[3]);
    41.     $date = explode("/", $date);
    42.     $y = trim($date[2]);
    43.     $month = trim($date[0]);
    44.     $d = trim($date[1]);
    45.     $sid = explode(":", $data[1]);
    46.     $ip = explode(":", $data[2]);
    47.     $sid = trim($sid[1]);
    48.     $ip = trim($ip[1]);
    49.    
    50.     echo "Год ".$y."<br>";
    51.     echo "Месяц ".$month."<br>";
    52.     echo "Число ".$d."<br>";
    53.     echo "Часов ".$h."<br>";
    54.     echo "Минут ".$m."<br>";
    55.     echo "Секунд ".$s."<br>";
    56.     echo "Пользователь ".$username."<br>";
    57.     echo "STEAMID ".$sid."<br>";
    58.     echo "IP ".$ip."<br>";
    59.     echo "<hr>";
    60.     $sql[] = '("'.$y.'-'.$month.'-'.$d.' '.$h.':'.$m.':'.$s.'", "'.$username.'", "'.$sid.'", "'.$ip.'")';
    61.    
    62. }
    63. fclose($f);
    64. echo implode(',', $sql);
    65. mysql_query('INSERT INTO tbl_logs (log_date, username, steamid, hostname) VALUES'.implode(',', $sql));
    66. ?>
     
  21. 6stPROD

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

    С нами с:
    6 фев 2013
    Сообщения:
    124
    Симпатии:
    0
    Адрес:
    Тутаев, Ярославская область. Российская Федерация
    То же самое :( в базу попадает вместо "127,0,0,1" - "1270" вместо полной даты только год (2013) и тоже со стимид :((
     
  22. Swapf

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

    С нами с:
    8 окт 2012
    Сообщения:
    82
    Симпатии:
    0
    Адрес:
    Россия, Самарская обл, Сызрань
    Несколько раз все проверил. Все записывается верно. Ниже - скрин, я там даже первому пользователю - и | добавлял, чтобы проверить. >350 проверил, все правильно работает.
    [​IMG]
    вот еще
    [​IMG]
     
  23. 6stPROD

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

    С нами с:
    6 фев 2013
    Сообщения:
    124
    Симпатии:
    0
    Адрес:
    Тутаев, Ярославская область. Российская Федерация
    странно...эм, а может мне просто пересоздать таблицу с другими значениями?

    Код (Text):
    1. CREATE TABLE `tbl_logs` (
    2.   `id` int(11) NOT NULL AUTO_INCREMENT,
    3.   `log_date` int(20) NOT NULL,        
    4.   `username` varchar(50),
    5.   `steamid` varchar(50),
    6.   `hostname` int(16),
    7.   PRIMARY KEY (`id`)
    8. ) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
    в этом дело не может быть?


    Кстати у тебя стимид тоже не полный показан )))
     
  24. Swapf

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

    С нами с:
    8 окт 2012
    Сообщения:
    82
    Симпатии:
    0
    Адрес:
    Россия, Самарская обл, Сызрань
    Последнее, что ты мне на почту прислал, я проверил. Все правильно. Ты последней версией скрипта пользуешься??? Специально доработал. Там все должно быть ровно.
    [​IMG]

    Добавлено спустя 3 минуты 12 секунд:
    ДРУЖИЩЩЕ!!! Я понял... я же таблицу потом у себя правил, а тебе сказать забыл, думал это очевидно. У меня тип данных для хостнайм варчар(16), а у тебя инт(16), вот он тебе целые и выдает. Лови мою таблицу!
    Код (Text):
    1. DROP TABLE IF EXISTS one.tbl_logs;
    2. CREATE TABLE `tbl_logs` (
    3.   `id` int(11) NOT NULL AUTO_INCREMENT,
    4.   `log_date` datetime NOT NULL,
    5.   `username` varchar(50) DEFAULT NULL,
    6.   `steamid` varchar(50) DEFAULT NULL,
    7.   `hostname` varchar(15) DEFAULT NULL,
    8.   PRIMARY KEY (`id`)
    9. ) ENGINE=MyISAM AUTO_INCREMENT=32 DEFAULT CHARSET=utf8;
     
  25. 6stPROD

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

    С нами с:
    6 фев 2013
    Сообщения:
    124
    Симпатии:
    0
    Адрес:
    Тутаев, Ярославская область. Российская Федерация
    http://smotr.im/ch2E специально перекопировал скрипт, удалил все из базы и снова его заюзал

    Добавлено спустя 28 секунд:
    Воот ) как я и говорил уже ранее )) сейчас опробуем )



    Вот теперь все отлично! если не считать того что стимид показан не до конца у бота он написан как BOT а у игрока имеет такую надпись STEAMID STEAM 0 564654654156 например