将数据从下拉列表保存到数据库CakePHP

时间:2017-03-10 08:58:46

标签: php jquery html cakephp cakephp-3.0

我是CakePhp框架的新手,目前我正在测试一个项目。问题是,我可以填充下拉选项,但是当我想选择一个选项时,它不会保存在数据库中。我错过了什么?

使用此代码我可以填充下拉菜单 - bookings.js

    $("#contact_submit").click(function () {

    var name = $("#name").val();
    var contact_email = $("#contact_email").val();
    var subject = $("#subject").val();
    var message = $("#txtmessage").val();
    var service = $("#sel1").val();

    console.log(name+contact_email+subject+message+service);

    $.post("/inquiries/inquiry", //Required URL of the page on server
            {// Data Sending With Request To Server
                name: name,
                email: contact_email,
                subject: subject,
                txt: message,
                service_id: service,
            },
            function (response) { // Required Callback Function
            if (jQuery.parseJSON(response).status == 'success') {
            if ($("#available").hasClass("hide")) {
                $("#available").removeClass("hide");
            }
            if (!$("#available").hasClass("hide")) {
                $("#notavailable").addClass("hide");
            }

            }else{
            if ($("#notavailable").hasClass("hide")) {
                $("#notavailable").removeClass("hide");
            }
            if (!$("#available").hasClass("hide")) {
                $("#available").addClass("hide");
            }
            }
            });
});

InquriesController.php

    public function inquiry()
     {
    $inquiry = $this->Inquiries->newEntity();
    if ($this->request->is('post')) {

    $emailaddress = $this->request->data['email'];
    $subject = $this->request->data['subject'];
    $txt = $this->request->data['txt'];
    $services = $this->request->data['service_id'];
    $message = "this is a message"; 
    $inquiry = $this->Inquiries->patchEntity($inquiry, $this->request->data);

        if ($this->Inquiries->save($inquiry)) {

        $email = new Email('default');
        $email->from(['myemail@gmail.com' => 'Testing Hotel'])
        ->to($emailaddress)
        ->subject('Inquiry Mail')
        ->emailFormat('html')
        ->send($message);

        echo json_encode(['status' => 'success']);
        exit; 

        } else {

        echo json_encode(['status' => 'failed']);
        exit;  

        }
    }

}

HTML CODE SNIPPET

                              
        <div class="col-md-6 col-sm-6 col-xs-12">
            <input type="text" name="contact_email" id="contact_email" class="form-control" placeholder="Email *"> 
        </div>
        <div class="col-md-12 col-sm-12 col-xs-12">
            <input type="text" id="subject" class="form-control" placeholder="Subject"> 
        </div>
        <div class="col-md-12 col-sm-12 col-xs-12">

            <input class="form-control" name="txtmessage" id="txtmessage" rows="8" placeholder="Messages goes here.."></input>

            <div class="form-group">
                <select class="form-control" id="sel1">
                    <option>Select a service</option>
                    <?php
                      if (!empty($ServicesInfo)) { 
                          foreach ($ServicesInfo as $Services):        
                            ?> 
                        <option value="<?=  h($Services->name)?>"><?=  h($Services->name)?></option>
                    <?php endforeach;  } ?> 
                </select>
            </div>

1 个答案:

答案 0 :(得分:1)

正如我告诉你的那样,表中的 int 字段无法保存服务名称的varchar。因此,您需要从select选项发送服务ID作为值。像这样:

<option value="<?= h($Services->id)?>"><?= h($Services->name)?></option>