【问题标题】:PHP - making a switch statement using id from form inputPHP - 使用表单输入中的 id 创建一个 switch 语句
【发布时间】:2012-05-25 17:26:25
【问题描述】:

我正在用 PHP 做一个简短的测验,根据 4 个是/否问题告诉你你的想法是什么生物。我已经做到了,根据你对每个问题的回答,你会被带到不同的问题,我主要使用 switch 语句来做到这一点。

我的问题是,我有什么方法可以使用表单中的提交按钮中的 id 作为条件的 switch 语句?

      echo "<form method ='post' action='Creatures.php'>
     <input type='submit' name='answer' id='1' value='Yes' />
     <input type='submit' name='answer' id='2' value='No' />
     </form>";

这是我用来显示按钮的表单,我已经做到了,以便每个按钮都有不同的 id,所以在测验结束时,根据最后按下的按钮的 id 是什么,我可以显示正确答案。以下是我尝试执行的操作,但没有成功。

switch($_POST['id'])
{
 case 1: echo "It's a goldfish";
 case 2: echo "It's a eel";
}

此外,这些字段是唯一在整个网页中使用 id 的字段,有什么建议可以让我正常工作,而不一定要使用 switch 语句?

【问题讨论】:

  • $_POST 中的名称对应于输入的name 属性,因此它将是 $_POST['answer'] 和 case 'Yes', 'No'
  • 感谢您的工作,我尝试使用 id,因为我有 16 个可能的答案可供选择,但其中一半被称为是,一半被称为否(从用户按下测验中的按钮)所以我必须写 8 个 switch 语句,一定有比这更好的方法。
  • 然后使用数字作为值:&lt;input type='submit' name='answer' id='2' value='2' /&gt;
  • 这会改变提交按钮的标签。而是使用问题的 id 值添加隐藏输入 &lt;input type="hidden" name="id" value="2"&gt; 然后你有 $_POST['id']$_POST['answer']
  • 谢谢!现在工作正常,不知道输入 type=hidden。

标签: php forms switch-statement


【解决方案1】:
switch($_POST['answer']) {

case 'Yes':
   // do soemthing
   break;
case 'No':
   // do something
   break;
}

【讨论】:

  • 我已经完成了你所说的一切并添加了一个隐藏的输入字段,所以它现在可以工作了,yaayyy!
【解决方案2】:

这有很多错误。请研究以下内容:

echo '<form method ="post" action="Creatures.php">
<button name="answer" type="submit" value="Yes">Yes</button>
<button name="answer" type="submit" value="No">No</button>
</form>';

switch($_POST['answer'])
{
   case 'Yes':
        echo "It's a goldfish";
        break;
   case 'No':
        echo "It's a eel";
        break;
}

另见thisthis

【讨论】:

    【解决方案3】:

    这行不通。当浏览器以键值对的形式将数据从您的表单发送到服务器时。键是您的表单名称,值是输入的值。

    所以要获得输入名称答案的值,请使用$_GET['answer'];

    这会给你“是”或“否”,因为这些是价值观。您还应该进行一些错误检查,因为人们可以向您的服务器发送任意数据,例如有人可以访问yoursite.com/creatures.php?answer=somerandomstuffthatidontexpect

    【讨论】:

      【解决方案4】:

      除非你用 jQuery/js 来做,否则你会很吃力。不同的浏览器会对此有不同的解释(自己的经验),所以只需使用 jQuery 方式 :)

      http://www.vancelucas.com/blog/ie6-and-multiple-button-submit-elements/ - 这应该会有所帮助

      【讨论】:

        【解决方案5】:

        你需要

        break;
        

        在每个语句之后并且您的表单输入错误(answer 而不是id)。 NAME 属性决定了 POST 数组中的键(ID 仅用于客户端 css 和 javascript)。

        正如 tigrang 所指出的,值是发布的内容,而不是 ID,所以数组看起来像:

        $_POST['answer']='是'

        所以你的陈述是

        switch($_POST['answer'])
        {
         case 'Yes': echo "It's a goldfish";break;
         case 'No': echo "It's a eel";break;
        }
        

        【讨论】:

        • 并切换“是”和“否” - 请参阅我的评论
        【解决方案6】:
        <form method ='post' name="formAnswer1" action=''>
            <input type='submit' name='answer' value='Yes' />
        </form>
        
        <form method ='post' name="formAnswer2" action=''>
            <input type='submit' name='answer' value='No' />
        </form>
        
        <?php
        switch($_POST['answer'])
        {
           case 'Yes': echo "Yes";
           break;
        
           case 'No': echo "No";
           break;
        }
        ?>
        

        【讨论】:

        • 因为你有相同的 name='answer' 他们不能同时是 2 除非你将它们定义为像 name='answer[]' 这样的数组
        • 但只有 1 个被发布。它们是提交按钮。
        【解决方案7】:

        这个怎么样?

        switch(key($_POST['answer']))
        {
        case 1: 
            echo "answer 1"; break;
        case 2: 
            echo "answer 2"; break;
        }
        echo "<form method ='post' action='/tmp/test.php'>
        <input type='submit' name='answer[1]' value='Yes' />
        <input type='submit' name='answer[2]' value='No' />
        </form>";
        

        我认为它会按照您想要的方式工作。但是你的方法有点违反程序员 POV 的直觉;考虑使用单选按钮 + 提交按钮。

        【讨论】:

          【解决方案8】:

          我试图将 $_GET 与 switch 语句一起用于我自己的课程修订。这对我有用。这个想法是根据在表格上输入的成绩来显示一些东西。

           <form action="processGrade.php" method "get">
           Enter your grade: <input type = "text" name ="grade">
           <input type = "submit">
           </form>
          

          //在我的processGrade.php表单上:

          <?php
          echo "You have entered: ".$mygrade = $_GET['grade'].". ";
          
          switch($mygrade){
          
          case 100:
              echo " Your grade is A";
              break;
          
          case 70:
              echo " Your grade is B+";
              break;
          
          default: echo "Ungraded";
          }
          ?>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-09-30
            • 1970-01-01
            • 1970-01-01
            • 2022-12-18
            • 1970-01-01
            相关资源
            最近更新 更多