json下拉列表中的值,显示数据库中的id号而不是字符串

dsf9zpds  于 2021-06-23  发布在  Mysql
关注(0)|答案(2)|浏览(279)

我试图将两个包含json数据的下拉列表提交到我的数据库表中。我可以得到插入到表中的数据,但是'date'和'time'列显示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>
7kjnsjlb

7kjnsjlb1#

不要设置 value 属性 <option> 标记,除非希望窗体接收该值而不是可见文本。
如果你在一个 <select name="date"> :

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

然后投递表格就会送达 $_POST['date'] = '' .
如果你写:

<option>Select an option</option>

然后投递表格就会送达 $_POST['date'] = 'Select an option' .
在表单传递方面,永远不需要将选项文本作为值复制。
如果要在每个 <option> tag,我会给你和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>');
    }
});
oiopk7p5

oiopk7p52#

您正在覆盖#date中的空选项,因此html中实际上不需要该选项。您可以更改以下行:

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

收件人:

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

“date”和“time”的过帐值将是“selected options value”属性,但这将中断基于该id选择日期和获取时间的过程。在这种情况下,可以添加数据id属性并使用该属性获取时间,这意味着以下代码将从:

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

收件人:

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

相关问题