Mysql
 sql >> Baza danych >  >> RDS >> Mysql

PHP MYSQL - Wypełnij ponumerowane wiersze tabeli HTML na podstawie tego, czy pasują do numeru wiersza

Aby bezpośrednio rozwiązać problem (omówię więcej za chwilę), przeglądasz pełną listę urządzeń i następnie - po przejrzeniu ich wszystkich w pętli próbujesz je wyświetlić. Z tego powodu wyświetlasz tylko ostatnie urządzenie, które zostało dotknięte.

Twój obecny kod, skrócony, to:

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;
    }
    ...
}

Jeśli rozumiem, co próbujesz zrobić, musisz zapisać każde urządzenie w tablicy „devices” i przejść przez nią podczas każdej iteracji twojego for pętla. Wypróbuj coś takiego:

$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;
    ...
}

Bardziej elegancki sposób na wykonanie tego samego zadania można wykonać za pomocą ustartlocation jako indeks tablicy, ale będzie to wymagało, aby ustartlocation jest unikalny dla pojedynczego urządzenia/serwera:

$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');
    ...
}

Ta metoda zmniejszy potrzebę przeglądania listy urządzeń za każdym razem, ale znowu - wymaga, aby ustartlocation jest wyjątkowy.

Uwagi poboczne (dodatkowe, niespecyficzne krytyki)

  1. Na początku kodu wykonujesz $sql_devices="SELECT * FROM urządzenia"; i $result_devices=mysql_query($sql_devices); , ale nigdy nie używaj tego obiektu. Może i powinien zostać usunięty, ponieważ jest to jedno dodatkowe (dość ciężkie) zapytanie.

  2. W drugim while -pętla masz linię $num_devices=mysql_numrows($result_devices); . Nie ma funkcji PHP mysql_numrows() , uważam, że jest to literówka dla mysql_num_rows() funkcja (lub masz napisaną przez siebie funkcję, która robi to samo. Również $num_devices zmienna nigdy nie jest używana, więc ta linia może zostać całkowicie usunięta.

  3. Używasz starego i staje się przestarzałe mysql_ funkcji (sprawdź komunikat ostrzegawczy na górze dowolnej strony z dokumentacją dla tych funkcji; oto mysql_connect() na przykład). Podobnie jak społeczność, polecam uaktualnienie do mysqli_ lub PDO metody.

  4. Twój kod jest otwarty na błędy nieoczyszczonego języka SQL, nie ograniczając się konkretnie do wstrzykiwania SQL, ponieważ nie wydaje się, że pobierasz dane wejściowe bezpośrednio z danych wejściowych użytkownika, ale także nie wyklucza tego czynnika. Na przykład, co by się stało, gdyby szafka lub centrum danych wartość zawierała pojedynczy cudzysłów? Ponieważ używasz mysql_ metod, sugeruję zawinąć każdą z mysql_real_escape_string() przed użyciem ich w bazie danych wywołuje:$sql_cabinets="SELECT * FROM Cabinets WHERE datacenter ='" . mysql_real_escape_string($datacenters_sqlrow[0]) . „” ZAMÓW WEDŁUG numeru szafy”;




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MYSQL Policz wszystkie wiersze i paginację danych za pomocą zakresu/limitu

  2. Dlaczego zapytanie join zawierające funkcję sum zwraca tylko 1 wiersz

  3. Różnica między `usługami parzenia start mysql` a `mysql.server start`

  4. Jak zainstalować MySQL 8 na Ubuntu?

  5. Zapytanie używające group_concat zwraca tylko jeden wiersz