2010-10-25 3 views
0

Je suis en train d'imprimer une grille de 8x8 sur php peut-on vérifier ce code est que je fais quelque chose de malPHP :: Je tente d'imprimer une grille 8x8

 $row = 0; 
    $col = 0; 

    print "<form>"; 
    while ($row <= 8){ 
     print "<tr>"; 
    $row++; 

    while ($col <= 8){ 
    print "<td>"; 
    print "<input type="checkbox" name="battle" value="ships">"; 
    print "</td>"; 
    $col++; 

    } 


    print "</tr>"; 
    ) 
    print "</form>"; 
+2

La syntaxe mise en évidence ici sur SO vous montrera trois erreurs d'analyse. Si vous ne les voyez pas en PHP, ajoutez 'error_reporting (E_ALL);' en haut du fichier. –

+0

En outre, tout bon éditeur utilisera la coloration syntaxique, ce qui rendra les erreurs de syntaxe plus visibles. – JAL

+0

une boucle for vous permettrait d'initialiser, de contrôler et d'incrémenter $ row, $ col en un point. Pour ce code ce serait mieux que while-loops. –

Répondre

0

Utilisez while($row < 8) et while($col < 8) (au lieu de <=) ou bien vous allez imprimer une table 9x9. Utilisez des guillemets simples pour checkbox, battle et ships. Les guillemets externes traiteront l'expression comme "<input type=" , checkbox, " name=", battle, " value=", ships, ">" (une erreur de syntaxe) si vous utilisez des guillemets à l'intérieur.

Pour les problèmes de syntaxe, il est utile d'utiliser un IDE - un bon dans le navigateur serait ideone.com. Vous pouvez activer la coloration syntaxique.

0

Plusieurs questions .. un couple sur bâton:

Vous utilisez la condition $col <= 8. Cela va itérer 9 fois si votre valeur commence à 0, car 0 à 8 est 9 nombres. Lorsque vous travaillez avec la base 0 et que vous comptez finiment, utilisez toujours < (inférieur à) votre maximum, car cela réduit votre numéro de fin de 1, ce qui compense la base 0.

Votre dernière parenthèse fermante doit être une accolade fermante. Vous démarrez le while avec un {, vous devez donc le terminer avec un }, et non ).

2
$out = "<tr>"; 
for($i = 0; $i < 8*8; $i++){ 

    if($i && $i % 8 == 0) 
     $out .= "</tr><tr>"; 

    $out .= "<td>..</td>"; 
} 
$out .= "</tr>"; 

echo $out; 
+0

@hgbso vous avez fait une erreur de performance en utilisant l'impression, je l'ai fait en utilisant des guillemets –

+2

Ceci est une solution plus "intelligente", pour ce cas d'utilisation particulier. Il renonce à la clarté du code en utilisant deux boucles (j'aurais utilisé des boucles imbriquées, moi-même) pour obtenir de meilleures performances. Il ne répond pas aux questions les plus fondamentales de la question, mais c'est un bon exercice de réflexion sur le problème pour trouver des moyens de le faire mieux. –

1

Peu d'erreurs. Le code de droite doit être le suivant:

$row = 0; 
print "<form>"; 
print "<table>"; 
while ($row < 8){ // Counts to 8. (from 0...7 = 8 times. 0 ... 8 = 9 times) 
    print "<tr>"; 
    $row++; 
    $col = 0; // reset column to 0 each time printing one row. 

    while ($col < 8){ 
    print "<td>"; 
    print "<input type=\"checkbox\" name=\"battle\" value=\"ships\">"; 
    // Add \ before " otherwise it will treat as the end of the quote. 
    print "</td>"; 
    $col++; 
    } 

    print "</tr>"; 
} 
print "</table>"; 
print "</form>"; 

Espérons que cela aide.

+0

Ce serait un excellent candidat pour une boucle 'for' ou deux .... – cHao

+0

La même chose peut être faite avec une boucle while. Au lieu de lui donner juste du «code», j'ai essayé d'expliquer où il s'est trompé. – tanjir

Questions connexes