Untuk mengatasi masalah secara langsung (saya akan membahas lebih lanjut sebentar lagi), Anda mengulangi daftar lengkap perangkat dan lalu - setelah Anda selesai mengulang semuanya - Anda mencoba untuk menampilkannya. Karena itu, Anda hanya menampilkan perangkat terakhir yang disentuh.
Kode Anda saat ini, terpotong, adalah:
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;
}
...
}
Jika saya mengerti apa yang Anda coba lakukan, Anda harus menyimpan setiap perangkat ke dalam larik "perangkat" dan mengulanginya selama setiap iterasi for
Anda lingkaran. Coba sesuatu seperti:
$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;
...
}
Cara yang lebih elegan untuk menyelesaikan tugas yang sama ini dapat dilakukan dengan menggunakan ustartlocation
sebagai indeks larik, tetapi akan memerlukan ustartlocation
unik untuk perangkat/server 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');
...
}
Metode ini akan menghilangkan kebutuhan untuk mengulang daftar perangkat setiap kali, tetapi sekali lagi - metode ini mengharuskan ustartlocation
unik.
Catatan Samping (tambahan, kritik non-jawaban-spesifik)
-
Di awal kode Anda, jalankan
$sql_devices="SELECT * FROM
perangkat";
dan$result_devices=mysql_query($sql_devices);
, tetapi jangan pernah menggunakan objek ini. Itu dapat dan harus dihapus karena merupakan satu kueri tambahan (cukup berat). -
Di
while
kedua -loop Anda memiliki baris$num_devices=mysql_numrows($result_devices);
. Tidak ada fungsi PHPmysql_numrows()
, saya yakin ini salah ketik untukmysql_num_rows()
function (itu, atau Anda memiliki fungsi yang ditulis khusus untuk melakukan hal yang sama. Juga,$num_devices
variabel tidak pernah digunakan sehingga baris ini benar-benar dapat dihapus seluruhnya. -
Anda menggunakan
mysql_
yang lama dan sudah tidak digunakan lagi fungsi (lihat pesan peringatan di atas salah satu halaman dokumen untuk fungsi-fungsi ini; inilahmysql_connect()
sebagai referensi). Saya, serta komunitas, menyarankan Anda untuk meningkatkan kemysqli_
atauPDO
metode. -
Kode Anda terbuka untuk kesalahan SQL yang tidak bersih, tidak secara khusus terbatas pada injeksi SQL karena tampaknya Anda tidak mengambil input langsung dari input pengguna, tetapi juga tidak mengesampingkan faktor ini. Misalnya, apa yang akan terjadi jika
cabinet
ataudatacenter
nilai berisi tanda kutip tunggal? Karena Anda menggunakanmysql_
metode, saya sarankan Anda membungkus masing-masing denganmysql_real_escape_string()
sebelum menggunakannya dalam panggilan database:$sql_cabinets="SELECT * FROM cabinets WHERE datacenter = '" . mysql_real_escape_string($datacenters_sqlrow[0]) . "' ORDER BY cabinetnumber";