html.php 表单将布尔单选按钮值呈现为“on”

Posted

技术标签:

【中文标题】html.php 表单将布尔单选按钮值呈现为“on”【英文标题】:html.php form renders boolean radio button value to `on` 【发布时间】:2017-08-10 15:56:20 【问题描述】:

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

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

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

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

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

如果是这样,由于我需要通过条件检查任何给定集合的哪个单选按钮需要是 checked,因此可能需要什么修复?

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 输出首先显示,用户按下检索按钮后显示的布尔单选按钮值:

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 var,当单击“更新详细信息”按钮时,将引用 $_SESSION 变量,这解决了单选按钮被分配on 的原始问题。

但我仍然无法保存对用户可能进行的详细信息的任何更改。我已经研究了 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 var?

【问题讨论】:

如果您希望它不是“on”,您还需要在复选框上设置“value”属性。代码无法猜测该值应该是什么。 好吧,我无法再次重置数据库中的值,否则会否定用户对已更改值的任何更改。也许我需要使用 javascript 来获取元素的当前值? 您有多个具有相同名称但没有值的复选框,您希望它如何工作?如果没有值,你怎么知道哪个复选框被选中,哪个复选框没有被选中以及它们应该包含哪些值? 我可以使用$_SESSIONS 来保存和检索输入字段的值,但是我仍然面临提取用户更改的更改值的问题。 【参考方案1】:

尝试为每个输入复选框分配一个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] =&gt; true [update] =&gt; Update Details [siteId] =&gt; P6969 [siteName] =&gt; Toledo Centre [numHspaBbu] =&gt; 1 [numLteBbu] =&gt; 1 [extAlarmsTerminated] =&gt; HSPA-lte )

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

$siteName = $_GET['siteName']; 但显然不是。 确实有办法访问这个我认为现在必须存储在 ajax.php 中的更改后的 PHP var?

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

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

通过 &lt;form id="formContent" action="test.php" method="post" ... 其中 test.php 包含:

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

【讨论】:

以上是关于html.php 表单将布尔单选按钮值呈现为“on”的主要内容,如果未能解决你的问题,请参考以下文章

单选按钮将值发送为 Male=on 或 Female=on。我只想将 Male/Female 发送到数据库

Django BooleanField 作为单选按钮?

AngularJS:将布尔值绑定到单选按钮,以便在取消选中事件时将模型更新为 false

如何上传以 html 表单输入的单选按钮值

MUI 单选按钮组返回字符串,尽管它提供了布尔值

ReactJS:如何在单选按钮中使用布尔值?