2009-11-16 103 views
0

好吧,所以我有这个部分工作的游戏,我知道解决方案应该是简单的游戏玩法,但对于noob而言,没有什么是简单的,所以在这里,我请求帮助,作为noob,我做错了什么,我认为这是我设置复选框的方式,但我需要其他的眼睛,谢谢。php战列舰游戏不工作

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" /> 
<table border="1" align="center" /> 
<?php 
$fire = $_REQUEST["fire"]; 
$variable = $_REQUEST["variable"]; 
$step = $_REQUEST["step"]; 
$i = $_REQUEST["i"]; 
$j = $_REQUEST["j"]; 

if(isset($_POST['$i$j'])) 
{ 
echo 'checked'; 
} 

//first there will be script that randomly generate 5 ships for both users 

$step = $_POST['step']; 
//4 steps of the game 
if ($step > 3) 
{ 
    $step = 1; 
} 
else 
{ 
    $step += 1; 
}//end if 
//step 1, first player 
if ($step == 1) 
{ 
    echo "Player 1"; 
// Loop through the alphabet from a to j and stop before k on this for loop 
    for ($i = a; $i < k; $i++) 
{ 
// Print out the table with the letters from a to j using the variable $i 
    echo "<tr><td width='20' align='right'>$i</td>"; 
    // Loop through the numbers for $j using numbers from 1 to less than 11 which is 10; 
     for ($j = 1; $j < 11; $j++) 
    { 

    echo "<td><input type='submit' value='fire' name='$i$j'></td>"; 
     } 
    // end for loop 
    echo "</tr>"; 
    } 
// end for loop 
    echo "<tr><td></td>"; 

for ($j = 1; $j < 11; $j++) 
{ 

    echo "<td>$j</td>"; 
    } 
    echo "</tr></table>"; 
    //step 2 result of first player fire 
} 

else if($step == 2) 
{ 

    echo "Result 1"; 
     for ($i = a; $i < k; $i++) 
    { 

    echo "<tr><td width='20' align='right'>$i</td>"; 
     for ($j = 1; $j < 11; $j++){ 
     //<input type="checkbox" name="state[]" value="NE"> 
     echo "<td><input type='checkbox' type='submit' checked='checked' name='$i$j'></td>"; 
     } // end for loop 
    echo "</tr>"; 
    } // end for loop 
    echo "<tr><td></td>"; 
    for ($j = 1; $j < 11; $j++){ 
    echo "<td>$j</td>"; 
    } 
    echo "</tr></table><br><input type='submit' name='' value='Player 2 Turn'>"; 
    //step 3 second player fireing 
} else if($step == 3) { 
    echo "Player 2"; 
    for ($i = a; $i < k; $i++){ 
    echo "<tr><td width='20' align='right'>$i</td>"; 
     for ($j = 1; $j < 11; $j++){ 
     echo "<td><input type='submit' value='fire' name='$i$j'></td>"; 
     } // end for loop 
    echo "</tr>"; 
    } // end for loop 
    echo "<tr><td></td>"; 
    for ($j = 1; $j < 11; $j++){ 
    echo "<td>$j</td>"; 
    } 
    echo "</tr></table>"; 
    //step 4 result of second player fire 
} else { 
    echo "Result 2 "; 
    for ($i = a; $i < k; $i++){ 
    echo "<tr><td width='20' align='right'>$i</td>"; 
     for ($j = 1; $j < 11; $j++){ 
     echo "<td><input type='checkbox' checked='checked' disabled='disabled' name='$i$j'></td>"; 
     } // end for loop 
    echo "</tr>"; 
    } // end for loop 
    echo "<tr><td></td>"; 
    for ($j = 1; $j < 11; $j++){ 
    echo "<td>$j</td>"; 
    } 
    echo "</tr></table><br><input type='submit' name='' value='Player 1 Turn'>"; 
}//end if 
for ($j = 1; $j < 11; $j++){ 
     if ($checked){ 
     echo "<td><input type='checkbox' checked='checked' name='variable'></td>"; 
     } else { 
     echo "<td><input type='checkbox' name='variable'></td>"; 
     } 
     } 

?> 

<input type="hidden" name="step" value="<?php echo "$step"; ?>" 
</form> 
</center> 
</html> 
+5

