【问题标题】:Radio button and PHP单选按钮和 PHP
【发布时间】:2017-04-04 21:13:26
【问题描述】:

我有一个关于 html 中的单选按钮和链接到 php 的问题。而且我不知道如何在没有名称部分的情况下链接它,因为我需要名称全部为 1,否则您可以选择每个单选按钮。我的第二个问题是如何将按钮链接到 php.ini 中。

这是我的 HTML 代码:

<!DOCTYPE html>
<html>
    <head>
        <title></title>
    </head>
    <body>
        <h1>Pizza</h1>
        <form method="POST" action="pizza.php">
            Wat op pizza:<br>
            <input type="radio" value="" name="pepperoni">Pepperoni<br>
            <input type="radio" value="" name="ananas">Ananas<br>
            <input type="radio" value="" name="ansjovis">Ansjovis<br>
            <input type="radio" value="" name="broccoli">Broccoli<br><br>
            <input type="submit" value="" name="Bestellen" value="Bestellen"><br>
        </form>
    </body>
</html>

那么我如何说辣香肠被选中echo“你订购了意大利辣香肠披萨”。 这是我的 PHP 代码:

<!DOCTYPE html>
<html>
    <head>
        <title></title>
    </head>
    <body>
    <?php 
        $pep = $_POST["pepperoni"];
        $ana = $_POST["ananas"];
        $ans = $_POST["ansjovis"];
        $bro = $_POST["broccoli"];

    ?>
    </body>
</html>

【问题讨论】:

  • 为您的收音机赋予相同的名称但不同的值。如果您想要倍数,请使用复选框并用作数组。如果您想走那条路线,这是使用复选框 stackoverflow.com/a/18424178/1415724 的示例答案。
  • 您的(隐身)编辑:“我的第二个问题是如何将按钮链接到 php。” - 哦,所以情节变厚了。现在人们已经根据您的原始帖子 stackoverflow.com/revisions/40720784/1 发布了答案,并愿意为此投票。
  • ...我是对的,而不是我的反对意见。

标签: php radio-button


【解决方案1】:

您可以为单选按钮赋予相同的名称和不同的值。所以你可以选择1。

<!DOCTYPE html>
<html>
    <head>
        <title></title>
    </head>
    <body>
        <h1>Pizza</h1>
        <form method="POST" action="pizza.php">
            Wat op pizza:<br>
            <input type="radio" value="Pepperoni" name="type">Pepperoni<br>
            <input type="radio" value="Ananas" name="type">Ananas<br>
            <input type="radio" value="Ansjovis" name="type">Ansjovis<br>
            <input type="radio" value="Broccoli" name="type">Broccoli<br><br>
            <input type="submit" name="Bestellen" value="Bestellen"><br>
        </form>
    </body>
</html>

在 PHP 中你可以阅读

<?php
echo $_POST['type']; //Pepperoni, ananas(pineapple?) etc. 
?>

祝你好运!

【讨论】:

  • 最好将该 php 包装在条件语句中,原因有几个。收音机使用isset() btw,如果你想编辑它。
  • 你说得对,但我只回答他的问题。最适合用户的是使用分配给名称的数字的选择。
  • 您是否注意到 OP 对他们的问题进行了(秘密)编辑?重新加载它以查看他们添加的内容。这实际上很微妙,但有很大的不同。
  • 这也容易受到 XSS 攻击。更不用说它会抛出关于未定义索引的通知,因为您没有先检查提交的数据。
  • @ChristianF 如何对 XSS 开放单选按钮?
【解决方案2】:

单选按钮让用户只选择有限数量的选项中的一个,对于您的单选按钮,您需要为特定的项目组提供一个名称属性。然后会有不同的值。

您的表单应如下所示:

