Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

PHP MYSQL - Điền các hàng được đánh số trong bảng HTML dựa trên việc chúng có khớp với số hàng hay không

Để trực tiếp giải quyết vấn đề (tôi sẽ đi sâu hơn vào một chút), bạn đang xem qua danh sách đầy đủ các thiết bị và sau đó - sau khi bạn hoàn thành việc lặp lại tất cả - bạn cố gắng hiển thị chúng. Do đó, bạn chỉ hiển thị thiết bị cuối cùng đã được chạm vào.

Mã hiện tại của bạn, bị cắt ngắn, là:

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

Nếu tôi hiểu bạn đang cố gắng làm gì, bạn sẽ cần lưu trữ từng thiết bị vào một mảng "thiết bị" và lặp lại nó trong mỗi lần lặp lại for vòng. Hãy thử một cái gì đó như:

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

Một cách thanh lịch hơn để hoàn thành nhiệm vụ tương tự này có thể được thực hiện bằng cách sử dụng ustartlocation là chỉ mục của mảng, nhưng nó sẽ yêu cầu ustartlocation là duy nhất cho một thiết bị / máy chủ riêng lẻ:

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

Phương pháp này sẽ loại bỏ nhu cầu lặp lại danh sách thiết bị mỗi lần, nhưng một lần nữa - nó yêu cầu ustartlocation là duy nhất.

Ghi chú bên lề (phê bình bổ sung, không có câu trả lời cụ thể)

  1. Ở phần đầu của mã, bạn thực thi $sql_devices="SELECT * FROM thiết bị ";$result_devices=mysql_query($sql_devices); , nhưng không bao giờ sử dụng đối tượng này. Có thể và nên xóa nó vì nó là một truy vấn bổ sung (khá nặng).

  2. Trong while thứ hai -loop bạn có dòng $num_devices=mysql_numrows($result_devices); . Không có PHP-function mysql_numrows() , Tôi tin rằng đây là lỗi đánh máy cho mysql_num_rows() function (đó, hoặc bạn có một hàm được viết tùy chỉnh để làm điều tương tự. Ngoài ra, $num_devices biến không bao giờ được sử dụng nên dòng này thực sự có thể bị xóa hoàn toàn.

  3. Bạn đang sử dụng mysql_ cũ và không còn được dùng nữa chức năng (kiểm tra thông báo cảnh báo trên đầu bất kỳ trang tài liệu nào cho các chức năng này; đây là mysql_connect() để tham khảo). Tôi cũng như cộng đồng khuyên bạn nên nâng cấp lên mysqli_ hoặc PDO phương pháp.

  4. Mã của bạn mở cho các lỗi SQL không được bảo vệ, không giới hạn cụ thể đối với SQL-injection vì nó không có vẻ như bạn đang lấy đầu vào trực tiếp từ người dùng nhập, nhưng cũng không loại trừ yếu tố này. Ví dụ:điều gì sẽ xảy ra nếu một cabinet hoặc datacenter giá trị chứa một dấu ngoặc kép? Vì bạn đang sử dụng mysql_ , tôi khuyên bạn nên bọc mỗi phương thức bằng mysql_real_escape_string() trước khi sử dụng chúng trong các cuộc gọi cơ sở dữ liệu:$sql_cabinets="SELECT * FROM cabinets WHERE datacenter = '" . mysql_real_escape_string($datacenters_sqlrow[0]) . "' ORDER BY cabinetnumber";




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Định dạng ngày và làm rõ Truy vấn SQL

  2. Sử dụng Python để truy cập SQL với tên cột biến

  3. Kết nối với Cơ sở dữ liệu MySQL qua máy chủ

  4. Bảng lớn trong mysql Cập nhật các hàng dựa trên csv mọi lúc

  5. Cách bảo vệ tệp khỏi tải xuống trái phép