【问题标题】:JSON values from dropdown showing ID numbers instead of strings in database下拉列表中的 JSON 值显示 ID 号而不是数据库中的字符串
【发布时间】:2018-11-04 04:27:47
【问题描述】:

我正在尝试将两个带有 JSON 数据的下拉列表提交到我的数据库表中。我可以获取插入到表中的数据,但“日期”和“时间”列显示 ID 和父 ID,而不是下拉菜单中可用的日期和时间。谁能告诉我这是为什么? (主要相关代码展示)

<?php

session_start();
include('includes/config.php');
error_reporting(0);

if (isset($_POST['submit'])) {
  $arenadate = $_POST['date'];
  $arenatime = $_POST['time'];
  $useremail = $_SESSION['login'];
  $sql       = "INSERT INTO  tblbooking(userEmail,ArenaDate,ArenaTime) VALUES(:useremail,:date, :time)";
  $query     = $dbh->prepare($sql);
  $query->bindParam(':useremail', $useremail, PDO::PARAM_STR);
  $query->bindParam(':date', $arenadate, PDO::PARAM_STR);
  $query->bindParam(':time', $arenatime, PDO::PARAM_STR);
  $query->execute();
  $lastInsertId = $dbh->lastInsertId();
  if ($lastInsertId) {
    echo "<script>alert('Booking successful.');</script>";
  }
  else {
    echo "<script>alert('Something went wrong. Please try again');</script>";
  }
}

?>

<form action="" method="post">
    <div class="contact_form gray-bg">
        <div class="form-group">
            <label for="" class="control-label">Select Date</label>
            <select name="date" id="date" class="form-control white_bg"
                    data-width="120px" style="color:black" required>
                <option value="">Select Date</option>
            </select>
        </div>

        <div class="form-group">
            <label for="" class="control-label">Select Time</label>
            <select name="time" id="time" class="form-control white_bg"
                    data-width="120px" style="color:black" required>
                <option value="">Select Time</option>
            </select>
        </div>
      <?php if ($_SESSION['login']) {
        ?>
          <div class="modal-footer text-center">
              <input type="submit" name="submit" value="Confirm Booking"
                     class="btn btn-xs uppercase">
          </div>
      <?php } else { ?>
          <a href="#loginform" class="btn btn-xs uppercase" data-toggle="modal"
             data-dismiss="modal">Login To Book Seat</a>
      <?php } ?>
    </div>
    </div>
    </div>
</form>
</div>
</div>
</section>

<script>
  $(document).ready(function (e) {

    function get_json_data(id, parent_id) {
      var html_code = '';
      $.getJSON('date_list.json', function (data) {
        ListName = id.substr(0, 1).toUpperCase() + id.substr(1);
        html_code += '<option value="">Select ' + ListName + '</option>';
        $.each(data, function (key, value) {
          if (value.parent_id == parent_id) {
            html_code += '<option value="' + value.id + '">' + value.avail + '</option>';
          }
        });
        $('#' + id).html(html_code);
      });
    }

    get_json_data('date', 0);

    $(document).on('change', '#date', function () {
      var date_id = $(this).val();
      if (date_id != '') {
        get_json_data('time', date_id);
      } else {
        $('#time').html('<option value="">Select Time</option>');
      }
    });

  });
</script>

【问题讨论】:

  • 难道不是因为从选择中作为表单数据发送的是所选选项的“值”属性中的值,而不是标签本身的内容吗? (除非没有“价值”属性......)在你的情况下,id是什么?
  • @dgig 抱歉,但我很困惑。我需要将 id 更改为 value 属性吗?
  • 我认为是这样 - 如果您希望原始日期或时间显示在 $_POST 数组中,那么您当然会这样做。
  • @dgig 我有一个包含每个日期和时间的“date_list.json”文件。我需要更改此文件中的某些内容吗?
  • 我不这么认为。我想你可能只需要这样做:html_code += '&lt;option value="' + value.avail + '"&gt;' + value.avail + '&lt;/option&gt;';

标签: php html mysql json dropdown


【解决方案1】:

您正在覆盖 #date 中的空选项,因此 html 中并不真正需要它。您可以更改以下行:

html_code += '<option value="' + value.id + '">' + value.avail + '</option>';

到:

html_code += '<option value="' + value.avail + '" data-id="'+value.id+'">' + value.avail + '</option>';

“日期”和“时间”的发布值将是选定的选项值属性,但这会破坏选择日期并根据该 ID 获取时间。在这种情况下,您可以添加一个 data-id 属性并使用它来获取时间,这意味着以下代码将从:

var date_id = $(this).val();

到:

var date_id = $(this).data('id');

【讨论】:

  • 我已经尝试过了,但它似乎仍然只允许我查看日期下拉列表。我在 data-id 属性中包含什么?
【解决方案2】:

不要设置&lt;option&gt; 标记的value 属性,除非您希望表单接收该值而不是可见文本。

如果你在 &lt;select name="date"&gt; 中写下这样的选项:

<option value="">Select an option</option>

然后 POSTing 表单将发送$_POST['date'] = ''

如果你写:

<option>Select an option</option>

然后 POSTing 表单将发送$_POST['date'] = 'Select an option'

在表单传递方面,永远不需要将选项文本复制为值。

如果您想在每个 &lt;option&gt; 标记内存储数据,我将给出与 aCMoFoCord 相同的建议,因为 data- 属性对于它们可以保存的值是干净且灵活的。

具体来说,我是说:

function get_json_data(id, parent_id) {
      var html_code = '';
      $.getJSON('date_list.json', function (data) {
        ListName = id.substr(0, 1).toUpperCase() + id.substr(1);
        html_code += '<option value="">Select ' + ListName + '</option>';
        $.each(data, function (key, value) {
          if (value.parent_id == parent_id) {
            html_code += '<option data-id="' + value.id + '">' + value.avail + '</option>';
          }
        });
        $('#' + id).html(html_code);
      });
    }

然后:

$(document).on('change', '#date', function () {
    if ($(this).val() != '') {
        get_json_data('time', $(this).data('id'));
    } else {
        $('#time').html('<option value="">Select Time</option>');
    }
});

【讨论】:

  • 我不确定如何处理数据属性
猜你喜欢
  • 1970-01-01
  • 2017-10-24
  • 1970-01-01
  • 1970-01-01
  • 2013-09-10
  • 1970-01-01
  • 1970-01-01
  • 2021-08-02
  • 1970-01-01
相关资源
最近更新 更多