<!DOCTYPE html>
<html>
    <head>
        <title></title>
    </head>
    <body>
        <h1>Pizza</h1>
        <form method="POST" action="pizza.php">
            Wat op pizza:<br>
            <input type="radio" value="pepperoni" name="pizzaType">Pepperoni<br>
            <input type="radio" value="ananas" name="pizzaType">Ananas<br>
            <input type="radio" value="ansjovis" name="pizzaType">Ansjovis<br>
            <input type="radio" value="broccoli" name="pizzaType">Broccoli<br><br>
            <input type="submit" value="Bestellen" name="Bestellen" value="Bestellen"><br>
        </form>
    </body>
</html> 

正如您在上面看到的,所有收音机都具有相同的名称属性 PizzaType

然后在 Pizza.php 上,您需要在单击提交按钮时执行脚本,然后检查是否选择了选项,如果选择了选项则返回用户选择的选项,如果他们没有返回用户的消息必须至少选择一个项目。

您的 Pizza.php 应如下所示:

<?php


    if(isset($_POST['Bestellen'])){ //button clicked

        if(isset($_POST['pizzaType'])){//check if choice is checked

            echo "You ordered ".$_POST['pizzaType']. " pizza";

        }else{

            echo "Please select an option";
            die();
        }


    }
?> 

注意:为了您自己的利益,您还需要学习如何validate and sanitize user inputs. 这非常重要,您必须始终将表单提交视为来自非常危险的黑客,这非常在使用之前过滤和清理用户输入很重要。

