草庐IT

php - html.php 表单将 bool 单选按钮值呈现为 `on`

coder 2024-04-21 原文

所以我有一个包含三个按钮的 html.php 页面:“清除页面”、“检索”和“更新详细信息”。

当用户第一次打开表单时,它是空白的,他们可以输入 id="siteId"值或 id="siteName"值,然后按“检索”按钮以请求存储站点的其余详细信息来自 mySQL 数据库并显示在表单中。

如果用户想要更改/更新任何详细信息,他们可以在相同的表单中执行此操作,然后单击“更新详细信息”按钮将站点的详细信息推送回数据库。

到目前为止一切都(有点)好。但是,在成功显示站点详细信息后(在从数据库中检索到站点详细信息之后)单击“更新详细信息”按钮时,单选按钮表示的任何 bool 数据都将返回为 on,观察到在当前值数组上使用 print_r

对于每个单选按钮,php 条件语句与 html 一起使用,以确定在从数据库检索数据后,应为每个行/字段检查哪个单选按钮。这可能就是为什么当按下更新按钮而不是先前确定的 bool 值时,表单以某种方式为所有单选按钮设置 on 的值吗?

如果是这样,我需要通过条件检查任何给定集合的哪个单选按钮需要检查,那么修复方法是什么?

html.php 页面片段:

  } // close isset IF

?>

  <h1 id="heading">Cell Site Details</h1>


  <!--fieldset id="Site:"-->
    <!--legend>Site:</legend-->
    <div id="formContentDiv">
      <form id="formContent" action="#" method="post" accept-charset="utf-8">
        <input type="hidden" name="submitted" value="true">
        <div id="clearPageDiv">
          <a href="index2.php">
              <input type="button" id="buttonClear" name="clearPage" class="button" value="Clear Page">
            </a>
        </div><!-- closes clearPageDiv -->
        <div id="retreiveDiv">
          <input type="submit" id="buttonRetreive" name="retreive" class="button" value="Retreive">
        </div><!-- closes retreiveDiv -->
        <div id="updateDiv">
          <input type="submit" id="buttonUpdate" name="update" class="button" value="Update Details">
        </div><!-- closes updateDiv -->

        <div class="formRowDiv">
          <label>
            <span>Site Id:</span>
            <input type="text" id="siteId" name="siteId" class="textInputShort" maxlength="" $value=""> 
            <script>
              siteId.value = <?php echo json_encode( ucfirst( $siteId ) ); ?>;
            </script>
          </label>
        </div>

        <div class="formRowDiv">
          <label>
            <span>Site Name:</span>
            <input type="text" id="siteName" name="siteName" class="textInput" maxlength="" $value="test"> 
            <!--input type="submit" value="Retreive"-->
            <script>
              siteName.value = <?php echo json_encode( ucwords( $siteName ) ); ?>;
            </script>
          </label>
        </div>

        <div class="formRowDiv">
          <label>
            <span># HSPA BBUs:</span>
            <input type="text" id="numHspaBbu" name="numHspaBbu" class="textInputShort" maxlength="" $value=""> 
            <script>
              numHspaBbu.value = <?php echo json_encode( $numHspaBbu ); ?>;
            </script>
          </label>
        </div>

        <div class="formRowDiv">
          <label>
            <span># LTE BBUs:</span>
            <input type="text" id="numLteBbu" name="numLteBbu" class="textInputShort" maxlength="" $value=""> 
            <script>
              numLteBbu.value = <?php echo json_encode( $numLteBbu ); ?>;
            </script>
          </label>
        </div>

        <div class="formRowDiv">
          <label><span>Ext. Alarm Terminations:</span></label>
            <label>
              <input type="radio" name="extAlarmsTerminated"
                <?php
                  if ( $extAlarmsTerminated == "hspa" ) {
                    echo 'checked';
                  }
                ?>
              >
              <span>HSPA</span>
            </label>
            <label>
              <input type="radio" name="extAlarmsTerminated"
                <?php
                  if ( $extAlarmsTerminated == "lte" ) {
                    echo 'checked';
                  }
                ?>
              >
              <span>LTE</span>
            </label>
            <label>
              <input type="radio" name="extAlarmsTerminated"
                <?php
                  if ( $extAlarmsTerminated == "hspa-lte" ) {
                    echo 'checked';
                  }
                ?>
              >
              <span>HSPA-and-LTE</span>
            </label>
          </label>
        </div><!-- close formRowDiv -->

var $extAlarmsTerminated 是以下站点详细信息数组中的一个这样的单选按钮组:

$inputVals = array( $siteId, $siteName, $numHspaBbu, $numLteBbu, $extAlarmsTerminated );
    print_r( $inputVals );

print_r 首先显示输出,用户按下检索按钮后显示的 bool 单选按钮值:

