2010-09-17 6 views
0

Je veux générer une grille où les gens peuvent sélectionner une ou plusieurs cellules, puis les enregistrer dans la base de données dans ce format (ligne, cellule):Générer une grille dynamique et remplir les cellules sélectionnées

18,27 18,28 19,27 19,28 

Je vouloir générer la grille et en même temps marquer les cellules qui ont été sélectionnées. J'ai réussi à le faire (voir ci-dessous) mais ça ne me semble pas correct. Aussi j'ai besoin d'obtenir la couleur pour le champ de la base de données de sorte que la cellule semble différente pour chaque utilisateur.

Voilà comment je produis la grille et le remplir:

include 'connect.php'; 

$result = mysql_query("SELECT cus_pixels FROM customers"); 

while($row = mysql_fetch_array($result)) { 

    $string .= $row['cus_pixels']." "; 

} 

$pixels = explode(' ', $string); 

$a = 0; 

while ($a <= 40) { 

    echo "<tr>"; 

    $b = 0; 

    while ($b <= 60) { 

     if (in_array($a.','.$b, $pixels)) { 

      echo '<td class="occupied"></td>'; 

     } else { 

      echo '<td class="pixel"></td>'; 

     } 

     $b += 1; 
    } 

    echo "</tr>"; 

$a += 1; 

} 

Comment puis-je générer à la fois la grille, remplir les cellules qui sont occupées et les colorer individuellement. Je suis vraiment coincé ici.

Répondre

1

Vous pouvez définir la classe ou l'ID de table pour avoir les propriétés "pixel" par défaut. Ensuite, vous auriez seulement besoin de spécifier les classes "occupées".

ex) <table id="gridTable">..<td> au lieu de <table>..<td class="pixel">

Si vous pouvez utiliser jquery (javascript), alors vous pouvez l'utiliser en même temps que les sélecteurs CSS pour changer les classes de vos cellules « occupé » seulement. Au lieu de boucler toutes les cellules (60x40 = 2400), il suffirait de marquer les cellules occupées.

Addition: Maintenant que je pense plus, la solution javascript peut être trop lent/dérangerais il vaut la peine. Vous pourriez faire quelque chose comme ce qui suit, en gardant à l'esprit que c'est plus pseudocode puis une réponse exacte et non testée.

<?php 
$results = fromDB; 
//ex) ['i' => 3, 'j' => 28, 'color' => 'red'] 
?> 
<script> 
    $(document).ready(function() { 
    <?php 
    foreach ($results as $r) { 
     $i = $r['i']; 
     $j = $r['j']; 
     $color = $r['color']; 

     echo "$('#gridTable tr:eq($j) td:eq($i)').setClass('occupied')"; 
     // OR 
     //echo "$('#gridTable tr:eq($j) td:eq($i)').css('background','$color')"; 

    } 
    ?> 

    }); 

</script> 

En résumé, le code HTML sera statique. <table id="gridTable">, <td></td>. PHP sera utilisé pour obtenir des données de la base de données. Le tableau PHP des paires de lignes-colonnes (i, j) sera bouclé et renvoyé en écho dans les instructions javascript (jquery).

Cela peut être excessif pour vos besoins, mais devrait se prêter à une extension supplémentaire.

+0

Cela semble intéressant mais je ne suis pas vraiment sûr de savoir comment faire. Je veux dire comment dois-je générer la table, devrait-elle être statique en HTML? S'il vous plaît expliquer plus en détail. –

+0

OK, je comprends. J'ai vraiment besoin d'obtenir non seulement les coordonnées de la base de données, mais aussi le champ de couleur ET l'utiliser quand je définis la classe. Comment puis-je y arriver? Parce que maintenant je ne peux que définir une classe générique "occupée", je veux utiliser la couleur choisie par l'utilisateur et définir la cellule à cela. Vraiment reconnaissant! –

+0

Si vous êtes seulement concerné par la couleur, vous pouvez faire '.css ('background-color', '$ color');' à la place de, ou en plus de '.setClass', où vous obtenez' $ color' par votre base de données, ou d'autres moyens –

Questions connexes