За последние 24 часа нас посетили 54469 программистов и 1779 роботов. Сейчас ищут 925 программистов ...

Вывод данных.

Тема в разделе "PHP для новичков", создана пользователем 715kg, 20 окт 2013.

  1. 715kg

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

    С нами с:
    2 мар 2013
    Сообщения:
    147
    Симпатии:
    0
    Здравствуйте, такая проблема. Обновляю информацию в базе mysql. делаю все это дело через вывод

    Код (Text):
    1. while(){
    2. }
    Построение запроса такое.
    Код (Text):
    1. $servers = mysql_query("SELECT * FROM servers");
    В базе более 19000 записей. И выводить он их всех не хочет. Разбил базу на несколько частей.

    Код (Text):
    1.  
    2. $limit=$_GET['limit']; /0/2000/4000/6000/8000/ <<< Значения запроса.
    3. $servers = mysql_query("SELECT * FROM servers LIMIT $limit,2000");
    Ну вообщем так до 19000. То есть обновляет по 2000 записи. Потому что все 19000 обновить не получается.

    И тут проблема такая, обновляются не все записи, некоторые он просто пропускает. как буд то не видит.
    Если перестроить запрос и вписать ID именно той записи, которую он не обновил, то он ее успешно обновляет. В цикле видимо ее не выводит.

    Как решить проблему? Подскажите как сделать чтобы выводились все записи.
    В базе некоторых записей нет. ID записи идет не совсем по порядку, допустим
    ID - 1
    ID - 2
    ID - 5
    ID - 8
    ID - 9
    ID - 11

    И так далее. Может быть из за этого?
     
  2. Slavka

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

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    ниче не понятно - понятно что надо чтото обновить - но саму строчку обновления не видно. while тоже не полный ..
    чего вы тут насовали.. скрипт более цельный и понятный в студию а не куски из разных углов

    Добавлено спустя 52 секунды:
    ах да если строчек будет много пишите [ code=php ]
     
  3. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Я даже боюсь представить что будет дальше:)
    ////////////////////////////////////////////////////////////////////////////////////////////////////

    А теперь подробно опиши зачем апдейтить такое количество записей, что именно ты апдейтишь.
     
  4. Yadfewm

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

    С нами с:
    20 июл 2009
    Сообщения:
    223
    Симпатии:
    0
    обращение в цикле к базе чревато именно такими последствиями, не делайте апдэйт через вывод. Просто выполните запрос UPDATE ... WHERE ... 1 раз
     
  5. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Так у update нету многострочной формы, как у Insert. Тут в соседней ветке уже приводили какие-то трудноперевариваемые рецепты, как его всё же сделать, но по мне лучше цикл. И то что используется цикл не причём - обновлял похожим способом базы с неменьшим количеством записей, и ничего, всё работало. Так что код в студию. Весь.
     
  6. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Все есть надо просто этим пользоваться:)
     
  7. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
  8. 715kg

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

    С нами с:
    2 мар 2013
    Сообщения:
    147
    Симпатии:
    0
    Вот вам этот кошмар, который не хочет обновлять.

    Код (Text):
    1. $servers = dbquery("SELECT * FROM amx_servers LIMIT $limit,2000");
    2.  
    3.  
    4. $date_proverka = date("d-m-Y: G:i:s",time()); // запоминаем дату
    5.  
    6. while($r=dbarray_fetch($servers)) {
    7. list( $aipi_adr_obrez, $port_adr ) = explode(':', $r[server_ip]);
    8. $ipv4 = gethostbyname($aipi_adr_obrez);
    9. $serv=serverInfo("$ipv4:$port_adr");
    10.  
    11.  
    12. //Сбор информации
    13. if($serv['status']==''){
    14. $result = dbquery("UPDATE amx_servers
    15.     SET
    16.         `server_name`='Server Is OFF Line',
    17.         `server_status`='0',
    18.                 `server_map`='',               
    19.         `server_players`='0',
    20.         `server_maxplayers`='0'
    21.     WHERE server_id='".$r['server_id']."'");
    22. continue;
    23. }else{
    24. $name_filtered_server = mysql_real_escape_string($serv['name']); //Фильтр данныйх
    25. $result = dbquery("
    26. UPDATE amx_servers
    27.   SET
    28. server_name = '".$name_filtered_server."',
    29.     server_map = '".$serv['map']."',
    30.     server_windows = '".$serv['os']."',
    31.     server_ping = '".$serv['ping']."',
    32.     server_players = '".$serv['players']."',
    33.     server_game='".$serv['version']."_".$serv['game']."',
    34.     server_maxplayers = '".$serv['max_players']."',
    35.     server_date_cron = '".$date_proverka."',
    36.     server_status = '1'
    37.    WHERE server_id='".$r['server_id']."'
    38. ");
    39. }
    40.  
    41.  
    42. if($result) {echo "".$r['server_id']." ";} else {echo "Ошибка ".$r['server_id']." ";}
    43. echo "<br>";
    44. }
    Добавлено спустя 2 минуты 55 секунд:
    Если кого то смущают dbquery, dbarray_fetch
    То вот.)

    Код (Text):
    1. // MySQL функции
    2. function dbquery($query) {
    3.     $result = @mysql_query($query);
    4.     if (!$result) {
    5.         echo mysql_error();
    6.         return false;
    7.     } else {
    8.         return $result;
    9.     }
    10. }
    11. function dbarray_fetch($query) {
    12.     $result = @mysql_fetch_array($query);
    13.     if (!$result) {
    14.         echo mysql_error();
    15.         return false;
    16.     } else {
    17.         return $result;
    18.     }
    19. }
    20. function dbconnect($db_host, $db_user, $db_pass, $db_name) {
    21.     $db_connect = @mysql_connect($db_host, $db_user, $db_pass);
    22.     $db_select = @mysql_select_db($db_name);
    23.     if (!$db_connect) {
    24.         die("<div style='font-family:Verdana;font-size:11px;text-align:center;'><b>Не могу подключиться к MySQL</b><br />".mysql_errno()." : ".mysql_error()."</div>");
    25.     } elseif (!$db_select) {
    26.         die("<div style='font-family:Verdana;font-size:11px;text-align:center;'><b>НЕ могу подключиться к MySQL базе данных</b><br />".mysql_errno()." : ".mysql_error()."</div>");
    27.     }
    28. }
    29.  
    30. mysql_close();
     
  9. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Нет ковычек.
    Откуда это $r[server_ip]? Из базы? Подробней...

    Так писать точно не надо при таком объеме...
     
  10. 715kg

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

    С нами с:
    2 мар 2013
    Сообщения:
    147
    Симпатии:
    0
    Кавычки решают? С ними не работает. Без них работает.

    А по коду не видно?
    while($r=dbarray_fetch($servers)
    Из базы $r[server_ip]

    А как писать при таком объеме? Я и так разделил базу как видите

    $servers = dbquery("SELECT * FROM amx_servers LIMIT $limit,2000");

    $limit - переменная с GET запроса. Вывод по 2000 записей.
     
  11. 715kg

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

    С нами с:
    2 мар 2013
    Сообщения:
    147
    Симпатии:
    0
    Так мне кто нибудь поможет?
     
  12. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Код (Text):
    1. $serv=serverInfo("$ipv4:$port_adr");
    Вот это - это запрос на другой сервер?

    В цикле он просто не может не видеть какие-то записи. Видимо условия в цикле не выполняются.
     
  13. 715kg

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

    С нами с:
    2 мар 2013
    Сообщения:
    147
    Симпатии:
    0

    Да. В базе есть IP адреса. И каждый раз нужно к ним обращаться для получения данных, которые записываются в базу.
    Так вот цикл не хочет выводить все адреса. Некоторые пропускает.
     
  14. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Не может цикл чего-то не хотеть! Возьмите вместо тела цикла поставьте запись в файл какого-нибудь ID записи или что там у вас, убедитесь...