sql >> Databasteknik >  >> RDS >> Mysql

PHP MYSQL - Fyll i HTML-tabellnumrerade rader baserat på om de matchar radnummer

För att direkt lösa problemet (jag kommer till mer om en liten stund), upprepar du hela listan över enheter och sedan - när du är klar med att gå igenom dem alla - försöker du visa dem. På grund av detta visar du bara den sista enheten som berördes.

Din nuvarande kod, trunkerad, är:

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

Om jag förstår vad du försöker göra, måste du lagra varje enhet i en "devices"-array och gå igenom den under varje iteration av din for slinga. Prova något som:

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

Ett mer elegant sätt att utföra samma uppgift kan göras med ustartlocation som index för arrayen, men det kommer att kräva att ustartlocation är unik för en enskild enhet/server:

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

Denna metod kommer att minska behovet av att gå igenom listan över enheter varje gång, men återigen - det kräver att ustartlocation är unik.

Sidoanteckningar (ytterligare, icke-svarsspecifik kritik)

  1. I början av din kod kör du $sql_devices="SELECT * FROM enheter"; och $result_devices=mysql_query($sql_devices); , men använd aldrig detta objekt. Det kan och bör tas bort eftersom det är en extra (ganska tung) fråga.

  2. I den andra while -loop du har raden $num_devices=mysql_numrows($result_devices); . Det finns ingen PHP-funktion mysql_numrows() , jag tror att detta är ett stavfel för mysql_num_rows() funktion (det, eller så har du en specialskriven funktion för att göra samma sak. Även $num_devices variabeln används aldrig så den här raden kan faktiskt tas bort helt.

  3. Du använder den gamla och utfasade mysql_ funktioner (kolla in varningsmeddelandet överst på någon av dokumentsidorna för dessa funktioner; här är mysql_connect() som referens). Jag, liksom communityn, rekommenderar dig att uppgradera till mysqli_ eller PDO metoder.

  4. Din kod är öppen för osanifierade SQL-fel, inte specifikt begränsad till SQL-injektion eftersom det inte verkar som att du tar indata direkt från användarinmatning, men inte heller utesluter denna faktor. Till exempel, vad skulle hända om ett skåp eller datacenter värdet innehöll ett enda citat? Eftersom du använder mysql_ metoder, jag föreslår att du lindar var och en med mysql_real_escape_string() innan du använder dem i databasen anropar:$sql_cabinets="SELECT * FROM cabinets WHERE datacenter ='" . mysql_real_escape_string($datacenters_sqlrow[0]) . "' BESTÄLL EFTER skåpnummer";




  1. PHP / MySQL bygga trädmeny

  2. Mysql - återanvändning av beräknade värden

  3. Flytta och säkerhetskopiera en stor MySQL-databas

  4. Transponera rader till kolumner baserat på ID-kolumn