你有什么确切的问题? – Ikke 2009-11-16 12:21:58

+4

听起来有点太“为我做我的工作”......描述:1.应该发生什么? 2.哪种方式不会发生?然后,将您的代码编写到您认为重要的部分,然后询问您想问 – 2009-11-16 12:23:57

回答

2

一对夫妇的事情,我看不对:

  • echo "<td><input type='checkbox' type='submit' checked='checked' name='$i$j'></td>";有两种类型的属性。
  • <input type="hidden" name="step" value="<?php echo "$step"; ?>"不关闭输入标签。
  • 您不关闭您的表格标签。

尝试通过online html validation service运行您的页面或使用firefox validation addon验证页面并修复您的html中的错误。

另一个问题是,您不验证来自用户的所有输入。即。您的$_REQUEST数据。这可能会导致Cross-site scripting,并且可能会对用户造成危险。尽管在这个例子中这只是微不足道的,但用户输入验证是在所有情况下都可以使用的一个好习惯。

+0

+1这样的问题以便实际阅读并发现问题...... – cjk 2009-11-16 12:49:02

+0

是的,我对复选框有疑问,我会回顾 设置复选框的正确方法,谢谢。对于这两种类型的属性,我应该能够合并一个数组的权利? 有点像名字[] []?我刚刚了解到这些,我认为他们很酷。我可能会跳过$ _REQUEST,我仍然在学习会话和cookie,以及如何正确使用它们。 – Newb 2009-11-16 15:44:37

+0

指定两种类型与名称没有任何关系。你需要将你的输入设置为'input type ='checkbox'checked ='checked'name ='$ i $ j'>'type ='submit''使你的复选框变成一个提交按钮。至于名称,你可以使用'name ='node [$ i] [$ j]'来获取php中的多维数组。你可以用你想要的任何字符串替换'node'。 – MitMaro 2009-11-16 17:27:55

0

我认为它可能会帮助你用你的代码和调试,从PHP中分离出主要的PHP。

你有大量的PHP正好在你的html中,这使得它很难看到你可能有什么问题。不要回显html代码,而是把它写成html,然后从需要的变量中放入php中也更容易。

例如:

这是有点杂乱

<?php 
echo "Result 2 "; 
    for ($i = a; $i < k; $i++){ 
    echo "<tr><td width='20' align='right'>$i</td>"; 
     for ($j = 1; $j < 11; $j++){ 
     echo "<td><input type='checkbox' checked='checked' disabled='disabled' name='$i$j'></td>"; 
     } // end for loop 
    echo "</tr>"; 
    } // end for loop 
    echo "<tr><td></td>"; 
    for ($j = 1; $j < 11; $j++){ 
    echo "<td>$j</td>"; 
    } 
    echo "</tr></table><br><input type='submit' name='' value='Player 1 Turn'>"; 
?> 

而这有点整洁。

<?php 
echo "Result 2 "; 
    for ($i = a; $i < k; $i++){ 
?> 

<tr> 
    <td width='20' align='right'><?php echo $i; ?></td>"; 

    <?php 
     for ($j = 1; $j < 11; $j++){ 
    ?> 

    <td><input type='checkbox' checked='checked' disabled='disabled' name='<?php echo $i$j; ?>' /></td> 

    <?php 
     } // end for loop 
    ?> 

</tr> 

    <?php 
    } // end for loop 
    ?> 

    <tr> 
     <td></td> 

     <?php 
     for ($j = 1; $j < 11; $j++){ 
     ?> 

     <td><?php echo $j; ?></td> 

     <?php 
     } 
     ?> 

    </tr> 
</table> 
<br /> 
<input type='submit' name='' value='Player 1 Turn' /> 

这使得它看起来像更多的代码,但它更多的是行间距。由于你有很多for声明并没有什么帮助,但是如果你使用的是带有标签突出显示的编码程序或类似的东西,那么你至少有更好的机会找到html错误,它可以帮助你让你的php更具可读性。

不回显html代码也释放了在HTML中使用单引号或双引号。

+0

这些日子有人真的写了一堆乱七八糟的HTML内容吗? – n0rd 2009-11-16 14:43:18

+0

将修复并使其更容易的眼睛和调试,谢谢。 – Newb 2009-11-16 15:46:29