sql >> Database teknologi >  >> RDS >> Mysql

PHP MYSQL - Udfyld HTML-tabelnummererede rækker baseret på, om de matcher rækkenummer

For at løse problemet direkte (jeg kommer nærmere om lidt), gentager du hele listen over enheder og derefter - efter at du er færdig med at gennemgå dem alle - forsøger du at vise dem. På grund af dette viser du kun den sidste enhed, der blev rørt ved.

Din nuværende kode, afkortet, er:

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

Hvis jeg forstår, hvad du prøver at gøre, skal du gemme hver enhed i et "enheder"-array og gå igennem det under hver iteration af din for sløjfe. Prøv noget 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;
    ...
}

En mere elegant måde at udføre den samme opgave på kan gøres ved at bruge ustartlocation som indekset for arrayet, men det vil kræve, at ustartlocation er unik for en individuel enhed/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');
    ...
}

Denne metode vil fjerne behovet for at gå gennem listen over enheder hver gang, men igen - det kræver, at ustartlocation er unik.

Sidebemærkninger (yderligere, ikke-svar-specifikke kritikker)

  1. I begyndelsen af ​​din kode udfører du $sql_devices="SELECT * FROM enheder"; og $result_devices=mysql_query($sql_devices); , men brug aldrig dette objekt. Det kan og bør fjernes, da det er en ekstra (temmelig tung) forespørgsel.

  2. I den anden mens -loop du har linjen $num_devices=mysql_numrows($result_devices); . Der er ingen PHP-funktion mysql_numrows() , jeg tror, ​​at dette er en tastefejl for mysql_num_rows() funktion (det, eller du har en specialskrevet funktion til at gøre det samme. Også $num_devices variabel bruges aldrig, så denne linje kunne faktisk fjernes helt.

  3. Du bruger den gamle og forældede mysql_ funktioner (tjek advarselsmeddelelsen øverst på enhver af doc-siderne for disse funktioner; her er mysql_connect() til reference). Jeg, såvel som fællesskabet, anbefaler dig at opgradere til mysqli_ eller BOB metoder.

  4. Din kode er åben for usanificerede SQL-fejl, ikke specifikt begrænset til SQL-injektion, da det ikke ser ud til, at du tager input direkte fra brugerinput, men heller ikke udelukker denne faktor. For eksempel, hvad ville der ske, hvis et skab eller datacenter værdi indeholdt et enkelt citat? Da du bruger mysql_ metoder, foreslår jeg, at du indpakker hver med mysql_real_escape_string() før du bruger dem i databasen kalder:$sql_cabinets="SELECT * FROM kabinetter WHERE datacenter ='" . mysql_real_escape_string($datacenters_sqlrow[0]) . "' BESTIL EFTER skabsnummer";




  1. MYSQL - Sammenkæd to tabeller

  2. Opdag på hinanden følgende elementer, der opfylder bestemte kriterier i en tidsserie

  3. gem postgresql resultat i bash variabel

  4. Brug af SELECT INTO OUTFILE i MySQL