好的,所以我有这个部分工作的游戏,我知道解决方案在游戏方面应该很简单,但是对于一个菜鸟来说没有什么是简单的,所以在这里,我要求帮助,作为一个菜鸟,我是什么做错了,我认为这是我设置复选框的方式,但我需要其他的眼睛,谢谢。
<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>
答案 0 :(得分: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并且可能对用户造成危险。虽然在这个例子中这只是微不足道的,但用户输入验证是一个很好的做法,可以适应所有情况。
答案 1 :(得分:0)
我认为它可以帮助您完成代码和调试,将主要的php从html中分离出来。
你的html中间有大块的php,这使你很难看到你可能遇到问题的地方。它也更容易不回显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中使用单引号或双引号。
答案 2 :(得分:0)
我认为您可以创建一个php方法,该方法可以为您创建单元格,然后调用它,而不是像您那样将所有内容放在一起,这在其中很难阅读和理解。
<?php
function createCells(){
$cells.='';
for ($i = A; $i < K; $i++){
$cells.='<tr>
<td class="index ng-binding">'.$i.'</td>';
for ($j = 1; $j < 11; $j++){
$cells.='<td class="gameCell state_0"><input type='checkbox' checked='checked' disabled='disabled' name='.$i.''.$j.'></td>';
}
$cells.='</tr>';
}
return $cells;
}
?>
<table cellpadding="5" cellspacing="5" border="0" id="gameTable">
<thead>
<tr><td> </td>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
<td>7</td>
<td>8</td>
<td>9</td>
<td>10</td>
</tr>
</thead>
<tbody>
<?php echo reateCells(); ?>
</tbody>
</table>