【讨论】:

    【解决方案3】:

    如果您选择比萨饼,您可以只选择 1。因此,您必须为每个收音机指定名称 PizzaName,例如,您可以使用名称 (pepperoni)。如果您按下提交,那么您可以像这样使用 PHP 文件读取值:

    $chosenPizza = $_POST['pizzaName'];
    echo $chosenPizza;
    

    输出将是pepperoni

    【讨论】:

    • 这也是对 XSS 开放的。
    • 是的,我知道是对的,但我的意思是他没有要求提供跨端脚本保护,但是你是对的 :D 但是你如何在那里使用 XSS?只需更改输入的值?
    • @ChristianF 我希望你不会因为这些 XSS 的东西而对答案投反对票。我不是在这里责怪你,但你在 XSS 方面做了一些 cmet。
    • 是的,因为数据来自客户端,所以可以更改为任何内容。包括使用不良数据重定向用户的第三方网站,或试图攻击披萨店本身的恶意用户。
    • @Fred-ii-:不,我没有。万一你没有注意到,在我评论 XSS 问题之前很久,除了一个答案之外,所有答案都被否决了。我反对的答案是那些不回答问题的人。我评论它的原因是因为我觉得教新程序员不安全的代码是不负责任的,因为我们没有合理的方式期望他们知道得更好。
    【解决方案4】:

    不要使用不同的名称,而是让所有名称都相同,然后输入您现在拥有的名称和值。然后使用$val = $_POST["yourvalue"];获取值

    例如:

    <input type="radio" value="ananas" name="samenameforall">
    $val = $_POST["samenameforall"];
    

    【讨论】:

      【解决方案5】:

      您在这里有点误用了 radio 标记属性。披萨的类型应该是值,而不是单选按钮的名称。因此,如果您将名称更改为type,您可以在 PHP 中使用以下行(安全地)回显用户的选择:

      // If we have something submitted, process the form,
      if (isset ($_POST['order'])) {
          // Pepperonies are special!
          if ($_POST['type'] == 'pepperoni') {
              $output = "Congrats! You ordered pepperoni!";
          } else {
              // Use of htmlspecialchars () to prevent XSS attacks.
              $output = "You ordered ".htmlspecialchars ($_POST['type'], ENT_QUOTES, 'UTF-8')." pizza.";
          }
      }
      
      ?>
      <!DOCTYPE html>
      <html>
          <head>
              <title></title>
          </head>
          <body>
              <h1>Pizza</h1>
              <form method="POST" action="pizza.php">
                  <fieldset>
                      <legend>Wat op pizza:</legend>
      
                      <input type="radio" id="pepp" value="pepperoni" name="type"><label for="pepp">Pepperoni</label>
                      <input type="radio" id="anna" value="ananas" name="type"><label for="anna">Ananas</label>
                      <input type="radio" id="ansj" value="ansjovis" name="type"><label for="ansj">Ansjovis</label>
                      <input type="radio" id="brocc" value="broccoli" name="type"><label for="broc">Broccoli</label>
                  </fieldset>
      
                  <fieldset>
                      <input type="submit" name="order" value="Bestellen">
                  </fieldset>
              </form>
      
      
      <?php
      
      // Only show output if there is something to show.
      if (!empty ($output)) {
          echo "<p>$output</p>";
      }
      
      ?>
          </body>
      </html>
      

      注意这里使用htmlspecialchars (),因为它用于防止XSS attacks

      【讨论】:

      • 注意:未定义索引:在第 11 行输入 C:\xampp\htdocs\pizza2.php 注意:未定义索引:在第 15 行输入 C:\xampp\htdocs\pizza2.php跨度>
      • @user7147407 刚刚更新了代码,因为我注意到我错过了一些更改。对此感到抱歉。
      • 致那些反对我的答案的人:请解释原因。
      • 我没有DV,但是htmlspecialchars()究竟是如何在这里防止XSS的?
      • @JayBlanchard PHP 手册解释了如何:php.net/manual/en/function.htmlspecialchars.php 请记住,POST 数组中的值是由客户端生成的,因此可以包含 anything
      【解决方案6】:

      使用单选按钮时,您应该使用与单选元素相同的名称对它们进行分组。看看这个:

      <!DOCTYPE html>
      <html>
      <head>
          <title></title>
      </head>
      <body>
          <?php 
              $toppings = filter_input(INPUT_POST, "toppings");
          ?>
          <h1>Pizza</h1>
          <form method="POST" action="pizza.php">
              Wat op pizza:<br>
              <input type="radio" value="pepperoni" name="toppings">Pepperoni<br>
              <input type="radio" value="ananas" name="toppings">Ananas<br>
              <input type="radio" value="ansjovis" name="toppings">Ansjovis<br>
              <input type="radio" value="broccoli" name="toppings">Broccoli<br><br>
              <input type="Submit" value="Bestellen">
      
              <?php
              echo "<br>";
              if($toppings != "") {
                  echo "You ordered $toppings pizza. ";
              }
              ?>
          </form>
      </body>
      

      【讨论】:

      • 不是我的反对意见,但这会立即引发未定义的索引通知,并且 OP 询问如何添加超链接。
      • 这很容易受到 XSS 攻击!
      • @ChristianF 我改成 filter_input ^_^
      • @ChristianF 这个问题没有问如何防止 XSS 注入,恕我直言,这是一个不好的问题。另外,许多人已经根据他们之前的原始帖子stackoverflow.com/revisions/40720784/1 发布了答案,而且很可能被否决了;我可以诚实地说不是我的东西。这个问题太宽泛了;他们什么都没试过。
      【解决方案7】:
              <input type="radio" value="pepperoni" name="type">Pepperoni<br>
              <input type="radio" value="ananas" name="type">Ananas<br>
              <input type="radio" value="ansjovis" name="type">Ansjovis<br>
              <input type="radio" value="broccoli" name="type">Broccoli<br><br>
      

      这样做。

      【讨论】:

      • 虽然这段代码 sn-p 可以解决问题,但它没有解释为什么或如何回答这个问题。请include an explanation for your code,因为这确实有助于提高您的帖子质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。 举报者/评论者: For code-only answers such as this one, downvote, don't delete!
      • 好的,下次我会记住的,不好意思这样发帖,
      • 我的评论不仅仅是要求你下次做得更好,你甚至可以improve这个帖子!为此,只需单击帖子左下角的edit 按钮。改进您的帖子可能会导致其他用户删除他们的反对意见和/或支持您的帖子。
      猜你喜欢
      • 2016-07-11
      • 2012-01-07
      • 2023-04-06
      • 1970-01-01
      • 2012-04-05
      • 2013-03-28
      • 2013-06-22
      • 2015-03-11
      • 2013-10-07
      相关资源
      最近更新 更多