Mysql
 sql >> Base de données >  >> RDS >> Mysql

PHP MYSQL - Remplir les lignes numérotées du tableau HTML en fonction de leur correspondance avec le numéro de ligne

Pour résoudre directement le problème (j'y reviendrai plus en détail dans un instant), vous parcourez la liste complète des appareils et ensuite - une fois que vous avez terminé de les parcourir tous - vous essayez de les afficher. Pour cette raison, vous n'affichez que le dernier appareil qui a été touché.

Votre code actuel, tronqué, est :

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

Si je comprends bien ce que vous essayez de faire, vous devrez stocker chaque périphérique dans un tableau "devices" et le parcourir en boucle à chaque itération de votre for boucle. Essayez quelque chose comme :

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

Une façon plus élégante d'accomplir cette même tâche peut être faite en utilisant le ustartlocation comme index du tableau, mais il faudra que le ustartlocation est unique à un appareil/serveur individuel :

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

Cette méthode supprimera le besoin de parcourir la liste des périphériques à chaque fois, mais encore une fois - cela nécessite que le ustartlocation est unique.

Notes annexes (critiques supplémentaires, non spécifiques à la réponse)

  1. Au début de votre code, vous exécutez $sql_devices="SELECT * FROM appareils"; et $result_devices=mysql_query($sql_devices); , mais n'utilisez jamais cet objet. Il peut et doit être supprimé car il s'agit d'une requête supplémentaire (assez lourde).

  2. Au second while -loop vous avez la ligne $num_devices=mysql_numrows($result_devices); . Il n'y a pas de fonction PHP mysql_numrows() , je crois que c'est une faute de frappe pour le mysql_num_rows() fonction (que, ou vous avez une fonction personnalisée pour faire la même chose. En outre, le $num_devices variable n'est jamais utilisée donc cette ligne pourrait en fait être entièrement supprimée.

  3. Vous utilisez l'ancien mysql_ qui devient obsolète fonctions (consultez le message d'avertissement en haut de l'une des pages de documentation pour ces fonctions ; voici mysql_connect() pour référence). Moi, ainsi que la communauté, vous recommandons de passer à mysqli_ ou PDO méthodes.

  4. Votre code est ouvert aux erreurs SQL non nettoyées, non spécifiquement limitées à l'injection SQL car il ne semble pas que vous preniez une entrée directement à partir de l'entrée utilisateur, mais n'excluez pas non plus ce facteur. Par exemple, que se passerait-il si une cabinet ou datacenter value contenait un guillemet simple ? Puisque vous utilisez mysql_ méthodes, je vous suggère d'envelopper chacune avec mysql_real_escape_string() avant de les utiliser dans la base de données appelle :$sql_cabinets="SELECT * FROM cabinets WHERE datacenter = '" . mysql_real_escape_string($datacenters_sqlrow[0]) . "' ORDER BY cabinetnumber";