sql >> Database >  >> RDS >> Mysql

PHP MYSQL - Vul genummerde rijen in HTML-tabel op basis van of ze overeenkomen met rijnummer

Om het probleem direct aan te pakken (ik kom zo op meer), doorloop je de volledige lijst met apparaten en vervolgens - nadat je ze allemaal hebt doorlopen - probeer je ze weer te geven. Hierdoor geeft u alleen het laatste apparaat weer dat is aangeraakt.

Uw huidige code, ingekort, is:

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

Als ik begrijp wat je probeert te doen, moet je elk apparaat opslaan in een "apparaten"-array en er doorheen lopen tijdens elke iteratie van je for lus. Probeer iets als:

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

Een elegantere manier om dezelfde taak uit te voeren kan worden gedaan met behulp van de ustartlocation als de index van de array, maar het vereist dat de ustartlocation is uniek voor een individueel apparaat/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');
    ...
}

Met deze methode hoeft u niet elke keer door de lijst met apparaten te bladeren, maar nogmaals - het vereist dat de ustartlocation is uniek.

Nevennotities (aanvullende, niet-antwoordspecifieke kritieken)

  1. Aan het begin van je code voer je $sql_devices="SELECT * FROM . uit apparaten"; en $result_devices=mysql_query($sql_devices); , maar gebruik dit object nooit. Het kan en moet worden verwijderd omdat het een extra (redelijk zware) zoekopdracht is.

  2. In de tweede while -loop je hebt de regel $num_devices=mysql_numrows($result_devices); . Er is geen PHP-functie mysql_numrows() , ik geloof dat dit een typefout is voor de mysql_num_rows() functie (dat, of je hebt een speciaal geschreven functie om hetzelfde te doen. Ook de $num_devices variabele wordt nooit gebruikt, dus deze regel zou eigenlijk helemaal kunnen worden verwijderd.

  3. Je gebruikt de oude en verouderde mysql_ functies (bekijk het waarschuwingsbericht bovenaan een van de doc-pagina's voor deze functies; hier is mysql_connect() als referentie). Ik, evenals de gemeenschap, raad je aan om te upgraden naar de mysqli_ of PDO methoden.

  4. Uw code staat open voor niet-opgeschoonde SQL-fouten, niet specifiek beperkt tot SQL-injectie, omdat het niet lijkt alsof u rechtstreeks invoer van gebruikersinvoer opneemt, maar deze factor sluit deze factor ook niet uit. Wat zou er bijvoorbeeld gebeuren als een cabinet of datacenter waarde bevatte een enkel aanhalingsteken? Aangezien je mysql_ . gebruikt methoden, raad ik aan om ze allemaal in te pakken met mysql_real_escape_string() voordat u ze in de database-aanroepen gebruikt:$sql_cabinets="SELECT * FROM cabinets WHERE datacenter = '" . mysql_real_escape_string($datacenters_sqlrow[0]) . "' ORDER BY cabinetnumber";




  1. Hoe kies ik uit een één-op-veel relatie in CodeIgniter?

  2. Python MySQLdb-uitzonderingen

  3. Hoe debug je een opgeslagen procedure in Toad?

  4. Ionisch raamwerk en php mysql