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)
-
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. -
I den andra
while
-loop du har raden$num_devices=mysql_numrows($result_devices);
. Det finns ingen PHP-funktionmysql_numrows()
, jag tror att detta är ett stavfel förmysql_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. -
Du använder den gamla och utfasade
mysql_
funktioner (kolla in varningsmeddelandet överst på någon av dokumentsidorna för dessa funktioner; här ärmysql_connect()
som referens). Jag, liksom communityn, rekommenderar dig att uppgradera tillmysqli_
ellerPDO
metoder. -
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
ellerdatacenter
värdet innehöll ett enda citat? Eftersom du användermysql_
metoder, jag föreslår att du lindar var och en medmysql_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";