【问题标题】:Determine which button was clicked when two buttons are on a form确定当窗体上有两个按钮时单击了哪个按钮
【发布时间】:2021-10-30 00:15:40
【问题描述】:

我正在尝试在我的表单中添加两个按钮,以记录联系供应商和回复的时间。

我遇到的问题是,当我单击一个按钮时,两个字段中的值都会发生变化。请建议我如何解决这个问题。

谢谢!

 <tr>     
    <th>
    <p>Vendor was contacted at:</p>
      <button name="start" >Start</button><br>
      <?php
      session_start ();
      if (isset($_POST['start']))
      {
      $date_start = date('m-d-Y H:i:s');
      $_SESSION['start'] = $date_start;
      }
      ?>
      <br>
      <input name="start" type="text" class="textfield" value="<?php echo $_SESSION['start']; ?>"
      <br>
      </th>
 </tr>
 <tr>
      <th>
      <p>Vendor responded at:</p>
      <button name="response" >Response</button><br>
      <?php
      if (isset($_POST['response']))
      {
      $date_response = date('m-d-Y H:i:s');
      $_SESSION['response'] = $date_response;
      }
      ?>
      <br>
      <input name="response" type="text" class="textfield" value="<?php echo $_SESSION['response']; ?>"
      <br>
      </th>
 </tr>

【问题讨论】:

  • 必须在按钮点击时写点什么?
  • 因为两个按钮的形式相同。如果你通过任何一个按钮提交,它会改变两个字段的值。所以你需要把它分成两个表单,一个文本字段,一个按钮!
  • 如果我理解正确,您是在建议我应该为每个表单设置两个表单一个按钮,例如: 按钮代码 按钮代码 跨度>

标签: php html forms


【解决方案1】:

首先$_POST['start'] 是一个名为start 的输入值,$_POST['response'] 是一个名为response 的输入值。 如果您想知道在表单中单击了哪个按钮,您必须为按钮设置一个值。将&lt;button name="start" &gt; 更改为&lt;input type="submit" value="start" /&gt;。比检查像这样点击的按钮if ('start' === $_POST['submit'])。 在底部,您的代码应如下所示:

<tr>     
    <th>
        <p>Vendor was contacted at:</p>
          <!-- changed line -->
          <input type="submit" name="submit" value="start" /><br>
          <?php
          session_start ();
          /* changed line */
          if ('start' === $_POST['submit']) {
              $date_start = date('m-d-Y H:i:s');
              $_SESSION['start'] = $date_start;
          }
          ?>
          <br>
          <input name="start" type="text" class="textfield" value="<?php echo $_SESSION['start']; ?>"
          <br>
    </th>
</tr>

祝你好运!

【讨论】:

  • 感谢您的回复。现在,当我点击开始按钮时,我在文本字段中看不到日期。表单被刷新。
  • 对不起,我的错。按钮也应该有一个名字! &lt;input type="submit" name="submit" value="start" /&gt;
【解决方案2】:

这里有几个问题...

首先 - 您正在加载页面并尝试回显一个不存在的会话。这会给你带来错误。

要解决此问题,请将$_SESSION['start'] = ''; 放在if (isset($_POST['start'])) 上方并将$_SESSION['response'] = ''; 放在if (isset($_POST['response'])) 上方,这定义了您的会话,但值为空。

第二 - 将每个表格行放在自己的表格和表格中。

<form name="form1" method="post" action="">
<table>
  <tr>     
    <th>
    <p>Vendor was contacted at:</p>
      <button name="start" >Start</button><br>
      <?php
      if (!isset($_SESSION)) {
          session_start ();
      }
      /* these five lines ask if there is an existing session & if there is an existing session... is it empty
      if there is an existing session & it's not empty... we use it
      otherwise... we create an empty session to prevent errors
      this also maintains the session data when the other button is clicked like you asked in your comments */
      if(isset($_SESSION['start']) && $_SESSION['start'] != '') {
          $_SESSION['start'] = $_SESSION['start'];
      } else {
          $_SESSION['start'] = '';
      }
      if (isset($_POST['start']))
      {
      $date_start = date('m-d-Y H:i:s');
      $_SESSION['start'] = $date_start;
      }
      ?>
      <br>
      <input name="start" type="text" class="textfield" value="<?php echo $_SESSION['start']; ?>">
      <br>
      </th>
  </tr>
</table>
</form>
<form name="form2" method="post" action="">
<table>
  <tr>
      <th>
      <p>Vendor responded at:</p>
      <button name="response" >Response</button><br>
      <?php
      if(isset($_SESSION['response']) && $_SESSION['response'] != '') {
          $_SESSION['response'] = $_SESSION['response'];
      } else {
          $_SESSION['response'] = '';
      }
      if (isset($_POST['response']))
      {
      $date_response = date('m-d-Y H:i:s');
      $_SESSION['response'] = $date_response;
      }
      ?>
      <br>
      <input name="response" type="text" class="textfield" value="<?php echo $_SESSION['response']; ?>">
      <br>
      </th>
  </tr>
</table>
</form>

更新:

如果你想保留数据(如果你想让你的数据持久化)......改变......

      <?php
      session_start ();
      $_SESSION['start'] = '';
      if (isset($_POST['start'])) {
          $date_start = date('m-d-Y H:i:s');
          $_SESSION['start'] = $date_start;
      }
      ?>

到...

      <?php
      if (!isset($_SESSION)) {
          session_start ();
      }
      if(isset($_SESSION['start']) && $_SESSION['start'] != '') {
          $_SESSION['start'] = $_SESSION['start'];
      } else {
          $_SESSION['start'] = '';
      }
      if (isset($_POST['start']))
      {
      $date_start = date('m-d-Y H:i:s');
      $_SESSION['start'] = $date_start;
      }
      ?>

然后改变...

  <?php
  $_SESSION['response'] = ''; 
  if (isset($_POST['response'])) {
      $date_response = date('m-d-Y H:i:s');
      $_SESSION['response'] = $date_response;
  }
  ?>

到...

      <?php
      if(isset($_SESSION['response']) && $_SESSION['response'] != '') {
          $_SESSION['response'] = $_SESSION['response'];
      } else {
          $_SESSION['response'] = '';
      }
      if (isset($_POST['response']))
      {
      $date_response = date('m-d-Y H:i:s');
      $_SESSION['response'] = $date_response;
      }
      ?>

【讨论】:

  • @TomKriek - 单击任一按钮更改两个文本字段的原因是因为它们都采用相同的形式。如我的回答所示,它们必须分成单独的形式。您可能需要仔细查看并重新考虑。
  • @Kuya - 谢谢你的建议。我进行了您建议的更改,并使用代码创建了两个表单。但是,当我单击一个按钮时,另一个按钮数据会被清除。请指教。
  • 还是同样的问题。当我点击开始时,它也在更新响应,反之亦然。
  • 请仔细查看您的代码,并将其与我上面写的进行比较。如果您已经像 asnwer 中那样分离了表单,并密切注意命名元素,start 将不会更新 response,反之亦然。上面的代码已经过测试,可以按照您的意愿运行。
  • 还可以尝试使用 Ctrl-f5 进行“硬”刷新,以确保您没有拉出缓存页面
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-04
  • 1970-01-01
  • 1970-01-01
  • 2017-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多