Array ( [0] => P6969 [1] => Toledo Centre [2] => 1 [3] => 1 [4] => hspa-lte

print_r 输出显示用户按下更新详细信息按钮后同一站点详细信息的单选按钮值:

Array ( [0] => P6969 [1] => Toledo Centre [2] => 1 [3] => 1 [4] => on )

编辑:
我将从数据库中检索到的每个字段输入值分配给 PHP $_SESSION 变量,当单击“更新详细信息”按钮时,将引用 $_SESSION 变量,这解决了单选按钮被分配 的原始问题

但我仍然无法保存用户可能对详细信息所做的任何更改。我已经研究过 JS/AJAX 作为实现这一目标的可能方法,但我所知道的很少的 JS 让我变得更加危险而不是有用。以下是我在阅读多个类似问题时能够拼凑起来的内容:

<div class="formRowDiv">
      <label>
        <span>Site Name:</span>
        <input type="text" id="siteName" name="siteName" class="textInput" maxlength="" $value="test"> 
        <script>
          siteName.value = <?php echo json_encode( ucwords( $siteName ) ); ?>;
        </script>
      </label>
    </div>
    <script>
      $( document ).ready( function() {
        $( "#siteName" ).on( 'change', function() {
          var siteName = document.getElementById( 'siteName' ).value;
          $.ajax ({
            url: 'ajax.php',
            data: { siteName : siteName },
            success: function( result ) {
              alert( 'Site Name value changed to: ' + siteName );
            }
          });
        });
      });
    </script>

好消息是,当 $siteName 的字段输入值发生变化时,我收到了 JS 警报,回显了 $siteName 的变化值。我创建了在同一目录中引用的 ajax.php 文件,它包含:

<?php
  echo ( $_GET[ 'siteName' ] );
?>

我想我可以通过以下方式访问这个更改后的 $siteName 值:

$siteName = $_GET[ 'siteName' ];

但显然不是。是否确实有一种方法可以访问我认为现在必须存储在 ajax.php 中的这个已更改的 PHP 变量?

最佳答案

尝试分配 value=每个输入复选框的属性,例如您的代码将是:

<input type="radio" name="extAlarmsTerminated" value='HSPA'
    ...
<input type="radio" name="extAlarmsTerminated" value='lte'
    ...
<input type="radio" name="extAlarmsTerminated" value='HSPA-lte'

结果:print_r($_POST)输出:

Array ( [submitted] => true [update] => Update Details [siteId] => P6969 [siteName] => Toledo Centre [numHspaBbu] => 1 [numLteBbu] => 1 [extAlarmsTerminated] => HSPA-lte )

I thought I could then get access to this changed $siteName value with something like:

$siteName = $_GET[ 'siteName' ]; But apparently not. Is there indeed a way to access this changed PHP var that I think must be now stored in ajax.php?

首先,您使用的是 POST 而不是 GET 方法,因此您应该寻找 $_POST['siteName']

其次,如果您要确保传递正确的值,请在您的表单中更改此值 <form id="formContent" action="#" method="post" ...

<form id="formContent" action="test.php" method="post" ... 其中 test.php 包含:

<?php echo ( $_POST['siteName'] ); ?>

关于php - html.php 表单将 bool 单选按钮值呈现为 `on`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42885524/

有关php - html.php 表单将 bool 单选按钮值呈现为 `on`的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby-on-rails - rails : keeping DRY with ActiveRecord models that share similar complex attributes - 2

    这似乎应该有一个直截了当的答案,但在Google上花了很多时间,所以我找不到它。这可能是缺少正确关键字的情况。在我的RoR应用程序中,我有几个模型共享一种特定类型的字符串属性,该属性具有特殊验证和其他功能。我能想到的最接近的类似示例是表示URL的字符串。这会导致模型中出现大量重复(甚至单元测试中会出现更多重复),但我不确定如何让它更DRY。我能想到几个可能的方向...按照“validates_url_format_of”插件,但这只会让验证干给这个特殊的字符串它自己的模型,但这看起来很像重溶液为这个特殊的字符串创建一个ruby​​类,但是我如何得到ActiveRecord关联这个类模型

  3. ruby-on-rails - 在 Rails 中将文件大小字符串转换为等效千字节 - 2

    我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,

  4. ruby-on-rails - Ruby net/ldap 模块中的内存泄漏 - 2

    作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代

  5. ruby-on-rails - unicode 字符串的长度 - 2

    在我的Rails(2.3,Ruby1.8.7)应用程序中,我需要将字符串截断到一定长度。该字符串是unicode,在控制台中运行测试时,例如'א'.length,我意识到返回了双倍长度。我想要一个与编码无关的长度,以便对unicode字符串或latin1编码字符串进行相同的截断。我已经了解了Ruby的大部分unicode资料,但仍然有些一头雾水。应该如何解决这个问题? 最佳答案 Rails有一个返回多字节字符的mb_chars方法。试试unicode_string.mb_chars.slice(0,50)

  6. ruby-on-rails - Ruby on Rails 迁移,将表更改为 MyISAM - 2

    如何正确创建Rails迁移,以便将表更改为MySQL中的MyISAM?目前是InnoDB。运行原始执行语句会更改表,但它不会更新db/schema.rb,因此当在测试环境中重新创建表时,它会返回到InnoDB并且我的全文搜索失败。我如何着手更改/添加迁移,以便将现有表修改为MyISAM并更新schema.rb,以便我的数据库和相应的测试数据库得到相应更新? 最佳答案 我没有找到执行此操作的好方法。您可以像有人建议的那样更改您的schema.rb,然后运行:rakedb:schema:load,但是,这将覆盖您的数据。我的做法是(假设

  7. ruby-on-rails - rails : "missing partial" when calling 'render' in RSpec test - 2

    我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou

  8. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

    我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

  9. ruby-on-rails - Rails 3 中的多个路由文件 - 2

    Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题

  10. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

随机推荐