html форма не отправляет POST - PullRequest
0 голосов
/ 12 июля 2020

Я работаю над игрой «Камень, ножницы, бумага», чтобы попрактиковаться в моих html и php, все было в порядке, пока я не попытался отправить выбранный пользователем ответ в POST. Я проверял, и при нажатии button Play ничего не отправляется.

Это мой html код:

<code><html>
    <head>
        <title>Oscar Felipe Ramírez Pardo</title>
        <meta charset="UTF-8">
    </head>
    <body>
        <h1>Rock Paper Scissors</h1>
        <p>Welcome: <?=htmlentities($_GET['name'])?></p>
        <forms method="POST">
            <p>
                <select name="option">
                    <option value="Select" checked>Select</option>
                    <option value="Rock">Rock</option>
                    <option value="Paper">Paper</option>
                    <option value="Scissors">Scissors</option>
                    <option value="Check">Check</option>
                </select>
                <input type="submit" value="Play" name="dopost">
                <input type="button" value="Logout" name="logout"></p>
        </forms>
        <pre>
<?php
foreach($rslt as $k => $v){
    echo $v."\n";
}
?>
        

И это элемент управления модели перед ним:

<?php
    $rslt=array("Please select a strategy and press Play.");
    $names=array("Rock","Paper","Scissors");

    if(!isset($_GET['name'])) die("Name parameter missing");
    if(isset($_POST['logout'])){
        header("Location: login.php");
        return;
    }

    function play($h){
        $c=$names[rand(0,2)];
        if($h===$c) $r="Tie";
        else if($h==="Rock" && $c==="Scissors") $r="You win.";
        else if($h==="Scissors" && $c==="Paper") $r="You win.";
        else if($h==="Paper" && $c==="Rock") $r="You win.";
        else $r="You lose.";
        return "Your Play=$h Computer Play=$c Result=$r";
    }

    
    
    if(isset($_POST['option'])){
        if($_POST['option']==="Select") $rslt=array("You must select a strategy in order to play.");
        else if($_POST['option']==="Check"){

        }
        else{
            $rslt=array(play($_POST['option']));
        }
    }
?>

Я ничего не получаю при нажатии любой кнопки , как показано здесь. , но исходный код показывает первая php переменные распознаются .

Ответы [ 3 ]

0 голосов
/ 12 июля 2020

Не только forms это неправильно, у вас также может быть неопределенная ошибка при игре. Добавьте global $names в свою функцию play. и добавить результат в p или другой тег вместо textarea лучше читать

$rs = 1;
$rslt = "Please select a strategy and press Play.";
$names = array("Rock", "Paper", "Scissors");

if (!isset($_GET['name'])) die("Name parameter missing");
if (isset($_POST['logout'])) {
  header("Location: login.php");
  return;
}

function play($h)
{
  global $names;
  $c = $names[rand(0, 2)];
  if ($h === $c) $r = "Tie";
  else if ($h === "Rock" && $c === "Scissors") $r = "You win.";
  else if ($h === "Scissors" && $c === "Paper") $r = "You win.";
  else if ($h === "Paper" && $c === "Rock") $r = "You win.";
  else $r = "You lose.";
  return "Your Play=$h Computer Play=$c Result=$r";
}


if (isset($_POST['option'])) {
  if ($_POST['option'] === "Select") $rslt = "You must select a strategy in order to play.";
  else if ($_POST['option'] === "Check") {

  } else {
    $rslt = play($_POST['option']);
  }
}

?>

<html>
<head>
  <title>Oscar Felipe Ramírez Pardo</title>
  <meta charset="UTF-8">
</head>
<body>
<h1>Rock Paper Scissors</h1>
<p>Welcome: <?= htmlentities($_GET['name']) ?></p>
<form method="POST">

    <select name="option">
      <option value="Select" >Select</option>
      <option value="Rock">Rock</option>
      <option value="Paper">Paper</option>
      <option value="Scissors">Scissors</option>
      <option value="Check">Check</option>
    </select>
    <input type="submit" value="Play" name="dopost">
    <input type="button" value="Logout" name="logout">
  <p style="font-family:monospace">
                <p>
<?= $rslt ?>
                </p>
  </p>
</form>
</body>
</html>
0 голосов
/ 12 июля 2020

Я также обнаружил, что кнопка выхода из системы не работает, так как ее тип - button, а не submit, поэтому сообщение не было отправлено, а isset($_POST['logout']) никогда не работал.

0 голосов
/ 12 июля 2020

Я думаю, что вы неправильно написали тег <form> на <forms>, и вам нужно добавить действия, чтобы указать php страницу, которую вы хотите вызвать.

Вот так:

<form method="POST" action="test.php">
            <p>
                <select name="option">
                    <option value="Select" checked>Select</option>
                    <option value="Rock">Rock</option>
                    <option value="Paper">Paper</option>
                    <option value="Scissors">Scissors</option>
                    <option value="Check">Check</option>
                </select>
                <input type="submit" value="Play" name="dopost">
                <input type="button" value="Logout" name="logout"></p>
        </form>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...