Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

PHP MYSQL - Preencha as linhas numeradas da tabela HTML com base na correspondência do número da linha


Para resolver o problema diretamente (falarei mais em breve), você está percorrendo a lista completa de dispositivos e depois - depois de terminar de percorrer todos eles - você tenta exibi-los. Por causa disso, você está exibindo apenas o dispositivo final que foi tocado.

Seu código atual, truncado, é:
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;
    }
    ...
}

Se eu entendi o que você está tentando fazer, você precisará armazenar cada dispositivo em uma matriz "dispositivos" e fazer um loop durante cada iteração do seu for ciclo. Tente algo como:
$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;
    ...
}

Uma maneira mais elegante de realizar essa mesma tarefa pode ser feita usando o ustartlocation como o índice do array, mas exigirá que o ustartlocation é exclusivo para um dispositivo/servidor individual:
$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');
    ...
}

Este método eliminará a necessidade de percorrer a lista de dispositivos todas as vezes, mas novamente - ele requer que o ustartlocation é único.

Observações complementares (críticas adicionais, sem respostas específicas)

  1. No início do seu código você executa $sql_devices="SELECT * FROM dispositivos"; e $result_devices=mysql_query($sql_devices); , mas nunca use este objeto. Ele pode e deve ser removido, pois é uma consulta extra (bastante pesada).

  2. No segundo enquanto -loop você tem a linha $num_devices=mysql_numrows($result_devices); . Não há função PHP mysql_numrows() , acredito que seja um erro de digitação para o mysql_num_rows() função (isso, ou você tem uma função escrita personalizada para fazer a mesma coisa. Além disso, o $num_devices variável nunca é usada, então essa linha pode ser removida completamente.

  3. Você está usando o antigo e obsoleto mysql_ funções (confira a mensagem de aviso no topo de qualquer uma das páginas doc para essas funções; aqui está mysql_connect() para referência). Eu, assim como a comunidade, recomendo que você atualize para o mysqli_ ou PDO métodos.

  4. Seu código está aberto a erros de SQL não higienizados, não especificamente limitados à injeção de SQL, pois não parece que você está recebendo entrada diretamente da entrada do usuário, mas também não descarta esse fator. Por exemplo, o que aconteceria se um armário ou datacenter valor continha aspas simples? Como você está usando mysql_ métodos, sugiro que você envolva cada um com mysql_real_escape_string() antes de usá-los nas chamadas do banco de dados:$sql_cabinets="SELECT * FROM cabinets WHERE datacenter ='" . mysql_real_escape_string($datacenters_sqlrow[0]) . "' ORDER POR número do gabinete";