игра линкор php не работает - PullRequest
0 голосов
/ 16 ноября 2009

Хорошо, у меня есть частично работающая игра, я знаю, что решения должны быть простыми с точки зрения игрового процесса, но для нуба нет ничего простого, поэтому здесь, я как нуб, прошу помощи, что я делаю неправильно, я думаю, что это способ установки флажков, но мне нужны другие глаза, спасибо.

<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>  

Ответы [ 3 ]

2 голосов
/ 16 ноября 2009

Несколько вещей, которые я вижу неправильно:

  • echo "<td><input type='checkbox' type='submit' checked='checked' name='$i$j'></td>"; имеет два атрибута типа.
  • <input type="hidden" name="step" value="<?php echo "$step"; ?>" не закрывает тег ввода.
  • Вы не закрываете тег таблицы.

Попробуйте запустить страницу через онлайн-службу проверки html или используйте дополнение проверки firefox , чтобы проверить страницу и исправить ошибки в html.

Другая проблема заключается в том, что вы не проверяете все свои данные от пользователя. то есть. ваши $_REQUEST данные. Это может привести к межсайтовому скриптингу и может быть опасным для пользователей. Хотя в этом примере это только тривиально, проверка входных данных пользователя является хорошей практикой, которую нужно использовать во всех ситуациях.

0 голосов
/ 22 ноября 2018

Я думаю, что вы можете создать метод 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>&nbsp;</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>
0 голосов
/ 16 ноября 2009

Я думаю, что это может помочь вам с вашим кодом и отладкой, чтобы отделить основной php от html.

У вас есть большие блоки 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...