Mysql
 sql >> база данни >  >> RDS >> Mysql

PHP MYSQL - Попълване на номерирани редове в HTML таблица въз основа на това дали съвпадат с номера на реда

За да адресирате директно проблема (ще стигна до повече след малко), преглеждате пълния списък с устройства и след това - след като приключите с преминаването през всички тях - опитвате се да ги покажете. Поради това вие показвате само крайното устройство, което е докоснато.

Вашият текущ код, съкратен, е:

while($row = mysql_fetch_array($result_devices)) {
    $server = $row['devicename'];
    $ustart = $row['ustartlocation'];
}
for ($i = 0; $i < $cabinets_sqlrow[2]; $i++) {
    $u = $cabinets_sqlrow[2] - $i;
    ...
    if ($u == $ustart) {
        echo $server;
    }
    ...
}

Ако разбирам какво се опитвате да направите, ще трябва да съхраните всяко устройство в масив „устройства“ и да преминавате през него по време на всяка итерация на вашия for цикъл. Опитайте нещо като:

$devices = array();
while($row = mysql_fetch_array($result_devices)) {
    $devices[] = array(
        'server' => $row['devicename'],
        'ustart' => $row['ustartlocation']
    );
}
for ($i = 0; $i < $cabinets_sqlrow[2]; $i++) {
    ...
    $output = 'empty';
    foreach ($devices as $device) {
        if ($u == $device['ustart']) {
            $output = $device['server'];
            break;
        }
    }
    echo $output;
    ...
}

По-елегантен начин за изпълнение на същата задача може да се направи с помощта на ustartlocation като индекс на масива, но ще изисква ustartlocation е уникален за отделно устройство/сървър:

$devices = array();
while($row = mysql_fetch_array($result_devices)) {
    $devices[$row['ustartlocation']] = $row['devicename'];
}
for ($i = 0; $i < $cabinets_sqlrow[2]; $i++) {
    ...
    echo (isset($devices[$u]) ? $devices[$u] : 'empty');
    ...
}

Този метод ще премахне необходимостта всеки път да преглеждате списъка с устройства, но отново - той изисква ustartlocation е уникален.

Странични бележки (допълнителни, несвързани с конкретния отговор критики)

  1. В началото на вашия код изпълнявате $sql_devices="SELECT * FROM устройства"; и $result_devices=mysql_query($sql_devices); , но никога не използвайте този обект. Тя може и трябва да бъде премахната, тъй като е една допълнителна (сравнително тежка) заявка.

  2. Във втория while -loop имате реда $num_devices=mysql_numrows($result_devices); . Няма PHP-функция mysql_numrows() , смятам, че това е правописна грешка за mysql_num_rows() функция (това или имате персонализирана функция, която да прави същото нещо. Освен това $num_devices променлива никога не се използва, така че този ред всъщност може да бъде напълно премахнат.

  3. Използвате стария и вече непрепоръчван mysql_ функции (вижте предупредителното съобщение в горната част на която и да е от страниците с документи за тези функции; тук е mysql_connect() за справка). Аз, както и общността, ви препоръчваме да надстроите до mysqli_ или PDO методи.

  4. Вашият код е отворен за несанитизирани SQL грешки, които не се ограничават конкретно до SQL инжектиране, тъй като не изглежда, че приемате вход директно от потребителския вход, но също така не изключва този фактор. Например, какво ще се случи, ако шкаф или център за данни стойността съдържаше единични кавички? Тъй като използвате mysql_ предлагам да обвиете всеки с mysql_real_escape_string() преди да ги използвате в базата данни извиква:$sql_cabinets="SELECT * FROM cabinets WHERE datacenter ='" . mysql_real_escape_string($datacenters_sqlrow[0]) . "' ПОРЪЧАЙ ПО номер на шкаф";




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Услугата MySQL57 на локален компютър стартира и след това спря

  2. Предаване на връзка с базата данни чрез препратка в PHP

  3. Основната таблица или изглед не са намерени:1146 Таблица Laravel 5

  4. Актуализиране на стойността на AUTO_INCREMENT на всички таблици в MySQL база данни

  5. Фатална грешка:Неуловена грешка:Извикване на недефинирана функция mysql_pconnect()