【问题标题】:Radio button on form field always submitting as ON/TRUE表单字段上的单选按钮始终提交为 ON/TRUE
【发布时间】:2011-05-12 07:49:21
【问题描述】:

我有一个相当基本的表单,其中包含一个单选按钮的输入字段。

有一个 php 脚本可以处理表单并将值插入 mysql 数据库。出于某种原因,每次我填写表格时,无论我是否选择了收音机,结果总是 ON/TRUE。

这是我的输入框:

<input type="radio" name="news" id="news" class="radio" value="yes" />

这是应该处理的 PHP 代码的一部分:

if(isset($_POST['news']))
{
$news = "Yes";
}
else
{
$news = "No";
}

谁能告诉我该代码有什么问题,或者我需要发布更多内容吗?

这是完整的表单代码:

<form method="POST" id="ipad" name="ipad" action="list.php">
<input type="text" onfocus="if (this.value == 'First Name') {this.value = '';}" onblur="if (this.value == '') {this.value = 'First Name';}" value="First Name" id="fname" name="fname" class="inputtext">


<input type="text" onfocus="if (this.value == 'Last Name') {this.value = '';}" onblur="if (this.value == '') {this.value = 'Last Name';}" value="Last Name" id="lname" name="lname" class="inputtext">

<input type="text" onfocus="if (this.value == 'Email') {this.value = '';}" onblur="if (this.value == '') {this.value = 'Email';}" value="Email" id="email" name="email" class="inputtext">

<input type="text" onfocus="if (this.value == 'Code') {this.value = '';}" onblur="if (this.value == '') {this.value = 'Code';}" value="Code" id="code" name="code" class="inputtext">


<input type="radio" value="" class="radio" id="news" name="news">
<div class="radiotext">sign up?</div>

  </form>

请注意,单选按钮输入没有应用任何 javascript。我尝试用 YES 或 NO 填写 value="" 或将其留空。

【问题讨论】:

    标签: php forms webforms


    【解决方案1】:

    您需要测试单选按钮的。该变量将始终存在,因此isset() 必然会始终返回 true。

    if(!empty($_POST['news']) and ($_POST['news'] == 'yes'))
    

    【讨论】:

    • 抱歉没用。无论如何,答案总是一样。
    • 编写脚本的人说我的页面上有javascript,它总是将单选按钮设置为ON,但事实并非如此。我那里唯一的 javascript 是 jquery 文件。这让我发疯了
    • @Pekkka 谢谢。我刚刚在原始帖子的顶部发布了表单代码。
    • @gteh 你似乎只有一个单选按钮。无论如何,在那种情况下不是选择了一个按钮吗?正常的用例是有多个单选按钮。也许您正在寻找的是一个复选框?
    • 我也尝试了一个复选框,同样的事情发生了。我只有一个单选按钮,因为该字段是可选的,所以我想如果未选中,它将默认为 OFF。我确实把它换成了一个复选框,但我遇到了同样的问题。
    【解决方案2】:
    if (isset($_POST['news']) && $_POST['news'] == 'yes'){
        $news = "Yes";
    }
    else
    {
       $news = "No";
    }
    

    【讨论】:

    • 测试但似乎不起作用..有同样的问题。只有这一次,答案总是“否”而不是“是”。
    • 1.提交之后和之前的 $_POST['news'] 的打印值 (if (isset($_POST['news']) && $_POST['news'] == 'yes')) 条件出现。所以我们开始知道 $_POST['news'] 的价值是什么。 2 如果你用 news = '' 尝试这个条件,那么它会给你结果“No”
    【解决方案3】:

    关于那个 jquery 代码,javascript 不需要在 html 中工作。如果我是你,我会在我的代码中搜索 .attr("checked","checked") 或 .prop("checked");

    【讨论】:

      【解决方案4】:

      你需要像这样解决它......

      您需要在表单中添加hidden 输入,并且当您单击其中一个radio 按钮时,您调用的函数将通过id 更改hidden 输入的值。 . 这是一步一步的:

      1. 在表单中添加一个隐藏的输入并给它一个名称和一个 ID:

        &lt;input type="hidden" id="IsFormer" name="IsFormerValue" value=""&gt;

      2. 为两个单选按钮添加点击属性:

        &lt;input type="radio" id="Former" name="IsFormer" onclick="ToggleIsFormer('Yes')"&gt;

        &lt;input type="radio" id="NotFormer" name="IsFormer" onclick="ToggleIsFormer('No')"&gt;

      3. 在Javascript中添加函数:

        function ToggleIsFormer (Value) { document.getElementById('IsFormer').value = Value; }

      4. 最后,在PHP 中,您使用隐藏输入的名称检查值而不是单选按钮的名称

      这是您代码的上述步骤(先尝试自己动手;)):


      <form method="POST" id="ipad" name="ipad" action="list.php">
          <input type="text" onfocus="if (this.value == 'First Name') {this.value = '';}" onblur="if (this.value == '') {this.value = 'First Name';}" value="First Name" id="fname" name="fname" class="inputtext">
          <input type="text" onfocus="if (this.value == 'Last Name') {this.value = '';}" onblur="if (this.value == '') {this.value = 'Last Name';}" value="Last Name" id="lname" name="lname" class="inputtext">
          <input type="text" onfocus="if (this.value == 'Email') {this.value = '';}" onblur="if (this.value == '') {this.value = 'Email';}" value="Email" id="email" name="email" class="inputtext">
          <input type="text" onfocus="if (this.value == 'Code') {this.value = '';}" onblur="if (this.value == '') {this.value = 'Code';}" value="Code" id="code" name="code" class="inputtext">
      
          <input type="radio" class="radio" id="news" name="news" onclick="ToggleWithNews()">
          <div class="radiotext">Sign up?</div>
      
          <input type="hidden" id="WithNews" name="WithNewsValue" value="No">
      </form>
      
      <script>
          function ToggleWithNews () {
              document.getElementById('WithNews').value = 'Yes';
          }
      </script>
      

      完成!!!


      我的提示:如果您只有 on 选项并且查看器可以打开或关闭该选项,您应该为 Yes 使用 2 个单选按钮,为 No 使用一个单选按钮,因为一个单选按钮一旦被选中将无法取消选中。

      或者

      如果您只想为该选项添加输入,则应使用checkbox 输入,因为可以随时选中和取消选中。


      希望我的回答对你有所帮助:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-12
        • 2021-07-08
        • 1970-01-01
        • 2013-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多